Brandon Grotesque is commercial and must not ship in a public giveaway, so the two rules that named it now ask for Figtree. It is vendored the way the other three families are — woff2 per subset under public/assets/fonts, an OFL licence beside it, registered at document level because @font-face is document-scoped. The choice is measured, not a matter of taste. Their live page really does load Brandon_Grotesque_medium.woff2, and Brandon sets "FULL PROFILE" at 128.00px at 500/19.5312px. Nineteen libre grotesques were measured the same way: Figtree is 126, Nunito Sans 130, Barlow 125, Inter 134, Archivo 135, Poppins 119, Montserrat 148. Figtree is the closest at two pixels. Worth recording because the old scorecard has it backwards: 134.33 is the generic sans fallback, not Brandon. The number to match was 128 all along. |
||
|---|---|---|
| .. | ||
| api | ||
| colors | ||
| components | ||
| composables | ||
| constants | ||
| data | ||
| i18n | ||
| layouts | ||
| maps | ||
| packet | ||
| scripts | ||
| stores | ||
| styles | ||
| utils | ||
| index.js | ||
| ProfileLoader.vue | ||
| README.md | ||
library/ (@map) — the shared map template
The other half of the architecture (see ../plugin-designs/README.md):
every map in plugin-designs/<your-map>/ composes the reusable, parameterized pieces that live here.
Fix something here and every map benefits on the next build; break something here and every map
breaks — read components/WARNING.md before touching shared pieces.
| Folder | What lives there |
|---|---|
ProfileLoader.vue |
The root of every bundle: parses profile-config, loads the profile, provides the stores + config |
components/ |
Shared UI — map, legends, controls, popup (PeopleGroupDetail), tables, charts, hints (README) |
composables/ |
Shared logic — map engine (useMapInstance), provider switch, shadow-DOM styles, theming |
stores/ |
Per-instance Pinia stores (ui / map / data) — provided by ProfileLoader, injected by children |
api/ |
Data-source registry (sources.json) + fetch layer — the JAMstack runtime wiring |
colors/ |
Color sets maps opt into via profile-config.colorSet |
i18n/ |
The shared string catalogs (all maps speak the same languages) |
data/ |
Small shared datasets baked at build time (big served data lives in ../data/) |
constants/ |
Shared constants |
scripts/ |
Maintainer pipelines (posters, research) — not part of any bundle |
The rule of thumb (same as WARNING.md): custom code in your app-profile, reusable code here — and things only move from the first to the second once they've earned it.