Stoop
← All posts

The second game is always easier. Building FlagGuessr in a day.

When the scaffold exists, the hard part shifts from "how do I build this" to "what exactly am I building."

DailyGuessr took weeks. FlagGuessr took a day. That gap is the most useful thing I can tell you about building with AI.

The reason isn't that FlagGuessr is simpler. It's that by the time I started it, I already had answers to all the slow questions: How do I connect a database? How does deployment work? What does a Next.js project structure look like? Where do environment variables go?

DailyGuessr answered all of those. FlagGuessr just needed the game.

What actually changed

The core of FlagGuessr is a zoomed image and an autocomplete input. That's it. You see a flag at 4× zoom — only a quarter of it visible. You type a country name, select from a dropdown, hit Guess. If you're wrong, the zoom decreases. Five guesses, same puzzle for everyone, every day.

The database structure was already there from DailyGuessr — same Supabase project, new table. The deployment pipeline was identical — Vercel, same settings, new repo. The design system was already defined — paper palette, Newsreader, Caprasimo, the dashed border aesthetic.

The only genuinely new problem was the autocomplete. DailyGuessr uses a map click — there's no text input at all. FlagGuessr needed a searchable country list that was fuzzy, forgiving of typos, and couldn't be gamed by typing partial strings to fish for answers.

The autocomplete problem

This was the one moment in FlagGuessr's build where I had to think carefully rather than just execute.

The naive version — a simple filtered against an array of country names — had an obvious exploit: type "land" and you'd see Finland, Iceland, Ireland, New Zealand, Poland, Swaziland. Too many hints.

The solution was to only show options after a minimum of 2 characters and to limit the dropdown to 8 results max, sorted by how early in the name the match appears. Close enough to be usable, not so open it becomes a hint engine.

Claude wrote the component. I described the problem. First version had the exploit. I explained why. Second version didn't. That back-and-forth took about 20 minutes.

Launched the same day

DailyGuessr went live on May 19th. FlagGuessr went live on May 19th. Both in the same deployment window.

Looking back, this feels slightly insane. Two games, one day, neither existed a few weeks earlier. But at the time it felt natural — I had momentum, I had the tools, and the second game genuinely was faster.

The pattern held for everything after. CocktailGuessr used FlagGuessr's zoom mechanic almost verbatim, just applied to cocktail photos instead of flags, with a hint system layered on top. Each game inherited from the one before it.

What "Layout B" is

Somewhere during FlagGuessr I started calling the sidebar layout "Layout B." DailyGuessr had a different structure — the map takes up most of the screen, Street View is immersive. FlagGuessr needed a sidebar: stats, how to play, scoring table, cross-promo.

That sidebar pattern — sticky on desktop, collapsed on mobile, four fixed sections in the same order — became the template for every subsequent game. FlagGuessr defined it. CocktailGuessr, Palette, Bloom, Sortl all use it.

One good decision made early compounds across everything built after it.