https://monad-plays-pokemon.up.railway.app/

I spent 1999 sinking hundreds of hours into Pokémon Red, trading turns with my twin brother. I missed the 2014 'Twitch Plays Pokémon' phenomenon, where 120k concurrent users controlled a Game Boy via chat commands, but the technical chaos of it stuck with me. Chat was so clogged that Twitch had to migrate the stream to infrastructure reserved for massive esports competitions. 20-40s input lag turned a simple ledge into a challenge.

Curse you Retnaburn.

Curse you Retnaburn.

Since that time, I spent a decade in the high frequency trading (HFT) world before joining Category Labs (building the client for the Monad blockchain). In mid-December, I asked myself two questions:

  1. Could Twitch Plays Pokémon work on the blockchain? The challenge is latency. A standard Ethereum 12-second block time would be unplayable. Monad features 400 ms block times, and I suspected that would be sufficiently fast.
  2. Could I build a proof of concept with assistance from Claude Code? I have next to no experience with front end development, so I was extremely confident that I could not without AI help. This was a good opportunity to further evaluate Claude Code’s capabilities.

The Architecture

Just like the original Twitch Plays Pokémon, I would need a back end for a global game state and a front end to view and interact with that state. My goal was to incorporate the blockchain in some meaningful way, which makes transactions and state globally readable and auditable. This comes at the cost of gas fees and delay for block production and global consensus or agreement on the next block.

<aside> 📈

Trade-to-tick?

In the world of HFT, we obsessed over tick-to-trade times. Every nanosecond from the market data (tick) coming over the wire to firing an order (trade) or cancel was measured, because this was controllable and lower (all else equal) meant you were winning.

When writing a blockchain application for casual users, winning is minimizing the trade (user action) to tick (UI response).

</aside>

The minimal POC would use the Monad blockchain as a record of auditable votes from users while the indexer would do the heavy lifting of aggregating votes appropriately and sequencing actions as emulator input. That emulator state would be visually represented somehow on the front end.

Implementation

I would consider myself an average user of LLM coding agents, certainly not a power user. To reiterate, I know next to nothing about modern web development apart from the (critical) understanding that LLM coding agents are quite powerful in that domain.

I fed Gemini Pro (it had just become available and I had heard good things) a bullet list of elements that I wanted. A lightweight smart contract developed with Foundry to emit Vote transactions. An intelligent indexer that could listen to those events (with optimistic Monad websockets) and sequence appropriate inputs to the game. A front end that could render the Game Boy emulator and handle user inputs. Gemini Pro produced a more complete spec in markdown that I copied into a blank repo as CLAUDE.md. Then Jean-Claude (Opus 4.5) took the wheel.

We’ve exported a smaller version as a Slack Emoji

We’ve exported a smaller version as a Slack Emoji