One person deciding, a fleet of agents building: how LADDER got made
by Baran · August 2026 · ladder@yazfab.com
LADDER is a roguelike deckbuilder set in a tech company in 2026. You play an Engineer, an Engineering Manager, a Product Manager, or the CEO, and you climb the ladder through card combat. AI-leveraged cards are faster than the normal ones and they put Tech Debt into your deck. Some enemies have hit points. Scope Creep and the Skip-Level don't; you resolve them by meeting a condition mid-fight that has nothing to do with damage. It's out on iOS and Android.
I made every decision in it and typed none of the code. Claude wrote the code and the tickets. Codex built a few arcs in parallel. This was a side project. Here's how the work was actually divided, with the numbers from the repo.

The numbers
| First commit | April 18, 2026 |
| iOS launch | August 12, 2026 (116 days later) |
| Google Play launch | August 25, 2026 |
| Commits | 5,539 |
| Merged pull requests | about 1,790 |
| Branches created | 837 (one worktree per ticket) |
| Agents running in parallel at peak | 36 |
| TypeScript | 575,000 lines |
| Tests | about 10,800 |
| Content files (cards, enemies, events, relics) | 1,613 JSON files |
| Design docs | 641 markdown files: 149 specs, 14 ADRs, 20 retros |
| Generated images | 1,023 |
| Generated audio | 19 tracks and effects |
| Tickets | over 1,900 |
The single most-edited file in the repository is the balance simulator.
What I did
Strategy and design. Every mechanic, every character, every pricing call, every "no". Specifically:
The game. Four characters that are four different games on one card engine. The Engineer levels up and fights with damage. The EM balances AI Literacy against Politics. The PM races a roadmap clock against stakeholder trust. The CEO starts at the top, plays a five-year treadmill, and gets graded by the cap table at the end: IPO, acquisition, survive, or out. The idea that some enemies have no hit points and can only be resolved came from wanting the theme to change the rules, not the card art. AI-leveraged cards adding Tech Debt is the same idea.


The architecture. The rules engine is pure TypeScript with no React Native imports, so the same code that runs in the app runs headless in Node for simulation. All game content is JSON; a new character is a config file and a few new rule types, never an engine rewrite. The app is local-first: no account to play, saves on the device. The only server is a pair of Cloudflare Workers, one for the in-game AI companion and one for push. I wrote these rules down in the repo's CLAUDE.md files and in 14 ADRs, and the agents built inside them.
The pivots. The in-game companion, Bit, started on-device (Apple's Foundation Models on iOS, a small Qwen model on Android) and moved to cloud-only in July, because the on-device answers were not good enough to be worth the app size and the two code paths. Android's on-device model was dropped first, then iOS followed. Bit now runs on Groq: gpt-oss-20b for quick answers, gpt-oss-120b for the expensive tier. The pricing model went through a full Monte Carlo pass before landing on a free Engineer start, one-time character unlocks, and a bundle; no ads, no gacha, no energy timers.
The taste calls. Which of five drafted card batches ships. Whether a joke lands. Which portrait to keep. The World Bible has 33 named cast members and a rule that each cohort has one Turkish anchor character. There is a test that fails the build if any player-facing string contains an em-dash, because it reads as machine-written. That rule is mine.
What the agents did
Everything with a checkable definition of done, which turned out to be most of the work.
The loop: I brainstorm with Claude until a design is settled, it writes the spec, and it files the tickets into Linear. From there, three automated systems take over.
The ticket factory runs on a cron every hour. Each wave picks up five tickets, works each one in its own git worktree, runs the right gate for the ticket's category (the balance simulator for balance tickets, browser smoke tests for UX, content validation for content), and opens a pull request. It also rotates through three discovery sources, simulation outliers, smoke-test anomalies, and content audits, and files up to five new tickets per wave. It never merges. Every PR waits for me.
The device playtest runs on its own cron, offset from the factory. It installs the current Android build on a real phone and plays it over ADB, reading the screen with vision and tapping by coordinates. It rotates through all four characters across every level, plus ten feature sweeps (settings, the companion drawer, the paywall, the shop, quests), at three depths from a single sprint to a full run. It files what it finds as tickets, stamped with the build it tested.
The sim audit runs daily. It plays a hundred runs per character per level with greedy and random policies and thirty with a small tree search, then runs five detectors over the results: cards nobody ever plays, stuck states, difficulty cliffs, status effects that change nothing, and candidate improvements. A finding only becomes a ticket if it reproduces on a fresh set of seeds and no open ticket already covers it.
Those tickets go back into the same backlog the factory consumes.

Over the project the models changed under it: Opus 4.7, then 4.8, then Fable 5 and Opus 5, with Sonnet for small mechanical work. Codex took whole arcs on its own branches: the desktop and Steam shell, landscape mode, the social content tooling, the link hub, and the cinematic trailer pipeline.
I reviewed and merged all of it. About 1,790 times.
Art and sound
Every illustration and every sound in the game is generated, and the game says so; it's about working beside these tools.
Images go through fal.ai: recraft-v3 as the primary model, flux-pro for character portraits where bust-crop detail matters. Sound effects come from ElevenLabs' sound-effects model, music from Stable Audio 2.5, with Lyria 2 auditioned against it. The trailer's video shots were generated with Kling, Seedance, and Pixverse, also through fal.ai. A generation script per asset type, a ledger of what was generated, and a promote step that moves the picks I approve from a raw folder into the repo. 1,023 images and 19 audio files in the shipped game, for roughly $150 in generation credits.


The stack
Expo 54 on React Native 0.81, Expo Router, Reanimated 4, zustand, zod. RevenueCat for purchases, PostHog for analytics, Firebase App Check for attestation. Two Cloudflare Workers with Durable Objects for the companion proxy and push. Bun runs everything: tests, the simulator, content validation. Playwright drives the browser playtests in CI. The in-game companion talks to Groq.
What it cost
| Claude Max (20x tier) | $200/month for the whole project, about four and a half months |
| ChatGPT Pro | 2 months, then Plus |
| Asset generation (fal.ai, ElevenLabs, Stable Audio) | about $150 |
| Apple developer account | $99 |
| Google Play developer account | $25 |
| Cloudflare, Groq, EAS, domain and hosting | about $200 |
Where it is
LADDER is on the App Store and Google Play. A desktop build is in progress. If you want to know how any of the above works in detail, ask; the specs are all in the repo and I'll answer the specific questions.
Claude drafted this post from the commit history and my notes. I edited it.
LADDER is not affiliated with or endorsed by Anthropic, OpenAI, or any AI vendor named or parodied within it.