From 3608fef216156f47111faaff0497404bb5a27775 Mon Sep 17 00:00:00 2001 From: Eddy Date: Fri, 3 Jul 2026 11:33:23 +0200 Subject: [PATCH] Doku: README auf Live-Kamera + Persist-First, korrekter Deploy-Pfad/URL, Struktur Co-Authored-By: Claude Opus 4.8 (1M context) --- README.md | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index d10f346..1086363 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,12 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprachnotiz - ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call) **Foto-Upload** -- ✅ Foto-Aufnahme direkt aus der Kamera oder aus Galerie +- ✅ Live-Kamera-Modal (getUserMedia): bleibt für Serien-Aufnahmen offen — Auslöser + Filmstreifen mit Upload-Status je Foto (💾 gesichert → ⏳ lädt hoch → ✓ fertig), Front-/Rückkamera-Umschaltung, Fehlschuss löschbar +- ✅ Alternativ Aufnahme aus der Galerie - ✅ Clientseitige Bild-Verkleinerung auf 2000px (JPEG q=0.85) -- ✅ Offline-Queue: bei fehlgeschlagenem Upload landet das Foto in IndexedDB -- ✅ Auto-Sync wenn wieder online (mit Status-Badge) +- ✅ **Persist-First / Datenverlust-Schutz**: jedes Foto wird beim Auslösen ZUERST in IndexedDB gesichert, Upload erst danach; Queue-Item wird nur nach bestätigtem Upload (HTTP 2xx mit gültigem `relpath`) gelöscht — überlebt fehlendes/schwaches Netz, hängende Uploads (45s-Timeout) und App-Kill. Erkennt 2xx-HTML (abgelaufene Session/Proxy-Loginseite) als Fehler statt als Erfolg +- ✅ Auto-Sync bei "online", periodisch (15s) und bei App-Fokus; Status-Badge (🟢 alles gesichert / 🟡 lädt hoch / 🔴 offline / ⚠️ fehlgeschlagen) +- ✅ Recovery: Tipp auf das Status-Badge öffnet die Warteschlange → erneut senden / teilen; Warnung beim Schließen mit noch ungesicherten Fotos - ✅ Foto-Viewer mit Zoom + Swipe - ✅ Foto-Skizze: Annotationen mit Pfeilen, Kreisen, Rechtecken, Text @@ -69,22 +71,25 @@ Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprachnotiz ## Hosting -Wird bei jedem Push nach `/srv/http/baustelle/` (lokal) bzw. `/mnt/appdata/firma/dolibarr-202509/baustelle/` (prod) deployt. Apache-Alias unter `https://awl.data-it-solution.de/baustelle/`. +Deploy per Forgejo-Pipeline (Commit-Tag `[deploy]`) nach `/mnt/appdata/firma/dolibarr-202509/modules/baustelle/`. Erreichbar unter `https://awl.data-it-solution.de/custom/baustelle/`. Cache-Busting automatisch via `filemtime()` in `index.php` (`?v=` an JS/CSS) — kein manuelles Versions-Hochzählen nötig, die PWA aktualisiert sich beim nächsten Laden. ## Verzeichnis-Struktur ``` baustelle-pwa/ -├── index.html App-Shell -├── manifest.webmanifest PWA Manifest -├── sw.js Service Worker -├── app.js Hauptlogik (Routes, Views) -├── app.css Mobile-first Styling +├── index.php App-Shell (Cache-Busting via filemtime → ?v=) +├── share.html Web-Share-Target-Empfänger +├── manifest.webmanifest PWA Manifest +├── sw.js Service Worker (Network-First, API pass-through) +├── app.js Hauptlogik (Routes, Views) +├── app.css Mobile-first Styling ├── lib/ -│ ├── idb.js IndexedDB-Wrapper -│ ├── api.js REST-API-Client (JWT) -│ ├── offline.js Offline-Queue + Sync -│ └── router.js Hash-Router +│ ├── idb.js IndexedDB-Wrapper (JWT + Foto-Queue) +│ ├── api.js REST-API-Client (JWT, JSON-Guard, Timeout) +│ ├── offline.js Offline-Queue + Sync (Persist-First) +│ ├── router.js Hash-Router +│ ├── pdf.min.js PDF.js (Lieferschein-Vorschau) +│ └── pdf.worker.min.js PDF.js Worker └── icons/ ├── icon-192.png └── icon-512.png