The toy was easy to remember, hard to make feel right.
The toy works because you can feel it: the thump of the button, the near miss off a peg. Copied literally, it's just circles moving on a screen.
Design the feel first, then run it like a product.
I directed, Claude Code built.
Every design and product call was mine. Claude Code wrote the code, and I reviewed every build.
A link, not an app
I considered an app and decided against it. People don't install an app for a few minutes of play. The leaderboard brings them back, but an install asks for commitment before the first round. For a game this size, a link wins.
Physics that behaves like water
The real toy's jet shoots straight up, yet the rings swing out in a lazy arc and drift back down, now and then landing on a peg. That motion is the game, so I tuned it until the rings moved the same way. When one catches, it slides down and hangs at the bottom, like real plastic.
A device, not a webpage
I wanted an object, not a website, and looked to Dieter Rams: less, but better. A quiet graphite body, nothing on it that doesn't do something, and colour saved for what you press: the orange pumps, the way Braun used a single accent. A Tank | Board switch turns the same screen into the leaderboard.


A dramatic ending
The last ring is the fiddliest, and the real toy gives you nothing for it. I wanted a bang. The tank stays calm while you play, then, the moment all eight rings land, a graffiti hammerhead sweeps in and swallows the whole school in one gulp.
And the drama comes before the score. Nothing interrupts it: the shark eats, the tank goes quiet, and only then does your time land. By the time you save it, it's not just a number, it's the moment you earned it.
A leaderboard people could trust
Competition kept people replaying, so I was strict about what counts:
Running it live
A private dashboard tracks plays, a visit-to-save funnel and hourly charts, with kill switches and moderation. On day two, storage hit 90% of the free daily limit. I halved the writes that night, then moved to a database with 100x the headroom, with no downtime and no lost scores.
One story, six hours.
In the first afternoon, the record changed hands seven times, down to 0:14.9. People weren't just playing, they were competing.


Closing the loop. I shared the results back as stories: the crowd players were part of, and the names at the top for everyone else to chase.
Shipping was the start, not the end.
Feel is a design problem.
Most iterations went into how rings move. Knowing what "right" felt like mattered more than writing the physics.
Real users find the edges in hours.
Rude names, duplicates, storage limits: none showed up in testing. After launch, the job was fixing the next painful thing, the same day.
Directing AI still takes judgement.
Claude Code made a two-day build possible. What to cut and what's fair were still my calls.