The concept was simple: build a game that uses the phone's accelerometer to move a ball. Not a screen rotation — not portrait flipping to landscape — but continuous tilt. Hold the phone flat like a tray, and the ball rolls the way gravity would pull it. The whole screen becomes a physical surface.
On desktop, arrow keys or WASD give you the same control without the tilt. The game works everywhere, but it was designed to be played on mobile — held in two hands, tilted.
The distinction that mattered: the game reads the raw gravity vector from the accelerometer — not the screen orientation event. This means the ball responds to how much you're tilting, not which way the screen is facing. It's the same mechanic as a real wooden marble labyrinth.
The live game is at ball-tilt-game.vercel.app — best on mobile.

Building this iteratively — rather than from a complete spec upfront — meant the quality came from playing it seriously and noticing what felt wrong.

No ticket. No spec. Just a thought mid-session:
“Let's also add a feature where the user can select a rage bait version — where the ball moves in the opposite direction of the tilt.”
The toggle is on the menu screen, styled in red-orange so it reads as dangerous before you even turn it on. Off by default. When it's on, every input is flipped — tilt right, ball goes left. Arrow key up, ball goes down. It works on mobile tilt and desktop keys both.
It's a genuinely good feature — harder, funnier, and it reframes the whole game for people who've already completed the levels. It came from just playing it and asking “what if it was worse on purpose?”
The point: features that come from using a product are different from features that come from a brief. This one only existed because someone played the game and had a thought.
ZombieVault was spec-first — a 900-line document written before a single line of code. Ball Tilt Game was iterative — an idea, a build, then a series of real observations from actually playing it. Different projects call for different approaches.
In both cases, the human role is the same: decide what to build, use what gets built, and describe clearly what needs to change. The tool executes. The judgment is yours.