Build. Break. Collaborate. Repeat.
This is the code for the website of UFC, the open source club at the University School of Automation and Robotics (USAR), GGSIPU. It is a student run club, backed by FOSS United, and this website is one of the things we build together. If you found a typo, a bug or something that could be nicer, you are exactly who this repo is for.
In 2025 Siddharth and a few friends noticed that plenty of people at USAR could code, but most of it stayed on their own laptops. Nobody on campus was making open source the main thing. So they started a club for it, and other people turned up.
We keep the philosophy short on purpose. There are four things we care about, and the rest of what we do comes from them.
- Everyone is invited. Developers, designers, hardware tinkerers, writers, organisers and total beginners. Open source gets better with every kind of person in it, so we make room on purpose.
- No proprietary master. No company, sponsor or single person owns the club. We pick our own projects, make our own rules and share what we make.
- No hierarchy that matters. Somebody has to run the group chat and book the rooms, but titles do not decide whose idea wins. A first-year's pull request gets the same review as anyone else's.
- Spread the word. Most students have never heard of open source, or assume it is not for them. We run workshops, talks and events, and have a lot of conversations, so more people know it is for them too.
If something helps the project or the people around it, we count it as a contribution. That includes code, but it also includes a poster, a doc fix, a good question, a soldered board or a well run event.
The site is not a brochure with a list of features. It tries to explain the club the way we would explain it to a friend, and it follows a few rules.
Plain, human words. We write in the first person plural and keep the tone friendly. No corporate phrases, no hype, no long manifesto. If a sentence sounds like a press release, we rewrite it. We also avoid em dashes and emojis in the copy, because they make it read like it was written by a machine.
One idea per section. The home page is a single scroll, and each chapter has one job.
| Chapter | What it says |
|---|---|
| Premise | The four freedoms of free software (run, study, share, improve), numbered 0 to 3 like a programmer would, each one paired with something the club actually does about it. |
| The bazaar | Eric Raymond's cathedral and bazaar: closed software is built by a few people behind doors, open software by everyone who turns up. And the people who turned up first were never one type of person. |
| The big tent | Open source needs designers, writers, hardware people and beginners, not only programmers. Pick what sounds like you. |
| The log | A clothesline of the things we have run so far, from Genesis to Build with TRAE, so the history is easy to see. |
| The core leads | The students who keep the community alive, shown as a wall of photos with a short note each. |
| The workshop | The projects the community is proudest of, shown one by one, with who built them and where to find them. |
| The zoo | The mascots and logos of the open source world, as stickers you can grab and throw around. |
| The invitation | Where to join us. |
Show, do not only tell. The design is a scrapbook on purpose. Tape, polaroids, sticky notes and stickers say that this is a club made by people, not a company. Several pieces are interactive, such as the stickers you can drag and the thread that follows you down the About page. They are there to be fun, and the text still works without them.
Be honest about the size. We are one year old. The About page tells the story as it happened, including the parts where we were just a few friends with a group chat. The Achievements page says plainly where members have ended up, such as GSoC, FOSS United, DRDO and OWASP.
Everyone can find a way in. Pages end with something a newcomer can do next, whether that is joining the chat, reading about an event or opening a pull request.
- Home, About, Events, Achievements. The public pages. Each event also has its own page.
- Dashboard. For members who sign in with GitHub: an overview, a leaderboard, an activity feed, the member list, event proposals and settings.
- Next.js 16 (App Router) with React 19 and TypeScript
- Tailwind CSS 4, plus a hand written design system in
src/components/home/home.css - Framer Motion for animation, Lenis for smooth scrolling and Matter.js for the sticker physics
- next-auth with GitHub OAuth
- Prisma 7 with PostgreSQL
- Upstash Redis for caching and live updates, and Upstash QStash for background jobs
You need Node.js and a PostgreSQL database. A Neon or Supabase database works fine.
git clone https://github.com/USAR-FOSS/ufc_website.git
cd ufc_website
npm install
cp .env.example .envFill in .env. The file has a comment next to every value that explains where to get it. The only things you must create yourself are a database, a GitHub OAuth app with the callback http://localhost:3000/api/auth/callback/github, and a random secret. Then:
npx prisma migrate deploy
npm run devOpen http://localhost:3000. The public pages work without any of the Upstash keys. They are only needed for the dashboard's caching and background sync.
The dashboard keeps GitHub and LeetCode numbers up to date through Upstash QStash. To try it locally, run this in a second terminal and copy the credentials it prints into your .env:
npx @upstash/qstash-cli devSet NEXTAUTH_URL=http://localhost:3000 too, then restart npm run dev. Without QStash everything else still works.
| Command | What it does |
|---|---|
npm run dev |
Start the dev server |
npm run build |
Generate the Prisma client and make a production build |
npm run lint |
Run ESLint. It should finish with no warnings |
npm test |
Run the unit tests |
npm run format |
Format everything with Prettier |
npm run db:seed |
Add five fake members so the leaderboard has something to show |
npm run db:unseed |
Remove those fake members again |
npm run jobs:schedule |
Create the repeating background jobs in QStash (run it against your deployed site) |
We would love your help, and you do not need to be an expert.
- Fork USAR-FOSS/ufc_website and clone your fork.
- Create a branch with
git checkout -b my-change. - Make your change. Run
npm run lintbefore you commit. - Push the branch and open a pull request. Tell us what you changed and why, in your own words.
A few things that make a pull request easy to review:
- Keep it small. One idea per pull request.
- Match the tone of the existing copy if you change any text.
- If you add an image, make sure you are allowed to use it, and tell us where it came from.
- Not sure where to start? Ask in the Discord and someone will point you at something.
Whether you are a beginner or have been doing this for years, you are welcome here.
The code is released under the Apache License 2.0.
If you reuse our code, components or design, please keep the NOTICE file and give UFC credit somewhere visible, such as your README or footer. It is a small thing and it helps more people find the club.
The license covers our code and the original artwork we drew. It does not cover the third party mascots and logos used as stickers, company logos, or photos of our members and events. Those have their own owners and licenses, and NOTICE explains which is which. Every third party image, with its creator and license, is listed in third_party.md.
