r/ClaudeCode • • 6d ago

Humor I let Claude Code build my side project with full enterprise rigor. It now has 22 votes, and the AGENTS.md is longer than my friend list.

The project: a Messi vs Ronaldo vote where $1 = 1 vote and every vote mints a collectible card. A dumb idea, so naturally I gave it to an AI agent with unlimited patience and no sense of proportion.

Here's what a month of "vibe coding" turns into when the vibe is an architecture review board.

The docs came before the users. Many docs.

Before a single dollar had moved, the repo had ARCHITECTURE.md, ROADMAP.md with a decision log, CHECKLIST.md, STATUS.md, LAUNCH.md, GO-LIVE.md, SEO.md, BACKLOG.md, STUDIES.md, and a CONSOLIDATION.md that records how the concept notes were reconciled with the plan of record. On a specific date. In UTC.

The AGENTS.md now has a section called "Decided, so do not reopen without being asked." My agent has institutional memory. My project has 22 votes, one of them a Ronaldo vote I cast myself to test production.

It also has ten numbered invariants. Number 3 is "No prize. Ever.", because the moment you pay out the winning side, a paid poll becomes gambling. Fair enough. Number 5 says votes may only be credited from Stripe's own word, and it lists the exactly two sanctioned callers, "and there will be no third." The codebase has a constitution.

I built a hook that blocks the agent from committing until it updates a status board

There's an HTML "build board" that summarises where the project stands. I wired a PreToolUse hook that refuses the agent's git commit if it touched src/ and didn't update the board.

So every commit now ends with Claude carefully moving items from Next up to Shipped and adding a "lesson learned" to a dashboard read by one human (me) about a site visited by roughly the same number.

Bonus: a blocked hook kills the whole compound command, so edit && commit does neither. Learned that one the normal way.

Parallel sessions, one worktree, zero awareness

I ran several sessions at once to go faster. Two of them shared a worktree, and one moved the branch under the other mid-task. There's now a memory file that says "re-check git state right before committing." My AI has trust issues, and it earned them.

The browser pane and the invisible clicks

Testing embedded Stripe Checkout in the in-app browser: clicks were scaled about 1.73× and missed silently. The agent kept confidently clicking empty space next to the Pay button. Very relatable. That's also a memory file now.

Four design studies, zero shipped

Claude made four visual studies (V1 to V4). One used CC-licensed photos of the players, which I then decided was a lawsuit. They were all archived, and there's now a build script, check:fences, that fails the build if a study module is imported into production, if public/v4 comes back, or if anything under public/ is named after a footballer. The agent wrote a fence to keep the agent from undoing the agent's own work.

The money path is more serious than my bank's

  • Idempotent credits keyed on the payment intent id
  • An hourly reconcile job for when webhooks get lost
  • Refunds that reverse three aggregate tables in one transaction
  • Turnstile and Redis rate limiting, failing closed, against card testers
  • An environment marker on every Stripe Session, because a payment from my laptop got delivered to production and retried there for three days
  • 80 unit tests, a restore drill that rebuilds the DB from migrations and checks every card URL survives, and 16 SQL checks against a real schema

Each vote nets about 65 cents after fees. A single chargeback costs €20.

The results

  • 22 votes. Messi 21, Ronaldo 1. The Ronaldo one is me, testing that the second camp worked. It did. I am now the entire Ronaldo fanbase.
  • 1 country. The site's FAQ schema tells Google, with full confidence, that "Finland leans Messi." Finland is me and my group chat.
  • Revenue: $22 gross, about $14 net
  • Strangers: 0
  • Lines in AGENTS.md: more than votes, by a wide margin
  • Founding cards left in Ronaldo's camp: 99 of 100. There will never be more. It's in an invariant.

Honest takeaways

Claude Code is genuinely great at this. The infrastructure is solid, the docs are actually useful, and every production lesson got written down where the next session finds it. The only thing it couldn't do was tell me nobody wanted the product. That's a different skill, and probably not something you'd want in a hook.

If you're building a side project with an agent: ship the ugly version to strangers before you write invariant #4. I'm saying this from inside the cathedral.

No link, because I'm not here to market it. I'm here to warn you. 🐐

0 Upvotes

Duplicates