Dieses Repository liefert ein umsetzbares V1-Grundgerüst für die Besichtigungs-/Inventar-App. Es enthält eine Next.js-App (PWA), Prisma-Schema, Seeds, Docker Compose, sowie eine Offline-Strategie mit IndexedDB + Outbox-Queue.
.env.examplenach.envkopieren und anpassen.- Abhängigkeiten installieren:
npm install
- Datenbank starten (z.B. via Docker):
docker compose up -d postgres minio
- Migration + Seed:
npx prisma migrate dev --name init npm run prisma:seed
- App starten:
npm run dev
docker compose up --buildDie App läuft unter http://<server-ip>:3000.
- App Shell Cache: Service Worker cached die wichtigsten Routen (PWA).
- IndexedDB (Dexie): Offline-Entitäten (Projekte, Räume, Inventar, Fotos, Outbox).
- Outbox-Queue: Änderungen + Foto-Uploads werden lokal als
pendinggespeichert. - Sync: Bei Online-Status werden Outbox-Einträge sequenziell an den Server übertragen.
- Konflikte: Default V1 = Last-Write-Wins pro Feld.
- UI: Sync-Statusbar zeigt Online/Offline, Pending-Count und letzten Sync-Zeitpunkt.
Folgende Seeds werden initial angelegt:
- Attributgruppen + Werte
- Foto-Typen
- Raumtypen
- Einzelobjekt-Kategorien inkl. kritisch-Flag
- Möbelkatalog (inkl. Decimal-Mengen für Akten/Regal lfm)
- Beispielprojekt mit Quelle/Ziel-Struktur, Varianten, Einzelobjekt
Admin-Login (Seed)
- Benutzer:
admin@example.local - Passwort:
admin123
- Postgres: Regelmäßige Dumps (
pg_dump) in ein gesichertes Backup-Verzeichnis. - MinIO:
mc mirrorauf ein externes Backup-Target. - Empfehlung: tägliche inkrementelle Backups + wöchentliche Vollbackups.
- Offline ist online-first mit IndexedDB + Outbox (bei Sync automatische Übertragung).
- Konflikte werden per Last-Write-Wins auf Feldebene gelöst.
- Export-Generierung erfolgt serverseitig nach erfolgreichem Sync.
- Zugriff ist intern via VPN, daher HTTP ohne TLS akzeptiert.
- Mindestvalidierung für kritische Einzelobjekte: Gewicht oder Maße erforderlich (wird serverseitig geprüft).
- Prisma dient als ORM/Migration.
- Fotos werden in MinIO abgelegt.
- Auth erfolgt über Benutzer/Passwort + Rollenprüfung.