feat: Als PWA installierbar — Manifest, Offline-Worker (network-first), Dateihandling (D73)

Manifest mit Icons aus der Marke und Standalone-Fenster; ein bewusst dummer
Service Worker beantwortet nur die App-Navigation network-first und hält die
zuletzt gesehene Fassung für den Offline-Fall — die Update-Prüfung (D45)
bleibt dadurch unverändert wahr, der skipWaiting-Lebenszyklus entfällt. Die
installierte App registriert sich für .werkbaum-Dateien (file_handlers +
launchQueue -> adoptFile). Beide Deploy-Wege kopieren die App-Hülle mit;
.htaccess liefert .webmanifest mit MIME-Typ aus.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
mhoennig
2026-08-25 15:03:22 +02:00
co-authored by Claude Fable 5
parent f6785e3138
commit 19053eba1d
14 changed files with 251 additions and 17 deletions
+13
View File
@@ -554,6 +554,19 @@ verworfene Elemente. Quelle sind ES-Module unter `src/`; `index.html` ist der
Hash-Rückfall, der Marker-Pfad ist nur zu prüfen, wenn man einen echten
`commit/<sha>` in `index.html` einspritzt (danach zurücknehmen!) und
`window.fetch` überschreibt.
- **PWA (D73):** `public/sw.js` fasst NUR die Navigation zur App-Wurzel an
und beantwortet sie **network-first** — der Cache ist reiner
Offline-Rückfall. Wer daraus cache-first macht, bricht die Update-Prüfung
(D45): deren `fetch()` läuft nur deshalb ans echte Netz, und „Jetzt laden"
bekommt nur deshalb die frische Fassung. Keine Registrierung im Dev-Server
(`!import.meta.env.DEV` — sonst cacht der Worker die HMR-Seite). Manifest,
Icons und `sw.js` sind public/-Assets neben der einen Datei; **jedes neue
public/-Asset muss in BEIDE Deploy-Wege** (pages.yml und deploy-prod.sh
stellen die Site je von Hand zusammen) und ggf. in `scripts/prod.htaccess`
(Apache kennt `.webmanifest` nicht, D43-Falle). Der `launchQueue`-Empfänger
(Dateidoppelklick der installierten App) reicht Handles an `adoptFile()`
(D72) weiter — Installieren/Doppelklick sind nur auf echter Hardware
prüfbar.
- **Neuigkeiten (D58):** `NEWS` kommt aus dem virtuellen Modul
`virtual:werkbaum-news` (Vite-Plugin in `vite.config.js`), gefüllt zur
**Bauzeit** aus `docs/CHANGELOG.md` (die Notizen) und der git-Historie des