A daily "guess the historical figure" game. A world map marks where a famous person was born (β ) and where they died (β), with their exact birth and death dates. Name who it is.
Three figures a day, with a scoring ladder per figure:
| When you get it | Points |
|---|---|
| First try, from the map + dates alone | 100 |
| After one free hint | 50 |
| From four multiple-choice options (after a second hint) | 10 |
| Not at all | 0 |
Each wrong guess automatically reveals the next hint (category β occupation β country). After the third figure you get your total score out of 300, and a countdown to the next day's three. Progress is saved, so the day resumes where you left off.
npm install
npm run dev # http://localhost:5173npm run build # type-check + production build to dist/
npm run preview # serve the production build
npm run verify # data/logic tests + full render smoke test
npm run data # rebuild the dataset from Wikidata (see below)- The day's three figures are chosen deterministically from the date, so everyone gets the same puzzle; no repeats within a day.
- Guess with an autocomplete name box (ranked most-famous-first); the final stage offers four multiple-choice options β same category, closest era.
- The dataset is trimmed to the top 200 most famous figures (household
names), with real birth/death coordinates and dates.
TOP_Ninscripts/prep-people.mjscontrols the size.
src/lib/game.tsβ the game rules: daily selection, the pure scoring reducer (applyGuess/applyPick), option builder, date helpers, constants.src/lib/people.tsβ dataset access, search, clues.src/lib/storage.tsβ daily progress persistence (localStorage).src/components/βRound(the per-figure stage machine),WorldMap,GuessInput,Options,Clues,Summary.
A global "most famous humans" query times out, so the pipeline scopes by occupation (small sets) and takes the top figures by fame within each:
| Script | Role |
|---|---|
scripts/fetch-people.mjs |
Top figures across ~35 occupations, with birth/death coords + dates. |
scripts/fetch-people-extra.mjs |
Big/late occupations needing a higher fame threshold (politician, statesperson, naturalist). |
scripts/fetch-people-must.mjs |
Guarantees curated iconic figures by QID. |
scripts/fetch-dates.mjs |
Adds each date's precision so exact dates are honest (no fake "1 January" for year-only records). |
scripts/fetch-occupations.mjs |
Adds real P106 occupations, used to categorize each figure (clue #1). |
scripts/prep-people.mjs |
Formats dates to their precision, projects each point onto the map with d3-geo, emits src/data/people.json + src/data/world.json. |
Points are pre-projected to pixel coordinates in the map's viewBox, so the runtime ships no projection library β it just plots x/y on the map path.
Dates render at their true precision: day (
14 March 1879), month, or year (550 BC). A few otherwise-iconic figures can't be included when Wikidata has no coordinates for their birth/death places (e.g. Frida Kahlo).
Fully static β npm run build and host dist/ anywhere. This repo also
auto-deploys to GitHub Pages on every push to main
(.github/workflows/deploy.yml).