I Built a Geography Trivia Game Into My Personal Site
April 5, 2026 ยท 3 min readI made it far in the geography bee. Elementary school, middle school โ world trivia was always my jam.
On planes, I'm the person ignoring the movie and playing the trivia game on the seatback screen. On Jeopardy, geography is where I mentally buzz in before the contestant finishes reading.
So when I was looking for the next thing to build on this site, a geography trivia game was an obvious choice.
What it is
GeoGame is a 30-second trivia sprint. US state capitals, world capitals, and continents โ 176 countries in the question bank. +1 for correct, โ1 for wrong. When time runs out, you see your score against the running average of everyone who's played.
Simple premise. Surprisingly hard to put down.
Why I built it this way
The game needed a database โ scores had to persist somewhere, and the end screen comparison only means something if it's pulling from real data. I used Vercel Postgres (Neon under the hood) for the storage layer, which fit cleanly into the existing stack.
The schema is intentionally minimal: one table, one row per game played.
CREATE TABLE scores (
id SERIAL PRIMARY KEY,
score INTEGER NOT NULL,
played_at TIMESTAMP DEFAULT NOW()
);
Two API routes handle everything. A POST writes the score when the timer expires. A GET returns the average across all games. No auth, no user accounts โ anonymous by design. The friction of signing in would kill the impulse to play.
What I focused on
The technical infrastructure was straightforward. What took more thought was the game feel โ the decisions that determine whether it's actually fun to play.
A few decisions that mattered:
- Timer at 30 seconds. Long enough to get into a rhythm, short enough to stay urgent.
- Score penalty for wrong answers. โ1 creates real stakes. Without it, the optimal strategy is just to guess fast.
- 800ms delay on wrong answers. You see the correct answer highlighted before the next question loads. Informative without being punishing.
- Question mix across three categories. Rotating between state capitals, world capitals, and continents keeps it from feeling repetitive.
The question bank started at ~100 countries. I expanded it to 176 โ essentially full global coverage โ because getting asked the same capital twice in a 30-second run breaks the illusion.
Try it
My personal best is 11. Let me know if you beat it.