Gacha Keep — the dev story

Where this came from

Blind boxes are everywhere. People line up for a sealed capsule with a toy inside they didn't pick, and the not-picking is the whole thrill.

Tower defense has run the opposite way for twenty years. You know your towers. You pick your towers. The waves are the only surprise.

So I flipped it. In Gacha Keep the enemies are the known quantity — the wave card tells you exactly what's coming — and your own defenders are the gamble. Feed coins into a capsule machine, place whatever pops out. The strategy isn't "build the right tower." It's "make the best of the toy you got." That's the whole game, and it fit in one sentence, which is how I knew it was worth building. And you can't play it without catching an old-school vibe — which is on purpose. Plants vs. Zombies is my favorite tower defense of all time, and its fingerprints are all over this. So are the roguelikes I've sunk the most hours into — The Binding of Isaac, Brotato: the blind pull, the run that never plays out the same way twice, the build you improvise from whatever the machine hands you. Wave offerings, challenges and prizes. Power-ups. Seemingly random events that can either help or hurt you. Unlockable content. All the things that to me, rack up those Steam hours. Also, the narrative voice. I like funny games. I think I'm funny. Claude thinks I'm funny. Hopefully, the judges will too.

Full disclosure, because it explains the whole thing: lately, one of those people in line for blind boxes/gashapon treasures is me. There are more tiny little figures and beans on my shelf than a grown adult can really justify, and the honest reason is the exact one the game runs on — I don't want to choose the toy. I want the machine to choose, and I want to be a little at its mercy. Gacha Keep is half design and half a way to feed that habit without giving up more shelf space.

What it turned into

A dead-cute little shop under siege. You run a vinyl-toy store; monsters raid it in waves — discontinued overstock, and bitter about it. Your inventory fights back.

The storekeeper narrates all of it with the weary charm of someone whose entire retail career has gone exactly like this. The manual is an Employee Manual. Healing costs money, because nobody here has health insurance. The enemy's healer is a union medic with excellent benefits. Chase a thief off empty-handed and he'll insist the shelves were badly organized.

Lose a run, and clearance tags rain down on you. Win and you get a Manager of the Year sign. There's an achievement for reading the manual. Nobody's ever claimed it. The store knows.

How it got built

One HTML file, no engine, no build step — it has to run from a double-click. The art is generated on a local ComfyUI server on a locked formula and every creature is a single static sprite with fully procedural motion, because AI art can't stay consistent across animation frames and I wasn't going to pretend otherwise. The background was a commissioned illustration specially created for this entry.

Under the cuteness is a robust testing framework I'm honestly prouder of than some shipped products: hundreds of simulated runs per change, twenty-three invariants, probability validation on two hundred thousand samples, and a five-pass audit that checks the submission zip itself before it goes anywhere. When a playtester said the enemy healer showed up too often, I didn't tune by feel — I measured twelve thousand composed waves, found a third of them carrying three-plus healers and the worst carrying twelve, and capped it with numbers I could defend.

What playtesting did

Everything. The touch controls went through four designs in two days because every single tester — and eventually my own thumb — kept trying the same gestures the game didn't have. Final form: tap does whatever a hero is sparkling for, hold is window shopping, drag picks them up. A pity system went in the day a tester ran an entire game without drawing a single ranged hero, because a blind box that can brick you isn't fun — ask anyone who collects the real ones.

Working with AI — my honest take

I was the development manager, architect, QA lead and the senior engineer. The AI was the fastest, most eager, probably-smarter-than-me engineer I've ever worked with — and still a junior. It writes clean code faster than I can read it, and it will build the wrong thing, beautifully, unless someone in the room knows better.

I couldn't have made this without it — not in this timeframe, and not the art; I'm a software engineer, not an illustrator, so without AI, Gacha Keep would be blobs and bits. There is also zero possible chance I could have executed this project the way that I did without extensive professional experience across a wide variety of disciplines. Having the vocabulary to speak with the AI made it possible for me to cover a lot of bases easily, and I was able to read immediately in its code preview when something wouldn't have worked / did not follow my instructions. This allowed me to interrupt the AI repeatedly when it started to go off on it's own tangent; I'm sure this saved me an immense amount of tokens. As it is, the sheer technical complexity of this (side note: simple gameplay / random wave dynamics, etc, all run off very complex algorithms, and math has never been a particularly great skill of mine) had me maxing out my session and Claude Fable hours almost every day. I got irritated once, and allowed Claude to eat into my pre-paid buffer. THAT escalated quickly — hit my limit ($25, thankfully) before it finished processing my query. Lesson learned.

So, yes. I could not have made this without Claude, and I am sure I lost some time just learning how to best work with an AI agent in the beginning, since I used every available hour to get this right down to about 19 hours to the deadline. That said, Claude couldn't have made this without me either. Also, Claude's sense of humor is dubious at best. I mean... I let him have a few lines, but he was way more effective as a proofreader / rephrasing the joke to fit the displayable space rather than providing the punch lines himself.

People in my industry worry a lot that AI is going to take away our careers and roles. I think of it more as an evolution. The knowledge that I have accumulated from my long career and personal experiences makes me a good AI manager. I'm no young chicken, and my path to professional engineering was rather unconventional. This project has made feel a lot more confident about my future value in the technology field.

Two things I re-learned the hard way:

Knowing what to refuse. The AI can build anything, which means somebody has to know what shouldn't be built. Every feature I killed — and I killed plenty, one of them the same day it shipped — I killed on instincts that took decades to earn. Speed makes bad ideas cheaper to build. It doesn't make them good.

Knowing when "it passes" isn't "it works." I watched green test results survive four rounds of a bug that failed every single time under my actual thumb. It got fixed when I stopped accepting reports and pointed at the exact pixels. You only learn that move by shipping things that passed and failed anyway.

What's next

Gacha Keep was built to grow — more heroes, more enemies, and the part I'm most into: sets. Seasonal collections. Special releases. Secret drops. It leans all the way into blind-box culture — the chase, the FOMO, the one you're missing. New art and new scenes. And I have so many ideas for new mechanics and surprises — this well will NOT run dry. Just gotta keep going until I find the secret.

Share this project:

Updates