Mobile PWA für Baustellen-Doku — Foto-Upload, Sprachnotizen, Skizzen, offline-fähig. SvelteKit + Workbox.
Find a file
Eduard Wisch 3dad52367c
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
feat: PWA Block D — Mess-Werkzeug, Materialliste, Heute-Tab, ntfy-Push
5.4 Mess-Werkzeug mit Skala-Kalibrierung:
- Zwei neue Sketch-Tools: 📏⚙ Kalibrieren + 📏 Messen
- Kalibrieren: 2 Punkte ziehen → reale Länge eingeben (cm/m/mm)
- Messen: 2 Punkte ziehen → Live-Distanz-Label mit berechnetem Wert
- pxPerUnit + unit werden im State gehalten, Linie im Canvas gezeichnet

5.9 Materialliste pro Auftrag:
- 📦 Materialliste-Button im Auftrags-Detail
- Modal: Bezeichnung + Menge + Einheit (Stk/m/m²/kg/l/Set/Pa/h) + Notiz
- Live-Liste mit Löschen pro Eintrag

5.8 Tages-Baustellen-Map:
- Neuer Bottom-Nav-Tab ☀️ Heute (ganz links)
- Filtert Aufträge nach heutigem Datum
- Route-Button öffnet Google Maps mit allen heutigen Adressen als Waypoints
- Darunter noch die offenen Aufträge als Backup

4.d Benachrichtigungen via ntfy (statt VAPID):
- Settings → Benachrichtigungen: ntfy-Server + Topic
- EventSource auf /topic/sse → native Browser-Notifications
- Test-Nachricht-Button sendet POST an das Topic
- Auto-Reconnect bei Fehlern nach 10s
- Auto-Start beim Boot wenn Topic gesetzt und Permission granted

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 09:18:31 +02:00
.forgejo/workflows fix: Deploy nach modules/baustelle/ statt baustelle/ 2026-04-08 22:56:42 +02:00
icons feat: Neues PWA-Logo — Klemmbrett mit Schraubenschlüssel (SVG + PNG) 2026-04-09 01:12:47 +02:00
lib feat: PWA Block D — Mess-Werkzeug, Materialliste, Heute-Tab, ntfy-Push 2026-04-09 09:18:31 +02:00
.gitignore feat: Initiales Release Baustelle PWA v1.0.0 [deploy] 2026-04-08 22:50:01 +02:00
app.css feat: Block C — Seiten-Titel + api.request exposed 2026-04-09 09:10:57 +02:00
app.js feat: PWA Block D — Mess-Werkzeug, Materialliste, Heute-Tab, ntfy-Push 2026-04-09 09:18:31 +02:00
index.php feat: PWA Block D — Mess-Werkzeug, Materialliste, Heute-Tab, ntfy-Push 2026-04-09 09:18:31 +02:00
manifest.webmanifest feat: PWA Cache-Busting via filemtime (claude-db #201) — kein manuelles Hochzählen mehr 2026-04-09 01:26:26 +02:00
README.md feat: Initiales Release Baustelle PWA v1.0.0 [deploy] 2026-04-08 22:50:01 +02:00
share.html feat: Phase 4 Block 1 — Seite bearbeiten, PDF-Vorschau, Unterschrift, Share Target 2026-04-09 01:00:24 +02:00
sw.js feat: PWA Cache-Busting via filemtime (claude-db #201) — kein manuelles Hochzählen mehr 2026-04-09 01:26:26 +02:00

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 (MVP)

  • Login mit Dolibarr-Credentials → JWT (7 Tage gültig)
  • Auftragsliste mit Suche, gefiltert auf eigene Aufträge (Multi-User)
  • Auftragsdetail mit Kunde, Adresse, Telefon (Click-to-Call)
  • 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)
  • Service Worker für Offline-Start
  • Installierbar als PWA (Home-Screen-Icon)

Geplant (Phase 4)

  • Sprachnotizen via MediaRecorder
  • Touch-Skizzen-Editor für Bilder
  • Schnell-Bericht direkt in der PWA erstellen
  • Touch-Unterschrift abnehmen
  • PIN-Schutz / WebAuthn
  • Push-Notifications für neue Aufträge
  • Web Share Target API

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 ausschließlich die Bericht-API:

  • POST /api/auth.php — Login mit Dolibarr-Credentials
  • GET /api/orders.php — Aufträge des Users
  • GET /api/orders.php?id=X — Auftrag-Detail
  • GET /api/orders.php?id=X&action=photos — Anhang-Liste
  • POST /api/orders.php?id=X&action=upload_photo — Foto-Upload
  • GET /api/reports.php?id=X — Bericht-Detail

Lizenz

GPL v3+