BlitzKeys: A Weekend Typing Game in Elixir

by Oskar Freye

I built a real-time competitive typing game with Elixir and Phoenix LiveView in a single weekend.

BlitzKeys Typing Game

Sometimes you just need a palate cleanser. After months of grinding on fr3n — monorepo sprawl, SST stacks, design system refactors — I needed something fun. Something I could ship in a weekend.

So on November 9th I sat down and started building BlitzKeys — a real-time competitive typing game.

Why Elixir?

I’ve been curious about Elixir since my LeetCode cheatsheet post at the start of the year. The concurrency model, the fault tolerance, the sheer elegance of pattern matching. But I hadn’t built anything real with it. A real-time multiplayer game seemed like the perfect test.

The 24-Hour Sprint

The pace was ridiculous. First commit at 3pm on Saturday, and by Sunday 3am I had:

Phoenix LiveView is genuinely magical for this kind of thing. Zero client-side JavaScript for the interactive bits — the server pushes DOM patches over WebSocket. The typing input, the live scoreboard, the room list — all server-rendered in real-time.

What I Learned

  1. Phoenix Channels are absurdly good for real-time features. The abstraction is clean, the performance is excellent, and the developer experience beats anything I’ve used in Node.js.
  2. LiveView removes an entire category of bugs — no client state to sync, no API layer to maintain, no loading spinners. The server is the single source of truth.
  3. Docker + Phoenix is tricky — static assets need careful handling in the build, and binding to the right interface for production took a few tries.

BlitzKeys is open source at github.com/execute008/blitzkeys. It’s small, it’s fun, and it reminded me why I love building things.