Inspiration
AlgoTime is our weekly coding event, and we kept asking ourselves why grinding Leetcode in a room full of people still felt so isolating. So we built AlgoGame, a multiplayer game where players draw algorithms, describe data structures, and race to guess Leetcode problems across three game modes inspired by Skribbl, Exquisite Corpse, and Blackjack. Same problems, completely different energy.
What it does
Every game mode earns you points that feed into a shared leaderboard, so the competition carries across all three modes and the whole session. Show up every week, climb the ranks, and prove you actually know your algorithms.
How we built it
NPC Hacks runs on a single Node.js + Express server that serves all static files and manages real-time communication via Socket.io. The lobby system lives in server.js and is shared across all game modes — each mode registers its own socket handlers through a gameHandler.register(io, lobbies) pattern, keeping game logic isolated from the shared infrastructure. The frontend is vanilla JavaScript with no framework: the root lobby (public/index.html) handles player login, room creation/joining, and game mode selection, while each game mode has its own page served at a sub-path (e.g. /classic). The Classic mode (LeetCode Skribbl) uses CodeMirror 5 loaded from CDN for the in-browser code editor, and pulls problems from a static problems.json file — no database, no external APIs. When the host starts Classic, the server creates game state, all clients navigate to /classic, reconnect via a classicRejoin handshake that remaps their new socket IDs, and the round begins. Styling uses CSS custom properties with a consistent design language (Bebas Neue display font, Space Mono monospace, lime-on-black palette) shared across the root and game pages.
Challenges we ran into
Since each of us built a game mode independently, merging everything together turned out to be the hardest part. We ran into conflicting state management, inconsistent scoring logic, and UI patterns that didn't quite speak the same language. Getting three separately built experiences to feel like one cohesive game taught us a lot about communication, code architecture, and the importance of agreeing on shared interfaces before anyone writes a single line.
Accomplishments that we're proud of
Shipping a fully playable multiplayer game from scratch, designing and balancing three distinct game modes that each bring a different energy, and building som…Shipping a fully playable multiplayer game from scratch, designing and balancing three distinct game modes that each bring a different energy, and building something with a real home inside AlgoTime that people will actually come back to every week.
What we learned
Building AlgoGame taught us more than we expected. Designing three distinct game modes forced us to think about game balance, player experience, and scoring systems in ways that pure software development never had. We had to figure out how to make each mode feel fair and rewarding, tune point values so no single mode dominated the leaderboard, and keep the pacing tight enough that players stayed engaged. It was our first real dive into game design thinking, and it changed how we approach building anything interactive.
What's next for AlgoGame
Next, we'll see AlgoGame in the classroom. We plan on deploying the game and using them in our weekly events to drive more participations and fun.
Built With
- bebas
- codemirror
- express.js
- javascript
- leetcode
- node.js
- socket.io
Log in or sign up for Devpost to join the conversation.