Two of the five shipped without one. bebas-neue/LICENSE was 24 lines and poppins/LICENSE 29 -- our own notes files named LICENSE, pointing at openfontlicense.org instead of carrying the text. The OFL requires the licence to travel WITH the font, and these fonts go out in the repo we intend to give away. Both now carry their FAMILY'S OWN upstream OFL, fetched verbatim from google/fonts, which is what brings the real copyright line with it -- Dharma Type for Bebas Neue, the Poppins Project Authors for Poppins. No licence text was authored here. Source URL and sha256 are recorded. figtree keeps its OFL and loses only the six lines of ours that sat above it. Our prose moved to documentation/vendored-fonts.md, OUTSIDE the served tree, and that placement is the whole lesson. My first attempt put a NOTES.md beside each LICENSE, which check:public-hygiene rejected as "documentation in a served folder" -- three new hard findings, plus a fourth for an internal folder name I had relocated with the text. The old bebas-neue LICENSE had said exactly this in its own words, "prose does not belong in a public served folder"; I quoted that line and then did it anyway. The licence travels with the font; the explanation travels with the repo. Whole shipped tree, measured before and after rather than sampled: role nouns 6 -> 0, hygiene warnings 18 -> 14, findings 1 -> 1 (the pre-existing assets/ contract one, not mine). |
||
|---|---|---|
| .. | ||
| boundaries | ||
| brand | ||
| external-bundles | ||
| fonts | ||
| glottolog | ||
| images | ||
| internet | ||
| legacy/upg-neighbor | ||
| people-groups | ||
| posters | ||
| pplr | ||
| tables | ||
| translation-readiness | ||
| 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.