Commit graph

4839 commits

Author SHA1 Message Date
doxa-maps
62b005fe17 perf: unblock SPA load (defer mapbox, preconnect, modulepreload) + preconnect embed pages
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
The SPA loaded mapbox-gl.js + geocoder as render-blocking <script> in <head> (~1.2MB
blocking parse) with no preconnect/preload — the ~10s cold load. Now: defer both (the
app module runs after them in doc order, so window.mapboxgl is still ready at mount),
preconnect api.mapbox.com + pray.doxa.life, and modulepreload the default profile
bundle so mapbox+bundle+API fetch in parallel. Measured headless: time-to-chrome 562ms,
time-to-widget 1068ms (was ~10s). Embed pages get preconnect too (kept mapbox sync there
since they use inline, non-module scripts).
2026-09-15 00:38:52 +00:00
doxa-maps
d16f5a6fe5 feat(qa): widget login — detect Nuxtinator session (/api/auth/me) + connect popup
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
The QA panel now checks the go-base session via same-origin GET /api/auth/me and
shows 'signed in as X' + Start; if not signed in it offers 'Log in with Nuxtinator'
(opens the same-origin /plugin-assets/qa-connect.html popup, which reads the session
and postMessages the identity back). Works when the plugin is same-origin; under
NUXT_PUBLIC_PLUGIN_SANDBOX_ISOLATE_ORIGIN=true the frame is origin-null so the check
is blocked (browser rule) and the button surfaces that. Connect page shipped to the
mfe-index volume root.
2026-09-15 00:18:23 +00:00
doxa-maps
f2b0c500b8 fix(qa): inject QA widget CSS via useShadowStyles so it renders in the shadow DOM
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
The widget mounted but was invisible: as a CHILD component of the custom element,
its <style scoped> block was silently dropped from the shadow root (Vue keeps only
the ROOT component's styles), so position/z-index never applied → it laid out as a
static full-width block. Switch to useShadowStyles (same pattern as legend/table/
map-panel) → the pill now floats bottom-right. Verified headless: absolute,
z-index 2147483000, visible, bottom-right.
2026-09-14 23:17:08 +00:00
doxa-maps
6f8c810943 fix(qa): make the QA corner widget actually visible (fixed + top z-index)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
The widget rendered but was painted under map legends/panels and could be trapped
by a profile's full-bleed layout. Switch .qa-corner to position:fixed with a
top-of-stack z-index so it floats bottom-right over any map. (Plugin-open path
fixed separately in convert.py: a plugin now opens its representative MAP page,
not the multi-map staging directory — faster load + the widget shows.)
2026-09-14 22:19:39 +00:00
doxa-maps
24b315afdd feat(qa): bake QA corner widget onto generated embed pages (go-base plugin surface)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
generate-tree now honors a qaWidget build flag (default true) and merges qa:true
into each generated embed page's profile-config, so standalone map plugins opened
in go-base show the QA corner widget too — not just the SPA. Partner embeds use the
copy-embed snippet with their own config, so they are unaffected. Opt out with
qaWidget:false in vite.doxa-maps-build-config.json.
2026-09-14 21:50:24 +00:00
doxa-maps
9ab4ea2d44 feat(qa): QA corner widget on maps (opt-in), on for the DOXA SPA surface
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Adds library/components/qa/QaCorner.vue — a bottom-right floating 'QA' button +
panel (OIDC-onboarding shell: 'Log in with Nuxtinator', no key), rendered by
ProfileLoader over any profile. OPT-IN via profile-config.qa (default OFF) so the
same bundles that power partner embeds never show a QA button; the SPA shell sets
qa:true on every mount so it appears on all maps in the power app. Backend (qhoot /
nuxtbase-baas agent bridge + MCP) wired in a later pass — this is the visible shell.
Spec: _qa-cycle/01-ideation-research/qa-loops/qa-embeddable-qa-agent-bridge.md
2026-09-14 21:47:59 +00:00
doxa-maps
63bc1d77c1 feat(staging): gate profiles out of the generated tree (governance) + clean all-bundles staging
Some checks failed
Deploy to GitHub Pages / build (push) Has been cancelled
Deploy to GitHub Pages / deploy (push) Has been cancelled
Add a gatedProfiles config field (default [key-cities]) honored by the tree
generator: a gated bundle's .js still BUILDS via vite, but it never appears in
the staging root, the per-bundle staging pages, or manifest.json — the surfaces
generate-tree emits. This makes key-cities gated in ONE place for every surface
(convert.py already gates the go-base plugin index), instead of relying on the
box-side converter alone. The staging root now shows all 9 bundles + their
elements with no key-cities leak.
2026-09-13 00:52:24 +00:00
doxa-maps
852d49a8da fix(spa): drop icons from sidebar section headers — cleaner text separators
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
The section/subgroup headers are non-interactive group labels; their leading
icon added visual weight without meaning. Render them as plain text so the
sidebar reads as clean labelled separators. Nav ITEMS keep their icons, and
the collapsible Experimental folder keeps its icon+chevron (interactive row).
Rail mode already hides .sect-hdr entirely, so no empty headers there.
2026-09-12 22:55:24 +00:00
doxa-maps
5f2d7e6bbc fix(spa,dashboard): kill the top divider + reflow the map when the table collapses
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
- SPA sidebar: suppress the leading section divider on the FIRST nav group.
  Every section emitted a `.sep` rule before its header, so Prayer Mobilization
  (the first section) drew a 1px line directly under the header with nothing
  above it to divide. drawSide() now tracks a firstGroup flag and skips it.
- Research dashboard: when the table under the map collapses, resize the map to
  fill the freed space. The ResizeObserver alone missed the grid reflow at the
  instant the table cell flips to display:none (v-show), leaving the map canvas
  at its old size (gray gap). DashboardMapPanel now also resizes on the
  'toggleTable' bus event (rAF + a 280ms settle pass), with clean teardown.
2026-09-12 21:21:45 +00:00
doxa-maps
1cd2b46cd5 fix(spa): make embedded maps survive the sandboxed plugin iframe
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
Three fixes for the power-app SPA running as a go-base plugin (sandboxed
iframe, origin 'null' — where localStorage throws and root-absolute asset
paths misresolve under the /plugin-assets/<name>/ subpath):

- localStorage: wrap every theme/preference read+write in try/catch across
  the library (ProfileLoader, useMapTheme, uiStore). `typeof localStorage`
  is not enough — in a sandbox the object exists but ACCESS throws
  SecurityError. Sandboxed maps now boot themeless instead of crashing.
- assets: the SPA shell now injects an absolute assetsBase (derived from its
  own document.baseURI) into every mounted element's profile-config, so
  bundles fetch tables/vendor (Tabulator) from the correct subpath instead
  of a root-absolute /assets that 404s under /plugin-assets/doxa-maps-spa/.
- nav: revert the Prayer Mobilization section icon to 'heart' (the prayer
  glyph read as a header it is not).

Rebuilds every bundle (library-wide localStorage change).
2026-09-12 21:07:26 +00:00
doxa-maps
30a516a6a3 feat: apiBaseUrl as a first-class build-config field — every generated page bakes window.MAP_APP_API_URL (default pray.doxa.life); one knob to hot-swap to the self-hosted campaigns-server on go-base later, no code change
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-12 03:15:36 +00:00
doxa-maps
0f6d62c030 fix(shell): subpath-portable sibling-layout imports (../layout/ → ./layout/) so the SPA works served under any path, incl. as a go-base plugin at /plugin-assets/doxa-maps-spa/
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-12 02:31:32 +00:00
doxa-maps
b4db24c54c feat: migrate research dashboard into doxa-maps as app-profile research-dashboard (self-contained; reuses @map library; includes facet/rail collapse + table density fixes)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-12 02:04:10 +00:00
doxa-maps
bd3c1eb2f5 revert: remove the vibe-coded prayer-map profile entirely (bundle, output, SPA nav/PROFILES) — the real prayer map is the doxa-simple-map prayer instance; rebuild tree+shell (9 bundles)
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 23:53:23 +00:00
doxa-maps
35c7b2e4ba docs: showcase the REAL prayer map (doxa-simple-map prayer instance, Semantic Tree Legend) — replace the vibe-coded prayer-map scaffold screenshot
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 23:51:14 +00:00
doxa-maps
6862846aaa docs: trim README showcase to research-map (example) + prayer-map (flagship); remove other map screenshots
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 23:47:09 +00:00
doxa-maps
2a76a3a062 docs: README showcase — screenshots of the real map outputs (bundle · element · color code) at the bottom, explanation stays at top
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 23:42:26 +00:00
doxa-maps
9cc8053ec2 docs: direct-embed vs staging framing contract — serving-layer owns frame-ancestors (direct=* , staging=self); per-host recipes
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 23:38:31 +00:00
doxa-maps
ee3ebf8700 feat(spa): register flagship prayer-map (MapLibre) in the power app's Experimental section + PROFILES — visible-but-labeled per the experimental-profile law
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 22:07:54 +00:00
doxa-maps
692b25e1f5 docs: slide-deck outline (BLUF hand-off pitch) from the handoff distillate
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 22:05:23 +00:00
doxa-maps
de054ca078 feat: origin-derived share URL — defaults to the map page's own location so embeds are correct on any CDN/host (GitHub Pages, host public/, external), explicit path still wins
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 22:04:51 +00:00
doxa-maps
f8eb75d239 feat: prayer-map profile — flagship prayer embed, MapLibre default (token-free, no SPOF for partner embeds), no search bar, style-by-props, 3-tier prayer legend
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 22:02:06 +00:00
doxa-maps
6747af069c merge: map provider swap (mapbox|maplibre) + MapLibre pin fix — verified both engines render pins, MapLibre token-free on OpenFreeMap
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 21:55:46 +00:00
doxa-maps
988e61144c fix: guard circle-emissive-strength (Mapbox-Standard-only) behind engine check — MapLibre renders all pin layers; add isMapboxMap/emissivePaint helpers 2026-09-11 21:55:46 +00:00
doxa-maps
a7450520ee fix: resolve map provider from ?provider url param + carry it through staging iframes 2026-09-11 21:47:25 +00:00
doxa-maps
c7260faaa3 feat: map provider swap — mapbox|maplibre engine + hybrid geocoder + provider badge; staging title doxa-maps 2026-09-11 21:47:25 +00:00
doxa-maps
0f38a5448c docs: decoupled-twin pairing section in why.md; composable/embeddable-first terms in one-liner; experimental-vs-production profile convention
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 19:24:27 +00:00
doxa-maps
756bb32c9f docs: close retest gaps — engine-swap recipe (provider param), instances.json recipe + schema, adopt embed-example into router
Some checks are pending
Deploy to GitHub Pages / build (push) Waiting to run
Deploy to GitHub Pages / deploy (push) Blocked by required conditions
2026-09-11 18:50:31 +00:00
doxa-maps
19e1213e71 docs: skimmer pass — README to 1 diagram + 2 tables; how-to task index; docs/ router; CONTRIBUTING 384→61 (patterns+history → architecture) 2026-09-11 18:50:31 +00:00
doxa-maps
f0ceefa6db docs: fix cold-read gaps — embeddability design doc (generated pages + manifest), SPA recipe + PROFILES contract, copy-rename checklist 2026-09-11 18:50:31 +00:00
doxa-maps
dbf31018a3 docs: add why.md — problem-first 'map islands' concept page (Vite/Astro/Stencil pattern); wire into front doors + playground link 2026-09-11 18:50:31 +00:00
doxa-maps
d61e11cd0c docs: reference.md 493→237 (lean lookup); per-file catalog → architecture/file-map.md; architecture index; fix stale pointers 2026-09-11 18:50:31 +00:00
doxa-maps
35ac1c5607 docs: simplify all folder READMEs (what's here + graphic + link); migrate complex reference to docs/architecture/{data-sources,i18n,components,app-wrappers,poster-generation}.md 2026-09-11 18:50:31 +00:00
doxa-maps
92be1ca4ef docs: migrate color-strategy contract to docs/architecture; simple README+graphic; add shared-vs-app-profiles balance graphic 2026-09-11 18:50:31 +00:00
doxa-maps
81db8dbebb docs: add performance section (one inlined bundle > vue-from-CDN); simplify app-profiles + template-bundle READMEs 2026-09-11 18:50:31 +00:00
doxa-maps
6785dd826b docs: README leads with plain-words explainer — bundler, bundles, elements, lean/tree-shaken, embed anywhere, SPA, JAMstack hot-swap 2026-09-11 18:50:31 +00:00
doxa-maps
4012f8d691 docs: trim explanation to a short 'what it is'; deep architecture moved to private blog notes 2026-09-11 18:50:31 +00:00
doxa-maps
d311650c4a docs: simple README template for the embedded (in-host) copy 2026-09-11 18:50:31 +00:00
doxa-maps
d5ba21fa76 doxa-maps — portable bundler for embeddable JAMstack maps
Standalone repo that builds embeddable JAMstack map bundles (web components),
composes them into a lazy-loaded SPA via layouts/, and optionally wraps a
Capacitor Android/iOS app — one build, choose your output/CDN. Diátaxis docs.

History reset to a single clean commit; no PII, IPs, or internal terms.
2026-09-10 01:53:07 +00:00