Devlog

One person, one HTML file, and a thirty-day economy simulation.

Poopy is a solo project. One person, one HTML file, no engine. This page is the honest version of how it got built — including the parts that went wrong, because those are the parts worth reading.

Why a poop collecting game

The premise arrived as a joke and refused to leave: what if the pet and the food were the same thing? You raise a poop, you feed it, it produces a poop, and that poop becomes feed for the next one. The loop closes on itself. Once that clicked, the 46 species and 79 recipes more or less designed themselves — every animal is a joke you already know the punchline to.

The tone had to stay gentle. A game about excrement can go two ways, and the crude version is the boring one. The art is round, pastel and slightly sleepy; the descriptions are affectionate. Nobody is being gross at you.

One file, no engine

The entire game is a single index.html: markup, styles and logic in one document, with PNG sprites beside it. No build step, no framework, no bundler. That decision paid for itself repeatedly. It loads in under a second on a phone, it works offline once cached, it can be dropped onto itch.io as a zip without changing a line, and there is exactly one place to look when something breaks.

Saves go to localStorage. No account, no server, no cloud sync. The trade-off is real and worth stating plainly: clear your browser data and your collection is gone, and progress does not follow you to another device. In exchange, nobody collects anything about you, and the game costs nothing to run.

Balancing with a simulation, not a hunch

The economy was not tuned by feel. A script plays thirty simulated days — feeding, waiting, selling duplicates, unlocking pens — and reports where an ordinary player lands. Current numbers: roughly 32 of 46 species collected by day thirty, with the first Legendary on day seven or eight in every run.

Two rules came directly out of that simulation:

Sound with no sound files

Every effect — feeding, pooping, coins, the little fanfare for a new species — is synthesised at runtime with the Web Audio API. There are no audio assets in the project at all. A few oscillators and gain envelopes cover the whole game, which keeps the download small and sidesteps sample licensing entirely. Browsers refuse to make noise before the first user gesture, so the audio context opens lazily on the first tap, and the whole thing is behind a mute button that remembers your choice.

The bug that hid the tutorial

The tutorial has six steps. Step three — find three species — had no caller anywhere in the codebase. Nothing ever advanced past it, which meant steps four, five and six were unreachable, and the sixty coins the interface promised for each step were never actually paid. It survived weeks of manual testing because the person testing already knew how to play and never looked at the tutorial panel.

It was caught by a headless test suite that plays the game with a fake DOM and asserts on the resulting state, rather than by a human clicking around. There are now sixteen such suites and roughly 480 assertions covering saves, the English translation, layout at small screen sizes, quest logic, and the economy. The lesson was not "write more tests" so much as "test the paths you personally never walk".

The art, and what the AI actually did

The 46 character sprites and the four backdrops were generated with Google Gemini against a fixed style reference, then hand-picked, background-cleaned and colour-corrected. Most prompts produced nothing usable; the keep rate was low enough that the selection work took longer than the generation. The code was written with heavy assistance from Claude.

What is not AI: the design. The 79 recipes, the grade curve, the pity and consolation rules, the pacing targets and the economy were planned by hand and verified with the simulation described above. Saying so plainly seems better than letting people find out and feel misled — the same disclosure appears on the itch.io page.

What is next

Feedback goes straight into this list. If you played it and something annoyed you, that is the useful kind of message.