I Built a Daily Sports Card Game in a Month With AI Agents. Here's Everything It Broke.
I'm not an engineer. I come from the sales world. But between June 18 and July 16, I pushed 172 commits to a side project called statback. Most of those commits list an AI coding agent as co-author. 155 of them carry a "Co-Authored-By: Claude Opus 4.8" line. So this isn't a story about me learning

Posted on Nov 4 • Originally published at Medium
I'm not an engineer. I come from the sales world. But between June 18 and July 16, I pushed 172 commits to a side project called statback.
Most of those commits list an AI coding agent as co-author. 155 of them carry a "Co-Authored-By: Claude Opus 4.8" line. So this isn't a story about me learning to code. It's about what happens when you ship fast with an agent, and the bugs that show up when you do.
Statback is a daily sports trivia game. Every day you get a binder page of nine card backs: a 3x3 grid. The name is redacted. So are the birthplace and, at first, the team. You get the stat lines. Your job is to name the player.
Everyone gets the same board. Wordle and Immaculate Grid were the model. The product doc says so. There's no timer. You get three tries per card. Hints are there if you need them, but they cost you points.
It started with baseball. By the end of day one it had MLB, NBA, and NFL. Every card you name goes into your binder. There are rookie cards, foil parallels, serial numbers, and print runs. A Gold parallel really is limited to 10 per drop.
The stack: Next.js, Supabase, Vercel, PostHog, Resend for email, and web push.
The first day's commits read like a roadmap. Build the game. Vintage clubhouse UI. A binder that swings open. Pull lineups from the MLB Stats API. Monthly leaderboard. Magic-link accounts. Google sign-in. NBA. NFL. Holo card finishes. Real jersey numbers.
That's one day of commit history. With an agent that's possible. It's also how you end up with a long list of fixes.
Hints were the hardest part. I rebuilt them over and over.
On June 19, a commit said "Make every hint factually valid (no unverified accolades)." On June 20, I swapped out hints that just repeated the stats for new trivia generated by Claude. That covered 888 of the 930 players in the pool. Later that day one hint had a stray {"placeholder":false} stuck to the front of it. It was an AI output artifact that got into the live text.
On June 21 I threw the hints out again and rebuilt them from Wikipedia and Wikidata. 914 of the 930 players got grounded clues.
On July 16, the last commit in the repo was still about hints. Once the team column showed on every card, the scouting-report hints were naming the player's own team on 60% of entries. The hint said exactly what the card already showed.
Takeaway: an AI will produce content fast. It won't check that content against what's already on screen. You have to do that.
I changed the daily difficulty mix at least five times.
First a 3/4/2 split (easy/medium/hard) with a guaranteed "white whale." Then 2/4/3. Then a recalibration that re-rolled the board people were already playing that day. I reverted it. Then I added a fix that pins each daily lineup the first time it's served, so live and past boards can't change. Then I re-applied the recalibration. Then a 1/3/3/2 spread.
On July 3, the analytics said I'd gone too far. Per the commit, PostHog showed average hints per board jumped from about 4 to about 12. Perfect 9/9 boards dropped from about 41% to about 20%. So I dialed it back to a mostly modern 2/2/4/1 spread.
Takeaway: ship the analytics before you tune. That's the only reason I knew I'd overshot.
Here's a commit message from June 24: "CRITICAL: stop the store-wipe bug."
The problem: a failed database read was treated as an empty store. Then a fallback write could overwrite the whole database with empty defaults. The commit calls that the root cause of a data wipe.
Within the next 40 minutes, three more commits went in. A guard that blocks any write that would cut the core data in half. Hourly snapshots of the store in a 48-slot ring. And a plan to move off one big JSON document onto real tables.
Two days later, a performance commit named the same root cause for slow gameplay. Everything lived in a single ~1MB JSON doc. Every write competed for one row.
Takeaway: the agent will happily build you a shortcut architecture. It works until real people use it. Ask early how your data is stored and what happens when a read fails.
On June 27: "Fix phone overheating from foil shimmer." The shiny animation on rare cards was looping a CSS variable that forced constant full repaints. It looked great and it cooked phones.
Same day, I fixed cards flipping backwards when you opened them. Twice. The first fix wasn't enough.
Sharing is how a daily game spreads, so I kept changing it. On June 20 alone: share a link that unfurls an image of the stat line. Share each card as its own link. Then switch to plain text plus a link, because, per the commit, recipients preferred readable text over an image.
The next day I learned that X and iMessage cache link previews for days. So share URLs got a version number to force a refresh.
Later, every share link started carrying a referral code. Both people get a "Scout" foil card when a friend joins.
The pace is real. Three sports, accounts, leaderboards, collecting, email reminders, an admin panel, and referrals, all in about a month.
But speed creates its own cleanup. A lot of my commit history is fixing what I built. Hints, difficulty, data safety, performance, sharing. None of those fixes are fancy. They come from watching the product and the numbers, then telling the agent exactly what's wrong.
In the end I shut statback down. Maintaining it was a headache, and it was a side project. Every fix opened up another one.
But it taught me a lot. How to work with an agent. What breaks when real people show up. What to check before I trust what it built.
It's the reason I'm where I am now, building a real project: a consumer mobile app. Statback was the practice run.
— Sam Brovda. I come from the sales world and build software on the side with AI coding agents.