spb/countryatlas
Public
TypeScript 57%
Python 38.6%
JavaScript 3.6%
CSS 0.6%
1# CountryAtlas23**www.countryatlas.co — Understand the world, one country at a time.**45**Explore the world through data.** The interactive data atlas of the world: 218 countries and territories, 260+ indicators,62 million observations, 9 sources — every number traceable to source → dataset → series → retrieval date → original URL.78Signature features (2.0, September 2026): **World Explorer** (`/explore`, full-screen map + time machine 1960→today), **Country DNA**9(percentile fingerprint with a reference profile), **Country similarity** (explainable peers), **World Pulse** (what is changing10globally), **Change detection** (records, reversals, structural breaks, volatility), **Trajectories** (`/trajectories`, animated11Gapminder-style bubbles), **Scatter** with descriptive statistics, **Country Finder** (`/finder`, filter the world like a database),12**Extremes**, **Above/below expected** (`/peers`), **Data stories**, a **dataset builder**, an **interactive API explorer** and a13**provenance panel** on every value.1415## Layout1617```18registry/ canonical registries (YAML, versioned): countries, groups, indicators, topics, similarity, insights19src/countryatlas/ Python platform20 registry/ loaders + country-code lookups21 connectors/ one module per provider (worldbank, owid, imf, oecd, eurostat, who, fred, bis, ilo)22 pipeline/ fetch → normalize → validate → build (DuckDB snapshot) → derived tables; scheduler; exports23 storage/schema.sql DuckDB schema (single source of truth for pipeline and API)24 api/ FastAPI public API (/api/v1, OpenAPI at /api/v1/docs)25 cli.py `ca` command line26apps/web/ Next.js 16 app (App Router, Tailwind v4, own SVG chart kit, d3-geo maps) — see apps/web/README.md27src/countryatlas/stats.py deterministic statistics engine (ranks, percentiles, robust z, breaks, correlations, Theil–Sen…)28deploy/ mld manifest for the MacLustr cluster29docs/ ARCHITECTURE.md (contract), PIPELINE.md, API.md, sources-research.md30tests/ pytest31```3233## Run locally3435```bash36uv venv --python 3.12 .venv && uv pip install -e ".[dev]"37.venv/bin/ca registry validate38CA_DATA_DIR=~/countryatlas-data .venv/bin/ca refresh # fetch all connectors, build ~/countryatlas-data/atlas.duckdb39CA_DATA_DIR=~/countryatlas-data .venv/bin/ca status40CA_DATA_DIR=~/countryatlas-data .venv/bin/python -m uvicorn countryatlas.api.main:app --port 829141pnpm install && cd apps/web && API_URL=http://127.0.0.1:8291 pnpm dev # http://localhost:829042```4344## Deploy (MacLustr)4546Manifest `deploy/countryatlas.mld.json` → `M1M32:~/dispatch/apps/countryatlas.json`, then from the laptop:4748```bash49~/Desktop/cluster-skill/mld stage ~/Desktop/Projets/apps-web/countryatlas countryatlas50~/Desktop/cluster-skill/mld deploy countryatlas --node M2M3251```5253Public route `https://www.countryatlas.co → M2M32:8290` is created on the BHS64 gateway by `mld deploy`54(DNS `A www → 51.161.112.61`). Processes (PM2): `countryatlas-web` (:8290), `countryatlas-api` (127.0.0.1:8291),55`countryatlas-scheduler` (daily refresh 03:15 America/Toronto).5657## Data sources & licences5859World Bank WDI (CC BY 4.0), IMF WEO (IMF terms), OECD (CC BY 4.0), Eurostat (CC BY 4.0), WHO GHO (CC BY-NC-SA 3.0 IGO),60FRED (St. Louis Fed terms; series-level licences), Our World in Data (CC BY 4.0), BIS (BIS terms). Every value on the61site and in the API carries its source, dataset, series code, retrieval and source-update dates.62