Adds the sub-national regional dataset and its deterministic generator as the foundation for splitting the map into much smaller regions (#16).
scripts/generate-regions.mjs (dependency-free): subdivides each country into adaptive ~100-200 km regions (few-to-tens each; bigger for vast/sparse areas like Siberia/Sahara) by clipping a local square grid to the country geometry. Countries crossing the antimeridian stay a single region for v1.
public/regions.geo.json (committed): 2,597 regions across 177 countries (~755 KB), each id = <ISO_A3>-<nn> with properties.parent = the parent country.
scripts/regions.test.ts: validates the dataset (valid GeoJSON, id/parent format, per-country count band 1-36 with >=2 for area > 50,000 km2, sane region sizes, tiling coverage ~[45%,108%]).
No app behavior change yet — the map still uses countries.geo.json. PR 2 switches the map + ownership to this dataset.
Part 1 of 3 for #16 (dataset -> map/ownership -> sub-region-level transfers).
Part of #16
Adds the sub-national regional dataset and its deterministic generator as the foundation for splitting the map into much smaller regions (#16).
- `scripts/generate-regions.mjs` (dependency-free): subdivides each country into adaptive ~100-200 km regions (few-to-tens each; bigger for vast/sparse areas like Siberia/Sahara) by clipping a local square grid to the country geometry. Countries crossing the antimeridian stay a single region for v1.
- `public/regions.geo.json` (committed): 2,597 regions across 177 countries (~755 KB), each `id = <ISO_A3>-<nn>` with `properties.parent` = the parent country.
- `scripts/regions.test.ts`: validates the dataset (valid GeoJSON, id/parent format, per-country count band 1-36 with >=2 for area > 50,000 km2, sane region sizes, tiling coverage ~[45%,108%]).
- **No app behavior change yet** — the map still uses `countries.geo.json`. PR 2 switches the map + ownership to this dataset.
Part 1 of 3 for #16 (dataset -> map/ownership -> sub-region-level transfers).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Part of #16
Adds the sub-national regional dataset and its deterministic generator as the foundation for splitting the map into much smaller regions (#16).
scripts/generate-regions.mjs(dependency-free): subdivides each country into adaptive ~100-200 km regions (few-to-tens each; bigger for vast/sparse areas like Siberia/Sahara) by clipping a local square grid to the country geometry. Countries crossing the antimeridian stay a single region for v1.public/regions.geo.json(committed): 2,597 regions across 177 countries (~755 KB), eachid = <ISO_A3>-<nn>withproperties.parent= the parent country.scripts/regions.test.ts: validates the dataset (valid GeoJSON, id/parent format, per-country count band 1-36 with >=2 for area > 50,000 km2, sane region sizes, tiling coverage ~[45%,108%]).countries.geo.json. PR 2 switches the map + ownership to this dataset.Part 1 of 3 for #16 (dataset -> map/ownership -> sub-region-level transfers).