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.
39 lines
2.8 KiB
JSON
39 lines
2.8 KiB
JSON
{
|
|
"appId": "life.doxa.maps",
|
|
"appName": "Doxa Maps",
|
|
"//webDir": [
|
|
"webDir = ./public \u2014 THE CDN WEB-ROOT. It is a POINTER, NOT A COPY.",
|
|
"public/ is the single SERVED SURFACE, so the bundler IS the CDN: it serves its own bundles AND",
|
|
"non-bundle assets (brand/logos, vendored libs, fonts) that belong to no single bundle.",
|
|
" public/doxa-maps/<bundle>/ built bundles (vite outDir app/ + copied here by the build config's paths)",
|
|
" public/assets/brand/ logos and brand imagery",
|
|
" public/assets/vendor/ self-hosted libs (e.g. mapbox-gl) \u2014 no CDN, per the no-CDN rule",
|
|
" public/assets/fonts/ Bebas Neue / Poppins (both SIL OFL, so self-hostable)",
|
|
"ONE build, THREE consumers, all reading THIS root:",
|
|
" 1. Railway / CDN \u2014 serve public/ statically; partner sites embed from stable URLs",
|
|
" 2. Capacitor \u2014 this webDir; `cap sync` copies public/ into capacitor/android/app/src/main/assets/public/",
|
|
" 3. local staging \u2014 `bun run serve` (public/ on :4173)",
|
|
"NOTE the drop-portability gate still governs what goes INSIDE a bundle: bundle-internal refs must stay",
|
|
"RELATIVE. public/ is the HOST root, which is a different layer \u2014 putting shared assets here does not",
|
|
"make a bundle root-relative, so the gate stays green.",
|
|
"\u26a0\ufe0f SOFT FAILURE: a wrong webDir yields an EMPTY assets/public and a BLANK WHITE SCREEN at launch, not an",
|
|
"error. After every sync, verify capacitor/android/app/src/main/assets/public/index.html exists (`bun run cap:verify`)."
|
|
],
|
|
"webDir": "public",
|
|
"server": {
|
|
"//": [
|
|
"Capacitor defaults are deliberately kept: iosScheme 'capacitor', androidScheme 'https', hostname",
|
|
"'localhost'. Do NOT set a custom scheme \u2014 Capacitor docs warn that as of WebView 117 custom schemes",
|
|
"cannot change the URL path and can break routing. Do NOT set server.url either; that is documented as",
|
|
"live-reload/dev only, not production.",
|
|
"CONSEQUENCE FOR US: the app origin is https://localhost, so the doxa.life token endpoint (tokenUrl) must",
|
|
"send CORS headers permitting that origin. This is the single most likely runtime surprise, and the fix is",
|
|
"a response header on doxa.life \u2014 not a change here."
|
|
],
|
|
"androidScheme": "https"
|
|
},
|
|
"android": {
|
|
"//": "Native project lives in ./capacitor/android and is COMMITTED \u2014 `cap add` scaffolds it ONCE, then it is hand-edited source (manifest, icons, versionCode). It sits under capacitor/ rather than app/ because app/ is the BUNDLE OUTPUT tree: this repo emits several kinds of product, and Capacitor is one facet of them, not the whole. Only app/src/main/assets/public/ is generated and gitignored. An iOS project would join it at capacitor/ios (ios.path), scaffolded on a Mac.",
|
|
"path": "capacitor/android"
|
|
}
|
|
}
|