Every surface here answered "who has nothing", then group by group "what is the way in for THIS one". A mobiliser with a budget asks the inverse and had nowhere to ask it: if I resource ONE language, how many peoples does that reach? Over the 369 groups with nothing of their own the answer is 35 rows — SUN is the way in for 93 Deaf groups across 93 countries, Mandarin for 36, Akha for 33, Indonesian for 28. That is a different shape of decision from a list of 369, and it is the one a sending church or a translation agency actually makes. The three kinds are never summed. A CURATED bridge was checked for those groups; a CANDIDATE is computed from published CLDR data about what the country speaks, which is a fact about the country and not about these people; SIGNED is SUN, which has to be learned. A language offered as both a checked bridge and a computed candidate appears once per kind, because those are different claims — which is why there are 35 rows for 32 languages. Every row carries "still nothing of their own" and the word bridge, because aggregating makes that easier to forget, not harder. No new link enters the map: a bridge language's Scripture, film and training are the ones the pin index already holds for that ISO code, and all 80 URL cells resolve to links the verification record has already proved — measured, not assumed. The tab carries its own English until its key lands. tr() falls back to the key, which on a tab would read "gospel.tables.t_bridgereach" — worse than the English it replaces. |
||
|---|---|---|
| .. | ||
| boundaries | ||
| brand | ||
| external-bundles | ||
| fonts | ||
| images | ||
| internet | ||
| legacy/upg-neighbor | ||
| people-groups | ||
| posters | ||
| pplr | ||
| tables | ||
| vendor | ||
| README.md | ||
data/ — the bundler's source-of-truth data
The law: data lives here; public/ is generated. public/ holds only the output folder
(public/<tree>/, named by name in vite.doxa-maps-build-config.json) and a generated README. The
build (internal/generate-tree.mjs) copies what the plugins FETCH at runtime from here into
<tree>/assets/, alongside 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/ |
<tree>/assets/people-groups/ (the fetched cuts only) |
People-group datasets (CSV/JSON) the maps read at runtime |
vendor/ |
<tree>/assets/vendor/ |
Third-party runtime assets (e.g. table libraries) |
posters/ |
<tree>/assets/posters/ (opt-in: bundlePosters / posterSources) |
Rendered poster set (heavy pipeline output; the export button fetches these) |
tables/ |
<tree>/assets/tables/ |
The MERGED served table set (its index.json is the merge; per-profile plugin-designs/*/data/tables are build-time sources) |
pplr/ |
<tree>/assets/pplr/ (the fetched files only) |
The PPLR data maps' derived datasets |
fonts/ |
<tree>/assets/fonts/ |
Vendored typefaces (SIL OFL), e.g. Bebas Neue for the regions clone |
images/ |
<tree>/assets/images/ |
Images the plugins fetch (e.g. the regions list's world-map watermark; see its PROVENANCE) |
brand/ |
not served | Logos and brand imagery (sources; the optional library/layouts/app-wrapper-material shell references them) |
legacy/ |
not served | Archived standalone builds kept for reference (e.g. the original upg-neighbor page) |
external-bundles/ |
not served | Prebuilt map IIFEs vendored from sibling projects (not built here); only the optional layouts/ shell mounted them |
fonts/, images/, brand/ and legacy/ moved here from public/assets/ on 2026-09-25 (card
BUILD-OUTPUT-IS-ONE-FOLDER): they were sources that existed only in the generated folder.
Don't edit anything under public/ by hand — change it here (or in plugin-designs/*/data/,
layouts/*/assets/) and rebuild.