Files
bvandeusenandClaude Opus 4.8 3e9b6095dd
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
m4: PWA install — manifest, icons, service worker
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
2026-07-21 08:25:41 -04:00

25 lines
918 B
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" role="img" aria-label="ThoughtSync">
<!-- Maskable variant: full-bleed background so platform masks (circle, squircle,
rounded-square) never clip the glyph. The graph sits inside the central 80%
safe zone. Same mark as icon.svg. -->
<rect width="512" height="512" fill="#F5C518"/>
<g stroke="#18181b" stroke-linecap="round" fill="none">
<g stroke-width="14" opacity="0.26">
<path d="M256 150 L166 336"/>
<path d="M166 336 L346 336"/>
<path d="M346 336 L256 150"/>
</g>
<g stroke-width="22">
<path d="M256 268 L256 150"/>
<path d="M256 268 L166 336"/>
<path d="M256 268 L346 336"/>
</g>
</g>
<g fill="#18181b">
<circle cx="256" cy="150" r="34"/>
<circle cx="166" cy="336" r="34"/>
<circle cx="346" cy="336" r="34"/>
<circle cx="256" cy="268" r="26"/>
</g>
</svg>