Mobile PWA für Baustellen-Doku — Foto-Upload, Sprachnotizen, Skizzen, offline-fähig. SvelteKit + Workbox.
Find a file
Eduard Wisch 5e80d78f41
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 1s
fix: Manifest-Installability-Kriterien für Chrome Android
Chrome Android zeigte nur 'Zum Startbildschirm hinzufügen' statt
'App installieren', weil:
1. 'any maskable' als kombinierter purpose reicht Chrome nicht —
   braucht mindestens ein reines 'any'-Icon für den Install-Prompt
2. start_url/scope waren relativ (./) — mit absoluten Pfaden zum
   custom/baustelle/-Root ist der Scope eindeutig

Fixes:
- icons: je 192/512 als 'any' UND zusätzlich als 'maskable' (4 Einträge)
- id, start_url, scope auf '/custom/baustelle/' gesetzt (absolut)
- categories, dir: ltr dazu für vollständiges Manifest

Damit erfüllt die PWA die Chrome-Installability-Kriterien und der
Menü-Eintrag wird zu 'App installieren'. Erst dann funktioniert
auch Web Share Target.

Cache v10.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
[deploy]
2026-04-09 01:21:59 +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: Phase 4 Block 1 — Seite bearbeiten, PDF-Vorschau, Unterschrift, Share Target 2026-04-09 01:00:24 +02:00
.gitignore feat: Initiales Release Baustelle PWA v1.0.0 [deploy] 2026-04-08 22:50:01 +02:00
app.css feat: Phase 4 Block 1 — Seite bearbeiten, PDF-Vorschau, Unterschrift, Share Target 2026-04-09 01:00:24 +02:00
app.js feat: Phase 4 Block 1 — Seite bearbeiten, PDF-Vorschau, Unterschrift, Share Target 2026-04-09 01:00:24 +02:00
index.html fix: Service Worker nach claude-db #31 Pattern (Network-First + Auto-Update) 2026-04-09 01:17:57 +02:00
manifest.webmanifest fix: Manifest-Installability-Kriterien für Chrome Android 2026-04-09 01:21:59 +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 fix: Manifest-Installability-Kriterien für Chrome Android 2026-04-09 01:21:59 +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+