Colophon
Spaced repetition
Review scheduling uses the fsrs Python package, an implementation of the Free Spaced Repetition Scheduler algorithm. Each review updates a card's stability and difficulty and picks the next due date.
Frontend
Pages are server-rendered Django templates. The interactive quiz is an Alpine.js component talking to a few JSON endpoints.
The world map is rendered with MapLibre GL JS. Both libraries load from a CDN: there's no npm and no JavaScript build step.
Styling
Tailwind CSS v4, built via django-tailwind-cli. It uses Tailwind's standalone Rust binary from PyPI, so there's no Node toolchain.
Data
Country borders come from Natural Earth's admin-0 countries dataset. The daily game uses a borderless hypsometric raster map built from Natural Earth imagery. City locations come from Natural Earth's populated places dataset, and the built-up-area footprints used to score find-it taps come from Natural Earth's urban areas dataset. City population data comes from GeoNames, licensed under CC BY 4.0.
The country facts shown in Explore come from Wikidata (CC0), the World Bank Open Data (CC BY 4.0), Our World in Data (CC BY 4.0), the Observatory of Economic Complexity (Etalab v2.0), and the IMF World Economic Outlook (free reuse with attribution).
Backend
Django 5.2 on Python 3.14, with PostgreSQL for storage. Gunicorn serves the app and WhiteNoise serves static files.
Hosting
The app runs on a small Hetzner VPS, managed by Coolify. Traefik handles SSL termination on the box, and Cloudflare sits in front for DNS and CDN.
Password-reset email goes out through Resend.
Request traces go to Honeycomb via OpenTelemetry. Errors go to Sentry.