Every people group on earth (peoplegroups.org, 12,379 group-country rows) in four colors: BLACK doxa (live ROP3 match vs the prayer API), RED frontier (GSEC 0-1), YELLOW unreached (GSEC 2-3), GREEN reached (GSEC 4-6). Clickable legend filters a category and fits the view to all of it; popups carry GSEC, language, religion; DOXA dots link to pray with utm attribution. Uses the shared static dataset + the standard pray-tools pipeline; renders fully by GSEC even if the API is down. Wired into the SPA nav (the 'soon' placeholder is now a real map) + deep-link preload. Smoke: mounts with live canvas. |
||
|---|---|---|
| .. | ||
| app-wrapper-material | ||
| pane-wrapper | ||
| README.md | ||
layouts/ — app wrappers
Each folder here is an app wrapper: a host shell that composes doxa-maps app-profiles (the independently-built custom elements) into one application.
layouts/<wrapper>/ ← the HOST page (not a bundle)
┌──────────┬──────────────────────────────┐
│ sidebar │ mounts an app-profile here │
│ (nav.js) │ ┌──────────────┐ │
│ ├ item │ │ <doxa-map> │ ← a │
│ ├ section│ │ (a bundle) │ micro- │
│ └ folder │ └──────────────┘ frontend │
└──────────┴──────────────────────────────┘
- app-profile = a self-contained custom element (the micro-frontend). app wrapper = the host that mounts them and provides nav/chrome. A wrapper is a host page, not a bundle-in-a-bundle.
- Wrappers today:
app-wrapper-material/,pane-wrapper/. - Icons are inline SVG only (no CDN) — an F-Droid/offline hard requirement.
Sidebar contract, target filtering, sidebar modes, staging: ../docs/architecture/app-wrappers.md.