Commit graph

202 commits

Author SHA1 Message Date
driver
c6a846d86c Docs: MapLibre is the default on every map, and one setting switches back to Mapbox
- MOBILIZATION-MAPS-LAPTOP.md: every map on the site, DX Life's own home, pray, adopt and country maps
  included, uses MapLibre by default (the Driver's rule); NUXT_PUBLIC_MAP_PROVIDER=mapbox with
  NUXT_PUBLIC_MAPBOX_TOKEN switches back to Mapbox as doxa.life uses it today. The dropped-in tree is
  DX Maps development cff06fb8e.
- DX-MAPS-GALLERY.md: the Map engine paragraph said a token alone selects Mapbox, which stopped being
  true when the provider setting came in; now it gives the real switch. It names what comes from
  other hosts (the engine from jsDelivr, base-map tiles from OpenFreeMap and VersaTiles, one
  dashboard's figures from the World Bank API, the prayer API). The tree sha is cff06fb8e.
- deep-research/index.vue: its comment no longer says "no third-party host" without qualification.
2026-09-29 19:42:27 +00:00
driver
fc13cd3607 Drop-in: public/dx-maps refreshed from DX Maps development cff06fb8e (the Deep Research gallery)
The whole dx-maps output folder, replaced with the tree committed on DX Maps development at
cff06fb8e (1209 files; it contains f0eb33951, the previous refresh). The gallery is now titled Deep
Research, honours the {"experimental": false} this site's /deep-research page passes (the Experimental
folder is hidden), remounts a tab on a live language switch, and every one of its seven tabs has the
"what can this map do for you?" info button. manifest.json does not record the DX Maps commit, so it
is recorded here.
2026-09-29 19:39:45 +00:00
driver
f364f856ad MOBILIZATION-MAPS-LAPTOP.md: run the branch on a laptop (clone, install, one command, the addresses, the Mapbox swap) 2026-09-29 19:21:45 +00:00
driver
f7adfb14cf Drop-in: public/dx-maps refreshed from DX Maps development f0eb33951
The whole dx-maps output folder, replaced (not merged) with the tree committed on DX Maps
development at f0eb33951 (1209 files), which the DX Maps landing gates keep equal to a fresh build.
It carries the packet export fix (a2809b31f) and 32cf3f235. manifest.json does not record the DX Maps
commit it came from, so it is recorded here.

The embed snippets in this tree are relative to the tree root, so the folder works wherever it is
dropped; the gallery builds its embed URLs at runtime from the page's own origin. Every bundle this
site loads by name is in the tree: doxa-maps-spa, doxa-simple-map, doxa-research-map, country-map, and
the assets the static pages under public/embed and public/research use.
2026-09-29 19:20:29 +00:00
driver
ffade36fb2 Maps: nothing from api.mapbox.com stands in front of a map; Mapbox is reachable through the provider setting
1. The page no longer loads Mapbox GL and the geocoder before the map bundle. They came from
   api.mapbox.com, in one try with the bundle, so a slow or blocked Mapbox CDN meant NO map at all,
   even with MapLibre, which needs nothing from Mapbox. Each dx-maps map loads its own engine, its CSS
   and its geocoder, once, when it is built (ensureEngineScript in dx-maps' useMapInstance.js, which
   reuses a loaded engine and never loads it twice). So the page now loads only the map bundle, in its
   own try; Mapbox is fetched only when Mapbox is the provider, by the map, after the bundle.
2. The provider is always passed explicitly: 'mapbox' when the site chose it
   (NUXT_PUBLIC_MAP_PROVIDER=mapbox with NUXT_PUBLIC_MAPBOX_TOKEN), otherwise 'maplibre'. A token
   alone never selects Mapbox in dx-maps, so before this, choosing Mapbox had no effect: the maps ran
   MapLibre carrying a token. Fixed in DoxaMapSlot (home, pray, adopt, research, country) and on
   /deep-research.

Lineage: the provider handling (app/utils/mapProvider.ts and DoxaMapSlot's use of it) is NOT
production's code; it came with the drop-in lineage (b045200, an ancestor of 9860e78). DX Life
production (github master fc4d622) has no provider setting. The script chain in useDoxaMap is
production's pattern, which production needs for its own /js bundles; this branch loads dx-maps
bundles, which carry their own engine loader. With the default settings (MapLibre), home, pray and
adopt render the same map as before; they only stop downloading the unused Mapbox scripts and CSS.
The token handling matches production: the public token, passed only in Mapbox mode.
2026-09-29 19:19:26 +00:00
driver
5820c58115 Research page: exactly DX Life production's (github master fc4d622), with the research map as before
The Driver's rule for the Research page: as it is on the production site today, with the gallery off
it. The page file is now byte-identical to production's: the heading, the By Region link, the
research map (bundle research-map) and the UUPG list. The only change a visitor gets is where the map
comes from: DoxaMapSlot loads it from this site's /dx-maps/ tree, and MapLibre is the default engine.
2026-09-29 19:00:05 +00:00
driver
1f107d45e0 DX-MAPS-GALLERY.md: the gallery is the hidden Deep Research page; the Research page has the simple map
Also corrects two statements that were already stale on the drop-in branch: the page has one
scrollbar and no footer (not a footer below the gallery), and the dropped-in tree is dx-maps
development 1bbc5ff87 (not main 11129455e).
2026-09-29 18:56:54 +00:00
driver
0855b35bd0 Deep Research hides the gallery's Experimental folder; the two pages pass the repo's lint
- /deep-research gives the gallery profile-config {"experimental": false}: the curated sections
  only, no Experimental folder. Galleries built before the flag ignore it.
- Both pages are now clean under the repo's ESLint config (layout only).
2026-09-29 18:51:10 +00:00
driver
d4901dc424 Deep Research page: the Research Gallery on a hidden page; the Research page shows the simple map
DX Life asked for the gallery under the name Deep Research, on a page of the site rather than a
subdomain, and not on the Research page.

- /deep-research: the gallery, exactly as it ran on the Research page (one scrollbar, no footer,
  runtime tree base, MapLibre by default). It is in no menu and tells robots not to index it.
- /research: DX Life's own UUPG page again (the heading, the By Region link and the UUPG list),
  with the production simple map (doxa-simple-map) carrying the Engagement, Prayer and Adoption
  tabs that the home, pray and adopt pages each show one of.
- /regions: DX Life's own regions index and its menu item are back (LEGACY_REGIONS_PAGE and
  USE_LEGACY_REGIONS_PAGE on); /countries goes to it.
- DoxaMapSlot: the map fills its box, not the viewport (--profile-min-h: 0), so the slot no longer
  cuts off the map's attribution and bottom controls.
2026-09-29 18:42:38 +00:00
doxa-maps
9860e78ff1 Country map popup: the Pray and Full Profile links are escaped like every other value in it
popupHtml() escaped the name, the subtitle, the stats, the description, the photo address and the two
button labels, but put prayUrl and profileUrl into href raw. Both end in the people group's slug,
which comes from the API, so a slug with a double quote would close the attribute. Both now go
through the escapeHtml the popup already uses. Found by the regions plugin, which fixed the same
inherited code in its dx-maps port.
2026-09-29 05:45:22 +00:00
doxa-maps
a35daff498 LAPTOP-6WAY: two routes, drop-in (this branch, no Docker) and subdomain (the container)
The same page as on the subdomain branch. The CDN route is retired, and its branch is kept
for history. This branch is the default route: PORT=4611 bun run dev, with no setting to
change. To try a newer dx-maps: bun run tree with this site's address, then dx-maps' bun run
dropin.
2026-09-29 03:35:51 +00:00
doxa-maps
909542b375 Country and region maps name their profile (country-map), as every other map does
<doxa-country-map> reads its profile from profile-config, like the manifest's own snippet
({"profile":"country-map",...}) and like this site's other maps (profile: 'doxa-simple-map').
Without it the element drew nothing but 'Profile "" not found' on every country page
(rega, 1440 and 390, en and ar).
2026-09-29 03:11:39 +00:00
doxa-maps
1247134ac1 Drop-in: public/dx-maps from dx-maps development 1bbc5ff87, snippets absolute for this site
The manifests are generated with EMBED_BASE_URL=https://dxlife-dropin.nuxtbase.app, so every
copy-paste snippet loads from this site wherever it is pasted (227 absolute URLs; the tree
generation changed only the two manifests). The tree also brings studio's final round: the
gated key-cities bundle is out of the tree (its data tables stay, the Cities with Internet map
uses them), each Experimental map's own "?" explainer, and the country map's poster legend.
2026-09-29 03:01:14 +00:00
doxa-maps
2be05ccd57 LAPTOP-6WAY: the Subdomain way opens the gallery at research.localhost, like research.<host>
The gallery now gets its own origin on the laptop, as it does on the team's server, while the
maps stay on localhost:4610. Chrome and Firefox send any *.localhost name to this computer;
Safari and command-line tools may need `127.0.0.1 research.localhost` in /etc/hosts.
Checked: the tree server answers research.localhost:4610 (gallery 200, with ?tab= and
&lang=ar; manifest 200; the bare root 404, so the address keeps its /index.html).
2026-09-29 02:36:58 +00:00
doxa-maps
0c6cbf1378 Drop-in: public/dx-maps refreshed from dx-maps development 6406a57e4 (adds <doxa-country-map>)
The country and region pages already ask for the country-map bundle; this tree
carries it (country-map/country-map.js, in the manifest with its SRI). Taken
from development, not main: the element is not published yet, and the drop-in
carries its own copy of the tree.
2026-09-29 02:15:29 +00:00
doxa-maps
47e088927e Country and region pages use the dx-maps country map (<doxa-country-map>, both engines); CountryMap kept, switched off 2026-09-29 00:31:35 +00:00
doxa-maps
5112851c4e LAPTOP-6WAY: the one command that makes the copy-paste snippets pasteable too (EMBED_BASE_URL + bun run tree); proven 21 of 21 2026-09-29 00:31:33 +00:00
doxa-maps
d57b751178 Run the three research-gallery ways on a laptop against a local dx-maps (documentation/LAPTOP-6WAY.md) 2026-09-29 00:24:16 +00:00
doxa-maps
97449c5fc3 Regions is a view of the Research Gallery: the /regions index redirects there (every language); menu item off; detail pages kept 2026-09-28 20:46:49 +00:00
doxa-maps
3cd93da61d Drop-in: public/dx-maps refreshed from the dx-maps build at 01b02e378 (L65: MapLibre default, mobile gating, cards per row, poster fixes) 2026-09-28 18:34:00 +00:00
doxa-maps
d661d94f2e Drop-in: public/dx-maps refreshed from the dx-maps build at bf08bc44 (carries the one-scrollbar fix) 2026-09-28 17:12:03 +00:00
doxa-maps
b045200e48 Maps default to MapLibre (keyless); Mapbox by NUXT_PUBLIC_MAP_PROVIDER=mapbox with a token 2026-09-28 17:11:57 +00:00
doxa-maps
4374c1fcc2 Research page: one scrollbar. No footer, and the page does not scroll while the gallery fills the viewport below the header 2026-09-28 14:31:30 +00:00
doxa-maps
3d2d4ad5d8 Map cards keep rounded corners and phones get a taller map slot; old /js/doxa-maps links 301 to the dx-maps tree (carried from doxa-maps-build; on drop-in the tree is this site's own /dx-maps) 2026-09-28 13:51:55 +00:00
doxa-maps
a61cf266a9 /embed-test: mounted plugins follow a language switch; each card records the locale it was given (data-locale) 2026-09-28 07:03:59 +00:00
doxa-maps
29ae5045bf Maps and /embed-test plugins get DX-life's locale (it is in the path, which they cannot read) 2026-09-28 06:55:24 +00:00
doxa-maps
81ba59dfd4 /embed-test embeds every web plugin: production first, then every other; desktop-only plugins skipped by their manifest targets 2026-09-28 06:12:38 +00:00
driver
63a279a780 README: the branch is research-gallery-drop-in 2026-09-28 05:10:26 +00:00
driver
719317d693 Drop-in: every map loads same-origin from public/dx-maps (the dx-maps output folder, refreshed from doxa-maps main); /embed-test embeds every production plugin 2026-09-28 05:08:04 +00:00
doxa-maps
087ae5d8a0 Research page defaults to the maps CDN for the dx-maps tree
NUXT_PUBLIC_DX_MAPS_BASE now defaults to https://maps-dev.nuxtbase.app/cdn/dx-maps (the Plugin Studio
container's /cdn). Set it empty to use this site's own public/dx-maps copy; set it to another tree URL to
use that.
2026-09-28 04:11:13 +00:00
doxa-maps
d4daff02b9 Research page: NUXT_PUBLIC_DX_MAPS_BASE loads the dx-maps tree from a maps CDN
Set, the gallery script and its tree-base come from that URL (e.g. https://maps-dev.nuxtbase.app/cdn/dx-maps).
Unset, the page uses this site's own /dx-maps/ copy exactly as before. Both modes proven on the dev
server: 0 console errors, the gallery tabs draw, and every dx-maps request goes to the chosen host.
2026-09-28 03:58:13 +00:00
doxa-maps
bdf1061a28 Research Gallery from dx-maps main 9ce04ffea, previous Research page kept switched off
public/dx-maps is replaced with the dx-maps build tree from doxa-maps main 9ce04ffea (28 bundles);
the gallery's manifest integrity matches the served doxa-maps-spa.js.

The Research page embeds the whole Research Gallery with the JS embed. Every embed URL is built at
runtime from the origin serving the page (tree-base = window.location.origin + /dx-maps), so the same
build works on a laptop, staging or production.

The previous Research page (the "By Region" link, the single research map and the UUPG list) is NOT
deleted: it is back in the page, switched off by SHOW_LEGACY_RESEARCH = false. The two old scripts
public/js/doxa-simple-map.js and doxa-research-map.js are restored too, unused, so nothing DX-life
relied on is removed.
2026-09-28 01:30:48 +00:00
doxa-maps
a61b1e810a Maps: download their three scripts together, and show a spinner until the map is ready
The home, pray and adopt maps ran Mapbox GL, the geocoder and the map bundle one after
another, so on a cold first visit the slot stayed empty while ~1.8 MB downloaded in series.
Preload hints now fetch all three in parallel (they still run in order), and the slot shows a
quiet spinner (aria-busy) until the map element is defined.
2026-09-26 02:56:34 +00:00
doxa-maps
aeb61e64f7 Serve every map from /dx-maps/
The maps' build tree is now public/dx-maps/ (doxa-maps main 09014f8a), replacing
public/doxa-maps/. The Research gallery, the home, pray and adopt maps, /embed/map/ and
/research/doxa-research-map.html all load from it; the old /js/doxa-simple-map.js and
/js/doxa-research-map.js are removed (no aliases). Mapbox GL moves to v3.24.0, the version
the bundles are built with. With no Mapbox token configured, the home, pray and adopt maps
use the keyless MapLibre engine instead of refusing to start. See DX-MAPS-GALLERY.md.
2026-09-25 21:07:46 +00:00
doxa-maps
3f5cf457b3 Research page: the Research Gallery, served from this site
The Research page now shows the Research Gallery (every research map, dashboard and list)
filling the page below the header, on desktop and phone. It replaces the single research
map, the UUPG list and the By Region link.

public/doxa-maps/ is the doxa-maps build tree (doxa-maps main 196ad168), so this site is
the gallery's CDN. The page loads one script and adds one element. It follows the site
language, and without a Mapbox token it uses the keyless MapLibre engine.
See DX-MAPS-GALLERY.md.
2026-09-25 19:00:41 +00:00
Nath
fc4d6228f8 feat: sync arabic translation 2026-09-25 11:34:14 +01:00
Nath
c65b41633c fix: store button alignment; feat: mobile app to have white bg; fix: order language list 2026-09-25 09:08:06 +01:00
Nath
d58700ddff feat: add mobile app sections to /pray and /research/___ pages 2026-09-24 15:57:00 +01:00
Nath
18e61e92c2 draft of mobile section on pray page 2026-09-24 14:39:46 +01:00
Nath
766ab697c5 fix: remove simple path section 2026-09-24 12:04:34 +01:00
Nath
8e4c9285ab feat: add prayer bundle download to general resources 2026-09-23 14:21:28 +01:00
corsacca
80cbfadb85 replace the CMS definitions page with the terminology page
- serve the per-language terminology editions at /about/definitions
  with the About sidebar; /terms redirects there
- title every edition "Definitions" to match the sidebar label
- drop the self-referencing link to the Definitions page
- add an Arabic edition built from the Arabic glossary
- point the add-language and sync-language skills at the new route
2026-09-23 13:14:08 +01:00
Nath
1128823172 refactor: video languages to single source of truth 2026-09-23 12:08:03 +01:00
Nath
0098a69d7e feat: update contact-us form to use the same format as feedback forms 2026-09-23 11:47:12 +01:00
corsacca
b30f3c39f4 format homepage population figures with locale-native magnitudes
- render billions/millions via Intl compact notation so zh groups on 亿
  and hi on करोड़
- drop the {0} Billion / {0} Million strings from every locale
2026-09-23 09:55:49 +01:00
corsacca
87b835e312 remove the feedback widget
- delete the bundle loader composable and the unused slot component
- strip the site-wide embed from app.vue, leaving the layout shell
- drop the runtime config keys, custom element tag and env entries
- remove the login opt-in and the preconnect to the feedback host
2026-09-22 10:27:08 +01:00
corsacca
0262bb4219 sync all ten site languages with the glossary
- site strings, map widget locales and /terms editions for ar, de, es,
  fr, hi, it, pt, ro, ru and zh
- patch the standalone map bundle in place (it has no build profile) and
  rebuild the two profiled bundles from the updated source locales
- fix defects the sweep surfaced: the ru vision headline read "all
  unmarried people will be married by 2033", ro used popor (nation) as
  the people-group label including the homepage h1, and ar inverted
  "moves from unengaged to engaged"
- correct en.ts, which claimed UUPG and WAGF stay unchanged in every
  edition; es ships GENANC/FMAD, pt PNANE and de UVG/VUVG
- render the filter dropdown's empty-state through i18n, so the
  no_options translation it already computed reaches the component
2026-09-22 09:30:34 +01:00
corsacca
fb51cf738a carry glossary acronyms into translation prompts
- a term with an acronym now yields the acronym as its own pair, so a
  bare UUPG in source text takes this language's acronym instead of
  whatever the model invents
- sync-language says the wording never carries the acronym, and names
  the strings that hold a bare one
2026-09-21 13:32:04 +01:00
corsacca
2149a3874a tighten padding on the desktop language dropdown
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-18 21:08:22 +01:00
corsacca
516620bfa9 finish ro translation 2026-09-18 20:32:35 +01:00