- i18n/locales/it/common.json at key parity with English
- app/utils/terms/it.ts, the same 20 entries in the en.ts order, citing
the Nuova Riveduta 2006 wherever the choice is Scripture-driven
- map legend and search follow the glossary; both bundles rebuilt and the
Italian block of the build-less pplr-data-maps.iife.js patched in place
- translate the German step-card titles, nav home link and signup heading
- build the sidebar tree and category cards from the requested locale
instead of the body's resolved one, so a category landing with no
translated page of its own no longer drops the whole menu to English
The importer and menu-order sync wrote pages.parent_slug, dropped in
migration 010; the scraper fed the importer and read the site being
replaced; po-to-json rebuilt the locale JSON from the WP theme's .po
files, which the glossary now owns. Content lives in the database and
is edited through the doxa-cms MCP server.
config/glossaries.ts was generated from the retired translation repo's DeepL
TSVs, so it had no source left and only the German, Spanish and Portuguese
rows had been hand-patched. Both it and its build script are gone.
- fetch GET /api/glossary/{lang} at runtime, cached ten minutes, serving the
last good answer when the request fails and an empty one when it never
succeeded. A reviewer's correction now reaches auto-translate without a
deploy here
- carry the glossary's notes as well as its terms: register, acronym policy
and number format, placed after the term list so a rule about inflection
governs the pairs above it
- glossary_used on the MCP translate tool now means the locale's terminology
was available, and reads false for a language whose glossary has not been
started
- add /add-language and /sync-language skills for the site strings, the map
widget locales and bundles, the /terms edition, and the CMS pages
- site locale: glossary terms plus the DeepL defects the reviewer never saw
- map legend locales and the three bundles: Não engajado/Engajado, Grupo étnico, PNANEs
- MT glossary pt rows regenerated; Portuguese /terms edition added
- glossary terms only, on top of the human-reviewed Spanish: unengaged is
"no comprometido", UUPG "GENANC", under-engaged "poco comprometido",
frontier "grupo fronterizo", cross-cultural workers "obreros
transculturales", gospel access "acceso al evangelio", champion "defensor"
- fix DeepL leftovers the reviewer never saw: "personas solteras" for
unengaged, "Reza por ellos", "Alianza Global para los No Comprometidos",
"DOXA Vida", "Aprobado" for adopted, "iglesia de acogida", "Si"
- add the Spanish /terms edition and register it
- update the Spanish map legend and rebuild the two active bundles; the
legacy research bundle has no build profile, so its literals are patched
- regenerate the Spanish rows of the machine-translation glossary
- the /terms French edition now lists "Fraternité Mondiale des Assemblées
de Dieu (WAGF)" and demotes "Association mondiale…" to a rejected
alternative, with the rationale that "fraternité" renders "fellowship"
- same row in the French machine-translation glossary so auto-translated
content uses the right name; the source TSV in the translation repo
still needs the matching edit before the glossary is next regenerated
- the three live French CMS pages that name the WAGF (about, statement of
faith, vision) were corrected through the CMS and are not in git
- glossary terms only, on top of the human-reviewed German: unengaged is
"unberührt", UUPG "völlig unerreichte Volksgruppe (VUVG)", under-engaged
"am wenigsten erreicht", engagement "missionarische Arbeit vor Ort",
intercessors "Fürbitter/innen", people group "Volksgruppe" everywhere
- fix leftovers that were never translation choices: "Über Zúme", "DOXA
Leben", "unverheiratet" for unengaged, "Gebetsberichterstattung"
- add the German /terms edition and replace the retired 24-hour prayer
coverage entry with daily prayer in the English and French editions
- update the German map legend and rebuild the two active bundles; the
legacy research bundle has no build profile, so its literals are patched
- regenerate the German rows of the machine-translation glossary
- 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
Formatting splits a sentence across text nodes mid-phrase, and no model
reliably reproduces a fragment's leading or trailing whitespace — a dropped
edge space glues two words together once the fragments are concatenated
back into the document. The source fragment now decides the edges.
- translateText/translateTexts call OpenRouter chat-completions; glossary
terms are prompt-injected from config/glossaries.ts, generated from the
translation repo's TSVs by scripts/build-glossaries.ts
- model resolution: per-language override in config/languages.ts →
translation.model site setting (new admin field) → TRANSLATION_MODEL env
→ anthropic/claude-opus-5, at low reasoning effort
- blank fragments are held back from the model, which drops them and breaks
the one-translation-per-fragment count the caller maps results back on
- OpenRouter failures map to a typed error with a human-readable message;
an unrecoverable one (no credits, bad key, rejected model) stops the run
instead of repeating the same call for every remaining locale
- machine translations record source 'auto-translate'; 'deepl' stays
readable for snapshots written before the switch
- end each region card with a "See <region> dashboard" link, translated
in all eight locales
- stack the people-group and country count on its own line under the
region title in the card header
- move the Regions entry in the hamburger menu to after Resources
* replace country pages with region dashboards
- move /countries to /regions, with 301 redirects from the old URLs in
every locale
- add a region dashboard: a map of the region's countries with pins
coloured by prayer coverage, headline figures, and prayer, adoption and
engagement progress against the DOXA goals, plus a per-country table
- roll up progress stats per country and region in the shared summary
and serve them from /api/regions
- frame region maps with antimeridian-aware bounds
- add Regions to the hamburger menu and translate the new strings in all
eight locales
* put each region on the regions index in a card with a header band
The region name links to its dashboard with the site's chevron icon, and
the people-group and country counts sit centred beside it on a brand-green
header; the country list is the padded white card body.
drop the _=${Date.now()} query param and cache: 'no-store' so the request URL is stable and cacheable by browser + CDN edge
rebuild doxa-research-map and doxa-simple-map IIFE bundles
lets the Cloudflare 5-min edge rule on /api/people-groups/list* take effect
remove "Not Adopted" badge from research page cards
hide Adoption tab on research map and rebuild bundle
remove Adopt and Engage tiles from landing page
drop step number from lone Pray tile on landing page
add clickable country link to pray page cards
- enrich pin popup with photo, country, people group, population,
religion, description, and pray / full-profile links
- fetch the extra fields for pins; reuse existing translated labels
- render photos as a centred portrait (4:5) thumbnail, never landscape
reframe "24-hour prayer coverage" and "10 minutes a day" as daily / 100+ people praying
swap the affected t() keys in pray.vue and the two adopt pages
update the matching keys in all 8 locale common.json files
* Update daily prayer coverage threshold
* Show segmented prayer coverage status
* update prayer progress map legend wording
relabel map legend tiers to "No One Praying", "1+ People Praying", and "100+ People Praying" across all 11 locale legend files
update LABELS constant and tier comments in prayer-progress strategy
rebuild doxa-simple-map and doxa-research-map bundles
---------
Co-authored-by: corsacca <corsacca@gmail.com>
add /countries index grouped by WAGF region and /countries/[country] pages
derive countries from prayer API (slug, count, map center/zoom) via config/countries-meta and /api/countries
prerender country routes for all locales via modules/country-routes
add CountryMap component: highlight focus country, brand-green in-country pins, muted border pins, popups
show bold green note above the map stating people-group count
lock UupgsList to a country and link card country names to country pages
add i18n keys for the new strings