Inspiration

I wanted to make a game around one small moment: “oh no—oh no—saved it.” A tiny, very serious worker pushes a coffee cup much too big for him. Hold to accelerate; release to brake. That was the starting point. The difficult part was making the coffee something you could learn to control, rather than something you watched while hoping it would behave.

What it does

Don’t Spill is a portrait arcade game for iPhone. Deliver before the customer leaves, collect tips, and keep going through Old Town, the Market, Uptown and the Docks. Acceleration, braking and pavement disturb the coffee. One drop ends the run. Routes change between attempts, but the liquid follows consistent rules.

The street also has a sense of humour. A cat can join the trolley. An outrageously long limousine passes through Uptown. At the Docks, a seagull can interrupt work with a little pixel-art battle.

How I built it

I developed the game iteratively with Claude and Codex, using plain JavaScript, Canvas and Web Audio, then packaged it for iPhone with Capacitor. The simulation runs in fixed steps, and the rendered coffee surface and spill check share the same underlying state. Recorded playtests and repeatable scenarios helped compare input strategies and catch regressions.

RevenueCat handles the Regular’s Card: one non-consumable purchase unlocking all ten cosmetic sets, the character creator and additional colour choices. Sets can also be earned with tips. The card changes your appearance, never your speed or coffee physics; badge trophies remain earned through play.

Challenges

My first concern was that I was only managing speed, not balancing coffee. We tried changes, rejected a test scene, restored some difficulty, and returned to the problem. When I finally caught myself watching the wave, it felt like progress. Further tests also exposed a shortcut: repeated quick taps could be too effective. That sent us back to testing decisions, rather than just increasing difficulty.

Accomplishments

The result is a small playable world with a consistent visual identity, absurd interruptions and customization visible on the actual trolley. The iPhone build has been tested for purchase cancellation, successful purchase and ownership after offline reopening, and submitted to Apple for review.

What I learned

A simple control scheme still needs careful feedback. Automated comparisons can show that inputs change an outcome; playing on a phone tells me whether I can understand that change. Neither replaces the other.

What’s next

Release, listen to players, and improve the confusing moments they actually encounter. I want to earn the next addition through playtesting, rather than bury the central idea under more features.

Built With

Share this project:

Updates

Submission history