Inspiration
The idea for RepoBoards came when I was talking with some friends about DevSoc’s Training Program. Every intake, there are Training Projects that end up unfinished or even abandoned. I always wanted to be part of the change, but I wondered how. After all, the program is about building, and if I automated too much on the technical side, it could actually discourage trainees and training leads from contributing.
What I realized is that motivation is just as important as technical skills. Leaderboards work so well in games because they spark competitiveness and awareness. That same sense of friendly competition can encourage trainees to stay engaged and enthusiastic throughout the program.
At the end of the day, most Training Projects “fail” not because of technical limits, but because of human factors like lack of motivation or consistency. So instead of solving the problem with more code, I focused on solving it with encouragement. And that’s how RepoBoards was born: a way to gamify contributions, inspire participation, and give every trainee/training-lead a reason to keep building.
What it does
RepoBoards transforms any public GitHub repository into an interactive leaderboard. Once you select a repo, the app automatically fetches its commits using GitHub’s API. Behind the scenes, it analyzes contributions by weighing factors like consistency, recency, and code quality.
Instead of just counting raw commits, RepoBoards uses a greedy algorithm that prioritizes commits with the highest contribution-to-quality ratio. This ensures rankings highlight meaningful impact, not just volume.
The results are displayed as a live leaderboard with a points bar showing who’s leading. By clicking on a contributor, you can see the reasoning behind their “impact score,” offering transparency into how points were calculated.
Beyond the web app, RepoBoards also integrates with Discord. Teams can add the Hacka bot to their server, use simple start and stop commands to automate leaderboard updates every 30 minutes, and even track multiple repositories at once.
How we built it
We used T3 stack as the foundation, cause we wanted Next.js + TypeScript setup right out of the box. Since RepoBoards doesn’t require persistent storage, we intentionally built it without a database, all the data is fetched directly from GitHub’s APIs in real time.
On the backend, we integrated GitHub’s commit APIs to retrieve both the commit history and commit content, then applied our custom scoring algorithm to calculate impact points. On the frontend, we used React components to display an interactive leaderboard, complete with dynamic points bars and detailed reasoning when clicking on contributors.
For community integration, we extended the project with a Discord bot using discord.js. The bot connects directly to the same backend logic, allowing users to add Hacka to their server and run commands like start and stop to fetch leaderboards every 30 minutes.
Challenges we ran into
The biggest challenge came from integrating Discord.js into the T3 stack. Specifically, we ran into issues importing discord.js inside our tRPC server. Next.js bundles the server code differently, and because discord.js has dependencies like zlib-sync, the import failed at runtime.
This meant we couldn’t just treat the Discord bot as a simple server function. We had to rethink how to structure the bot so it could run alongside our Next.js app without breaking the build process.
Accomplishments that we're proud of
We manage to finish the MVP, and basically builded our project based on theme, which we are really happy with.
What we learned
A ot of backend stuff, primarily integration with github api and discord.js, also learning more about the T3 stack and ultimately what we should improve next.
What's next for RepoBoards
- containerize with docker, get a new discord system
- add discord webhook for live data
- add websockets in the leaderboard frontend
- improve overall UI choices but keep theme of 'cartoony'
Built With
- discord.js
- github
- next.js
- prisma
- t3
- trpc
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.