library/components/hints/PinHint.vue — a tasteful pill ('Tap a glowing dot — meet
a people group') that teaches the one gesture behind every conversion: tap a pin
-> detail card -> Pray (utm-attributed). Self-gates on a real map canvas in the
shadow root (lists/tables never see it), shows once per session, dismisses on
first map touch / x / 14s, honors prefers-reduced-motion, dark-aware. Default ON;
opt-out profile-config pinHint:false; label override pinHintLabel. Wired in
ProfileLoader; visually verified live.
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
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).
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.