Manifest
Read this first. It catalogs prepared resources — each entry has a key, file path, and integer version for cache invalidation.
Prepared resources
Fetch the manifest, then load each resource by its path. Key client caches on key + version.
- /data/supported_languages.json —
languages(v2) — UI language codes and labels - /data/exam_editions.json —
exam(v1) — test editions, question paths, pass thresholds - /data/governors.json —
governors(v1) — current U.S. governors - /data/senators.json —
senators(v1) — current U.S. senators - /data/representatives.json —
representatives(v1) — current U.S. House
How data is produced
Officeholder data is scraped from public government pages (nga.org, senate.gov, house.gov) at deploy time by scripts/build.mjs — no API keys, no runtime deps. Every row carries a standardized state_code + state_name, and each file has an as_of date.
Consumer flow
The app should not hardcode paths or language lists:
- Fetch
/manifest.json - For each needed resource, fetch
resource.path - Invalidate cached copies when
resource.versionchanges
Not ready
Exists in the repo but not published through the manifest — do not consume until listed: data/federal.json, data/states.json, data/distractors.json, questions/, i18n/.