All checks were successful
Deploy baustelle-pwa / deploy (push) Has been skipped
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Baustelle PWA
Mobile Progressive Web App für die Baustellen-Doku — Foto-Upload, Sprachnotizen, Skizzen, offline-fähig. Spricht die REST-API des Dolibarr-Bericht-Moduls.
Stack
- Vanilla JavaScript — kein Build, keine Framework-Abhängigkeit
- Service Worker für App-Shell-Cache (Workbox-frei, eigene Implementierung)
- IndexedDB für JWT-Storage und Offline-Upload-Queue
- REST API des
bericht-Dolibarr-Moduls unter/custom/bericht/api/
Features
Aufträge
- ✅ Login mit Dolibarr-Credentials → JWT (7 Tage gültig)
- ✅ Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User)
- ✅ Toggle "Auch abgeschlossene" (Filter in localStorage persistiert)
- ✅ Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call)
Foto-Upload
- ✅ Foto-Aufnahme direkt aus der Kamera oder aus 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)
- ✅ Foto-Viewer mit Zoom + Swipe
- ✅ Foto-Skizze: Annotationen mit Pfeilen, Kreisen, Rechtecken, Text
Sprachnotizen
- ✅ Sprachaufnahme via MediaRecorder (webm)
- ✅ Whisper-Transkription (serverseitig, API-Aufruf)
Berichte
- ✅ Berichte pro Auftrag anzeigen
- ✅ Bericht erstellen mit Template-Auswahl
- ✅ Seiten umordnen per Drag&Drop
- ✅ Seite löschen, Notiz bearbeiten
- ✅ Touch-Unterschrift abnehmen (mit GPS + Name)
- ✅ Bericht finalisieren → PDF-Vorschau
- ✅ PDF-Download
Materialliste
- ✅ Material pro Auftrag erfassen (Label, Menge, Einheit, Notiz)
- ✅ Material löschen
PWA
- ✅ Service Worker für Offline-Start
- ✅ Installierbar als PWA (Home-Screen-Icon)
- ✅ Web Share Target API (Fotos aus anderer App teilen)
- ✅ Nativer Android-Share-Sheet für Fotos, PDFs und Dokumente (
navigator.share) — direkt an WhatsApp / Signal / Mail - ✅ Mehrfachauswahl in Foto- und Dokument-Liste mit Batch-Teilen
- ✅ Android-Hardware-Back-Button schließt Modale/Ansichten sauber (History-Modal-Stack), bricht Mehrfachauswahl ab statt App zu verlassen
- ✅ „Nochmal drücken zum Beenden"-Toast auf Top-Level-Routen
- ✅ PIN-Schutz (optional)
Geplant
- Push-Notifications für neue Aufträge
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/.
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
├── lib/
│ ├── idb.js IndexedDB-Wrapper
│ ├── api.js REST-API-Client (JWT)
│ ├── offline.js Offline-Queue + Sync
│ └── router.js Hash-Router
└── icons/
├── icon-192.png
└── icon-512.png
API
Die App spricht die Bericht-API unter /custom/bericht/api/:
Auth
POST /auth.php— Login mit Dolibarr-Credentials → JWT
Aufträge
GET /orders.php— Aufträge des Users (Filter:?open=1,?q=suche)GET /orders.php?id=X— Auftrag-Detail inkl. verknüpfte BerichteGET /orders.php?id=X&action=photos— Anhang-ListePOST /orders.php?id=X&action=upload_photo— Foto-Upload (multipart)
Kunden
GET /customers.php— Kundenliste (Filter:?q=suche)GET /customers.php?id=X— Kundendetail
Berichte
GET /reports.php— Alle Berichte des UsersGET /reports.php?id=X— Bericht-Detail mit SeitenPOST /reports.php?action=create— Neuen Bericht anlegenPOST /reports.php?id=X&action=finalize— Bericht finalisierenDELETE /reports.php?id=X— Bericht löschen
Seiten
DELETE /pages.php?id=X— Seite löschenPOST /pages.php?id=X— Seite aktualisieren (note, rotation)POST /pages.php?action=signature&bericht_id=X— Unterschrift hinzufügenPOST /pages.php?action=reorder— Seiten umordnen
Material
GET /materials.php?element_type=X&element_id=Y— MateriallistePOST /materials.php?element_type=X&element_id=Y— Material hinzufügenPOST /materials.php?id=X&delete=1— Material löschen
Medien
GET /photo.php?relpath=X&jwt=Y— Foto abrufen (mit Thumbnail:&size=thumb)POST /delete_photo.php— Foto löschenPOST /voice.php?order_id=X— Sprachnotiz hochladenPOST /transcribe.php— Whisper-Transkription anfordernGET /pdf.php?id=X&jwt=Y— PDF abrufen (Final oder Preview)
Templates
GET /templates.php— Bericht-VorlagenGET /odt_templates.php— ODT-Deckblatt-Vorlagen
Lizenz
GPL v3+