Set out to verify the map's second mode, "Resources found", which had never been tested. It works: the legend switches, the arithmetic is an exact complement of the gap view — 0 of 170 countries disagreed — and the two modes genuinely repaint, 98/46/12/6 polygons by band in gap against 85/66/9/2 in coverage. Proving that took three attempts and the third one found the real defect. Comparing the fill expression proved nothing, because it is ["get","color"] in BOTH modes — the colour is baked onto each feature and switching modes rewrites the source data. Comparing the features instead showed 157 coloured and 5 transparent against 170 rows in the table, and that mismatch was the thread worth pulling. The previous refresh of this table only UPDATED rows that already existed, and the table came from the curated 2,106-record set. So 60 countries carrying pins had no row at all — 150 people groups with nothing found, invisible to every country-level surface. Canada 20, Ghana 15, Timor-Leste 13, Australia 7. 72 countries are now added from the pins, and 0 countries with bare groups are missing; all 242 rows agree with the pins on groups and no_resource. Curated columns on the new rows are null, never zero: this build does not know a growth rate for Canada, and zero is a claim. They are flagged from_pins_only so the different basis is visible rather than implied. Names come from people-groups-slim's CountryName, because a row labelled "CAN" renders "CAN" as the sheet's title. UNm49Region was deliberately NOT used for region — it is a numeric code, and "19" is worse than blank. One row stays a bare code: Kosovo, whose non-standard KOS has no name in the source, and inventing one for a single row is not worth it. The boundary file turns out to hold only 162 polygons and has no Canada, Australia, Timor-Leste or Taiwan, so this paints five previously-transparent countries and fixes the rest where it actually shows: clicking a pin in Canada now opens a sheet titled "Canada" with 304 groups, matching the pins exactly, where before it fell through to a bare ISO code with no statistics. |
||
|---|---|---|
| .. | ||
| external-bundles | ||
| legacy/upg-neighbor | ||
| people-groups | ||
| posters | ||
| tables | ||
| vendor | ||
| README.md | ||
data/ — the bundler's source-of-truth data
The law: data lives here; public/ is generated. Every folder in data/ is copied into the
served web-root by the build (internal/generate-tree.mjs), exactly like the per-profile data in
plugin-designs/*/data/. You should be able to rm -rf public/ and get it all back with bun run build.
| Folder | Served at | What it is |
|---|---|---|
people-groups/ |
/assets/people-groups/ |
People-group datasets (CSV/JSON) the maps read at runtime |
vendor/ |
/assets/vendor/ |
Third-party runtime assets (e.g. table libraries) |
posters/ |
/assets/posters/ |
Rendered poster webp set (heavy pipeline output; poster walls fetch these) |
tables/ |
/assets/tables/ |
The MERGED served table set (its index.json is the merge; per-profile plugin-designs/*/data/tables are build-time sources) |
external-bundles/ |
not served | Prebuilt map IIFEs vendored from sibling projects (not built here); only the optional layouts/ shell mounted them, so the build no longer copies them into public/ |
Don't edit anything under public/ by hand — change it here (or in plugin-designs/*/data/,
layouts/*/assets/) and rebuild.