← All builds

product · solo build · 2026

Settling who types fastest, with one link and no sign-up.

Start a room and share the link. Everyone types the same short story at once, with live progress bars, WPM, and accuracy, then a results chart and a weekly class leaderboard. No accounts, no ads.

Role Product owner and builder · Team Solo, built with Claude Code · Timeline October 2026

The problem

Typing races are a fun way to compete with friends. I wanted one a class could join from one link in a few seconds, on a laptop or a phone, with no accounts and no ads.

What I did

  • Wrote a PRD first, then built to it: rooms by four-letter code, a synced countdown, live progress, results, and rejoining after a refresh.
  • Ran each room as one Cloudflare Durable Object, so a race needs no database. Progress updates are under 30 bytes, about ten a second.
  • Checked typing in the browser with zero network delay. One input path handles desktop keyboards, phone keyboards, autocorrect, and smart quotes.
  • Made the start fair. Each browser syncs its clock with the server and counts down to the same instant, on timers rather than animation frames, so background tabs still hear GO.
  • Added anti-cheat (big jumps or a finish above 250 WPM count as did-not-finish) and a weekly top-10 leaderboard that resets Monday at midnight Pacific.
  • Wrote a 3-bot simulation that runs a full race end to end, in unranked rooms so test bots stay off the real board.

Results

10players per room
20original stories
<30 Bper progress update
11.5 KBclient code, gzipped

What I'd do differently

Keep test traffic out of production by design. Right after one deploy, my simulation put two bots on the live leaderboard because the old server was still answering. I removed them and made the simulation wait for the new version, but that guard should have come first.

Artifacts

Play TypeRace ↗

Results: finishing order, WPM, accuracy, and a WPM chart for the race.
Results: finishing order, WPM, accuracy, and a WPM chart for the race.
Live preview Open in new tab ↗