m4: PWA install — manifest, icons, service worker
CI & Build / Python lint (push) Successful in 3s
CI & Build / TypeScript typecheck (push) Successful in 5s
CI & Build / Python tests (push) Successful in 8s
CI & Build / Build & push image (push) Successful in 31s

Make ThoughtSync installable ("Add to Home Screen") without going
offline-first (the Android app is the real offline client, M5):

- web app manifest (name, icons incl. maskable + SVG, standalone, theme)
- generated PNG icon set + apple-touch-icon + favicon, from committed
  SVG sources (a linked-thoughts constellation on the brand tile)
- minimal service worker: installable shell only — caches just an
  offline fallback page, never the app shell / hashed assets / API, so
  data stays fresh and deploys never serve a stale shell
- register the SW in main.ts (progressive enhancement; failures ignored)
- index.html: manifest/icon links, apple-mobile meta, description
- backend: register the .webmanifest MIME type so it serves as
  application/manifest+json
- README: note that install needs a secure context (HTTPS/localhost)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FRgehjoz7Yv8LkUfADxACm
This commit is contained in:
2026-07-21 08:25:41 -04:00
co-authored by Claude Opus 4.8
parent b7b37e5e1a
commit 3e9b6095dd
14 changed files with 246 additions and 0 deletions
+9
View File
@@ -8,3 +8,12 @@ const app = createApp(App);
app.use(createPinia()); // before router: the nav guard reads the session store
app.use(router);
app.mount("#app");
// Register the service worker so the app is installable (PWA). It's a
// progressive enhancement — installability only, not offline-first (see
// public/sw.js) — so failures are non-fatal and intentionally ignored.
if ("serviceWorker" in navigator) {
window.addEventListener("load", () => {
void navigator.serviceWorker.register("/sw.js").catch(() => {});
});
}