About
Browse every Japanese prefecture, municipality and prefectural capital, and every country, capital and major city in the world — then test yourself with multiple-choice and written quizzes.
Data sources
Every name, reading and capital here comes from a published source. Each list links back to it.
- 総務省 全国地方公共団体コード
Codes, names and readings for all 47 prefectures and 1,747 municipalities
License: 政府標準利用規約 (CC BY 4.0 互換)
- mledoze/countries
Countries, capitals, regions and Japanese country names
License: ODbL 1.0
- GeoNames
Cities, populations and Japanese city names
License: CC BY 4.0
- Flagpedia
Flag images
License: Public domain
Prefectural capitals, regional groupings and English prefecture names were entered by hand and checked against each prefecture's official website, which is linked from every prefecture page.
English spellings for Japanese municipalities are generated from the official kana with Hepburn romanization, without macrons — Tokyo, not Tōkyō. A handful of names where the source writes a contracted sound with full-size kana, or where a vowel sequence is not actually a long vowel (Matsuura, Katsuura), are corrected from a list kept in the repository.
Why it exists
Most geography quizzes tell you how many you got right, but not what you have left. Fudoki starts from the whole set — 47 prefectures, 1,747 municipalities, every country with a capital — shows it to you as a list first, and then reports your progress as how much of that set you have covered. A score out of ten is forgettable; 122 of 1,747 is a map of where to go next.
How it is built
Bun, Hono and hono/jsx on Cloudflare Workers, with the dataset in D1. Pages are server-rendered in full; JavaScript is added afterwards only to filter and sort what is already in the page, so the lists work without it. The quiz and the account screens are React islands. Styling is Tailwind, checks are Biome, TypeScript and Vitest.
Why it is built this way
The quiz never asks the database for a random row. Drawing one would scan the whole population on every question, and the free tier is measured in rows read per day. Instead the question pools are precomputed at build time with dense positions, so a question costs a fixed handful of primary-key lookups no matter how large the set is. For the same reason the quiz keeps no state in the URL: filters in a query string multiply into URLs that crawlers follow forever.