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 |
||
|---|---|---|
| .. | ||
| app-wrapper-material | ||
| pane-wrapper | ||
| README.md | ||
layouts/ — app wrappers
Each folder here is an app wrapper: a host shell that composes doxa-maps app-profiles (the independently-built custom elements) into one application.
layouts/<wrapper>/ ← the HOST page (not a bundle)
┌──────────┬──────────────────────────────┐
│ sidebar │ mounts an app-profile here │
│ (nav.js) │ ┌──────────────┐ │
│ ├ item │ │ <doxa-map> │ ← a │
│ ├ section│ │ (a bundle) │ micro- │
│ └ folder │ └──────────────┘ frontend │
└──────────┴──────────────────────────────┘
- app-profile = a self-contained custom element (the micro-frontend). app wrapper = the host that mounts them and provides nav/chrome. A wrapper is a host page, not a bundle-in-a-bundle.
- Wrappers today:
app-wrapper-material/,pane-wrapper/. - Icons are inline SVG only (no CDN) — an F-Droid/offline hard requirement.
Sidebar contract, target filtering, sidebar modes, staging: ../docs/architecture/app-wrappers.md.