Back to Portfolio

Zumpo

Little browser games, on your own or in real-time rooms

2026Web, Game

Live demoRepository

  • React
  • TypeScript
  • Vite
  • Node.js
  • Express
  • Socket.IO
  • Figma
  • Render
Zumpo

Zumpo is a home for little browser games, which I designed and built on my own. It hosts twelve of them, from Draw & Guess and Gomoku to Make 24 and Daily Word: play on your own straight away, or open a room and send your friends the link. It began as Icon.io, the final project of a web development course at Drexel, built by three of us in three weeks around a single game. I later rebuilt it from the ground up, with a new design, a new server, and eleven more games.

The server keeps the score

Every room lives on one Node.js server, and the server decides everything a player could gain by lying about. It runs each room's clock and sends players the time remaining rather than a timestamp, so a browser whose clock disagrees still counts down correctly. Each player receives a snapshot of the room built for them alone, so the word being drawn reaches the drawer and never the guessers. Every message is validated and rate-limited before it touches the game, and the drawing itself is server state, so a player who joins mid-turn sees the board as it stands.

A player's seat belongs to an identity the server issues, not to a connection, so a reload or a dropped network puts them back in their seat. The site runs on Render as a single long-lived process, since rooms and clocks live in its memory and a serverless host would drop the open sockets.

One set of rules, alone or together

Each game is a module on a shared room layer, which owns seats, hosts, reconnection, and the lobby, so a new game brings only its rules. A game on your own runs entirely in the browser with no socket, and takes its rules from the same shared code the server plays in rooms. Every event between the two sides is declared once in a typed wire contract, so TypeScript catches a change on one side that the other has not made.

Paper Pop

The design came first, as a Figma file of 261 screens, desktop and phone, in a style I called Paper Pop: cream paper, ink, and soft coral, lime, and blue. The colors, sizes, and type in the code are generated from that file, so the app and the design cannot drift apart. Every word on screen comes from a typed catalog, so the Chinese translation cannot fall behind the English, and the sounds play through a small engine on the Web Audio API that stays silent until the first tap.

Screenshots