← All Writing
February 19, 20268 min read

How I Built Numerator Using Claude

A non-developer builds a full-stack web game from concept to deployment in four sessions

YieldOne live multiplayer web game at joseandgoose.com/numerator
DifficultyIntermediate (first time setting up a database and API routes)
Total Cook Time~8–10 hours across 4 sessions over 2 days

Ingredients

The Idea: A Game Nobody Could Google

There’s a classic game theory puzzle that goes like this: a large group of people each pick a number between 0 and 100. The winner is whoever guesses closest to 50% of the group’s average. The catch: if everyone thinks the answer is 50, the optimal guess is 25. If everyone thinks it’s 25, the optimal guess is 12. The right answer is always moving — it depends on what you think everyone else is thinking.

I’d read about this puzzle and wanted to play it for real, with real players, where the correct answer shifts every time someone new guesses. No app existed for this. It was a logic exercise that lived in economics textbooks but never became a game you could share with a link.

So I built it.

Session 1: Game Design and Prototype

Evening, Day 1 — ~3 hours

Pace: Deliberate. Lots of back-and-forth on game logic, then fast execution.

Before writing any code, Claude asked seven clarifying questions to lock down exactly how the game should work — rules, edge cases, how streaks are counted, what happens when the cycle resets. Ten minutes of conversation caught a critical typo in the spec and saved hours of rework later.

🔧 Developer section: Spec clarifications

With the rules confirmed, Claude generated a fully playable game from the description alone — animations, five distinct outcomes depending on how close your guess is, and a shareable result card. Everything ran in the browser immediately, no database connected yet.

🔧 Developer section: Prototype features

Then came the tuning. Over five rounds of feedback I adjusted colors (swapped orange to the site's signature #F3D104 in Claude), rewrote outcome messages, improved text readability against the dark background, and fixed a bug where the correct answer wasn't recalculating between rounds.

AI tip

Spend the time getting the spec right before any code gets written. Claude asked seven clarifying questions — one caught a typo (30% vs 50%) that would have broken the entire game. A 10-minute conversation saved hours of rework.

Session 2: Database and Deployment

Late Night, Day 1 — ~3 hours

Pace: Moderate. Database setup was new territory, but deployment was one click.

The prototype was single-session — close the tab and the data reset. Making guesses persist across all visitors required a real database. Claude recommended Supabase (a free, hosted database service) and generated the entire setup as a single block of code to paste and run in Supabase’s web dashboard.

🔧 Developer section: Supabase database setup

With the database ready, Claude generated the files that connect the game to it and packaged everything for deployment. Three steps in the terminal later — install dependencies, push to GitHub, click deploy on Vercel — the game was live at its own URL in under a minute.

🔧 Developer section: Next.js integration and Vercel deployment

Terminal — zsh
user@MacBook-Air numerator % git push -u origin main
Enumerating objects: 15, done.
Writing objects: 100% (15/15), done.

To https://github.com/joseandgoose/numerator.git
* [new branch] main → main

One push to GitHubVercel auto-deployed → game live in under a minute.

AI tip

Supabase's SQL Editor is your best friend. Claude generated the entire schema, security policies, and server functions as one SQL block. Paste, run, done — no database configuration UI to learn.

Session 3: Integrating into JoseAndGoose.com

Day 2 — ~2–3 hours

Pace: Bumpy. A hidden Git issue turned a simple copy into a debugging puzzle.

Moving the game into joseandgoose.com should have been a simple file copy — same framework, same hosting platform. What looked straightforward hit a hidden issue where Git (the version control system) was tracking the game folder as a reference to another project rather than actual files, making the page invisible to Vercel after deployment.

🔧 Developer section: Integration steps

Pushed to GitHub, Vercel deployed — and the page returned a 404. The build log showed every route except /numerator, plus a warning: "Failed to fetch git submodules."

Terminal — The Fix
user@MacBook-Air joseandgoose-site-main % git rm --cached app/numerator
rm 'app/numerator'

user@MacBook-Air joseandgoose-site-main % git add app/numerator/page.tsx

user@MacBook-Air joseandgoose-site-main % git push
b46fb38..ddd853b
main → main

Removed the submodule ghost, re-added the actual file, pushed — Vercel built /numerator this time.

AI tip

If Vercel says "Failed to fetch git submodules" and your page 404s even though the files are in VS Code — run git ls-files on the folder in Terminal. If it returns a directory name instead of file paths, you have a submodule ghost. Fix it with git rm --cached then git add the actual files.

Session 4: Navigation and Mobile

Day 2 — ~2 hours

Pace: Fast design iteration, then a surprise dev environment bug at the finish line.

Once the game was live at its URL, the next problem was discoverability — no link to it existed anywhere on the site. Adding a nav button also revealed that the site navigation was duplicated across seven separate page files, which meant a quick button addition would become a maintenance problem without a bigger fix.

🔧 Developer section: Navigation button and mockup iteration

Rather than duplicate the button across all seven page files, Claude converted the navigation into a shared component — one file that renders on every page automatically, and which also added a mobile hamburger menu the site had never had before.

🔧 Developer section: Shared Nav component

The last surprise was a dev environment bug. Running npm run dev in Terminal flooded the screen with infinite "Can't resolve tailwindcss" errors:

Terminal — zsh
user@MacBook-Air joseandgoose-site-main % rm -rf node_modules .next && npm install
added 369 packages, and audited 370 packages in 23s

user@MacBook-Air joseandgoose-site-main % npm run dev
> next dev
▲ Next.js 16.1.6 (Turbopack)
- Local: http://localhost:3000
✓ Ready in 992ms

Clean install fixed the tailwind lockfile conflict — no more infinite error loops.

AI tip

If your Next.js dev server floods errors about missing packages, check the startup warning for "multiple lockfiles detected." A stale package-lock.json in a parent directory can hijack your entire workspace in Terminal. Delete it and run a clean npm install.

Final Output

A live multiplayer game theory puzzle at joseandgoose.com/numerator with a PostgreSQL database storing every guess across all visitors, a 300-guess cycle that resets the running average, five distinct outcome paths, a legendary win screen for 3 perfect matches in a row, a canvas-rendered shareable result card, responsive mobile navigation with a hamburger menu, and auto-deployment from GitHub — built in about 8–10 hours by someone with no prior backend development experience, guided entirely by Claude.

What went fast

What needed patience

The biggest lesson? Building a game isn't one skill — it's a dozen small ones stacked vertically. Game design. Database architecture. API routes. Git debugging. CSS responsive design. Claude handled the code. I handled the decisions. And the correct answer is still 50% of whatever everyone else is thinking.

← Back to all writing