- The generated maps output now lives under public/embed/ next to the embed page;
the site's map slots, the full-page maps view and the embed page point there
- /js/doxa-maps-build/** and the older /js/doxa-maps/** answer 301 to the new location,
so links already shared keep working
- Frame policy follows the new path
- index.html is the generated maps page (lists every bundle, mounts the chosen one, Open page /
Copy embed); the hand-written shell files, the legacy external/ builds and _headers are gone
- Bundles ship without CSS comments (about 5% smaller)
- Share pages: comment wording tidied
- Prayer legend header is now "Progress" with a hoverable has/needs/full bar (658 of 2,107 · 31%)
- Desktop legend type scale increased across every map's legend
- Mobile legend/detail sheet: no transition while dragging, 44px grab zone, one geometry source; map
attribution and controls slide up with the sheet so nothing overlaps
- No basemap flash on load; blue provider badge removed (default Mapbox attribution stays)
- The Share button now derives embed URLs from where the bundle is actually hosted
(profile-config.shareUrl -> embedBaseUrl -> window.MAP_EMBED_BASE_URL -> the bundle's own
script URL), so generated links work on localhost, on doxa.life and on any CDN
- Generated map pages try token endpoints in order (override -> https://doxa.life/api/maps/token
-> same-origin /api/maps/token) instead of failing on a single URL
- GET /api/maps/token sends Access-Control-Allow-Origin: * so map pages hosted on another
origin can fetch a token
- useDoxaMap loads mapbox-gl v3.24.0 to match the bundles
- Refresh the doxa-maps drop-in: upg-100 combined map+lists page, share toolbar on every map,
shared legend radius token
The drop-in leaf maps' token ladder requests /api/maps/token.json (rung 5),
but the endpoint is /api/maps/token — the .json path 404'd, so the
engagement/prayer/adoption maps failed to fetch their Mapbox token. Add a
server route alias that re-exports the token handler so the .json path
resolves (GET /api/maps/token.json -> 200).
Add README with a 'Maps & map tokens' section: MapLibre needs no token,
Mapbox needs a public (pk) token, and how/where the token is served via
GET /api/maps/token (NUXT_PUBLIC_MAPBOX_TOKEN / NUXT_MAPBOX_KEY).
The team's /embed/map iframe page now loads its bundles from
/js/doxa-maps-build/doxa-maps/<bundle>/<bundle>.js (the old flat /js paths were
retired). Everything else from master merges clean.
The visas/field-access table is gone from assets/tables, the tables index, and
the key-cities data view. Public-good datasets (internet gaps, gospel resources,
people-group data) remain.
Every embedded map now inherits ?utm_source= from its embed URL and stamps it on
people-group click-throughs (pray.doxa.life/<slug>?...&utm_source=<yours>) — the
question-mark traffic attribution the team asked for.
doxa-life already ships the right token source (pk passthrough or 1-hour
sk-minted tk, built precisely for public/ embeds). The page fetches it once and
hands it to the shell via its native ?tk= rung — works in pk AND sk
configurations, zero new token surfaces.
The shell's own ladder already accepts ?tk= (rung 2), so /doxa-maps passes the
same public.mapboxToken every map page on this site uses. The server route added
earlier duplicated the token surface for no benefit — deleted.
- The drop-in now carries the bundler's app shell beside doxa-maps/ (index.html,
nav, icons, pane-wrapper, external bundles, assets), so /js/doxa-maps-build/
index.html IS the composed single-page app — every map, lazy-loaded.
- New page /doxa-maps frames it full-bleed (replaces the /maps easter egg).
- The research page gains the pointer: 'See all DOXA maps →' (mirrors the
prayer→research pattern).
- server route serves the shell's ./api/maps/token.json from the site's own
NUXT_PUBLIC_MAPBOX_TOKEN — no secret in the drop-in.
- public/js/doxa-maps-build/ carries every map as a self-contained embeddable
web component (+ per-map pages, manifest with SRI) — the home/pray/adopt/
research pages load their maps from it via useDoxaMap.
- embeddables/ is removed altogether; the drop-in replaces it.
- New unlisted page /maps: the map room — frames the drop-in's staging index,
every map in one place, always as current as the build in this repo.
Consolidate to a single map output location: remove the stale flat
public/js/*.js bundles and move the drop-in to public/js/doxa-maps-build/. Rewired
useDoxaMap to /js/doxa-maps-build/doxa-maps/<bundle>/<bundle>.js and fixed page comments.
'cdn' was a misnomer — the bundler's output is just static files that can be
served same-origin, enqueued directly into the app, OR via a CDN. 'doxa-maps-build'
names it for what it is: the built output of the doxa-maps bundler. Rewired
useDoxaMap.ts (/doxa-maps-build/doxa-maps/<bundle>/<bundle>.js) and the drop-in README.
useDoxaMap now loads the built bundles from /doxa-maps-cdn/doxa-maps/<bundle>/
<bundle>.js (the doxa-maps bundler output folder placed in public/), replacing
the old flat /js/*.js paths so the maps actually resolve on the live site.
The old embeddables/micro-frontends/1040-maps bundler is replaced by the
standalone doxa-maps repo, whose built output is served from
public/doxa-maps-cdn/. The old bundler is preserved on the archive/1040-maps
branch. This also removes the internal '1040' term from the public repo.
- serves at /embed/map with tab, lang, map and utm_source query params
- fetches the mapbox token at load and points the bundle at the prayer api
- strips the bundle's source tag from prayer links and applies utm_source
- send through the sendgrid v3 json api via direct fetch with a
manually cleared abort timeout; mailhog stays for development
- drop nodemailer-mailgun-transport and its types
- swap MAILGUN_* runtime config and env example for SENDGRID_API_KEY
and optional SENDGRID_HOST