Skip to content

Geography Game — Hinata Studio Learning Tab

  owner: shikamaru + trunks
  first_touched: 2026-05-26
  last_touched: 2026-05-26

Geography App Build

source: documentation/activities/geography-app.md

Spawned from a missed inbox signal: 3 Telegram photos (2026-05-26 00:17:37) showing Worldle.teuteuf.fr's 3 game modes. Captured via process-inbox-silent-drops doctrine fix.

Architecture decisions

  • Separate application: Sandpit/hinata/applications/shikamaru-geography/ with context.md, data/, scripts/. Studio consumes static data from public/data/geography/

  • Africa scope for v1 — 59 countries via REST Countries /region/africa. UN scope (~195) deferred

  • Real country shapes — Natural Earth 110m TopoJSON via world-atlas (107KB file, CC0), rendered with d3-geo Mercator projection

  • Hard constraint: zero runtime fetches to AI / Worker / webhook. All static, baked into Pages bundle

  • Persistence: localStorage per-mode stats for v1. No jimmy-vps sync until app proves itself

  • Mastery integration: geography added to KNOWN_CATEGORIES; ELO ready when first event lands

Build delivered

  • applications/shikamaru-geography/scripts/build-countries-json.py

  • applications/hinata-studio/public/data/geography/{countries,world-110m}.json

  • src/geography/{types.ts, distance.ts, shapes.ts} — Haversine + Mercator + path generators

  • src/components/Geography.tsx (570 lines) — 3 modes: Country (silhouette + 6-guess), Languages (2-from-8 grid), Capital (2-step name + click-on-shape with coloured dots)

Studio wiring

* Tab geography (Option+G); owner Shikamaru; surface ownership: Brook

* Renamed Mastery music category label to "Music"; geography category added

Open follow-ups

  * Phrase sub-round inside Languages mode (deferred to v2)

  * jimmy-vps event persistence (cross-device sync)

  * GDP/Population data — World Bank API timed out; rerun with longer timeout

  * UN scope expansion beyond Africa

◆ hinata · geography-game · folded from documentation/activities/ phase-19