Phase 0: Fundament der Feuerwehr-Verwaltungsplattform

Legt den kompletten Unterbau an, auf dem die Fachmodule aufsetzen.

Betrieb:
- docker-compose.yml mit Traefik, App, Worker, PostgreSQL 17 + PostGIS,
  Redis, MinIO und Gotenberg; Entwicklungs-Override ohne Traefik, dafuer
  mit Mailpit und Adminer
- Mehrstufiges Dockerfile: eigener Benutzer, tini als PID 1, Healthcheck
- .env.example mit einem Kommentar zu jeder Variable

Mandantentrennung:
- Row Level Security auf allen mandantenpflichtigen Tabellen
- Zwei getrennte Datenbankverbindungen: florian_app mit aktiver RLS fuer
  die Anwendung, Eigentuemer-Zugang nur fuer Migration, Seed und Anmeldung
- fuerOrganisation() als einziger Weg zu Fachdaten

Nachvollziehbarkeit:
- AuditLog append-only per Trigger; UPDATE ist dauerhaft gesperrt, DELETE
  nur im gekennzeichneten Aufbewahrungslauf
- Geheimnisse werden vor dem Schreiben entfernt

Anmeldung:
- OIDC gegen ein extern betriebenes authentik, Rollen aus Gruppen nur als
  Vorbelegung beim ersten Login
- Lokaler E-Mail/Passwort-Login als Rueckfallweg
- Terminal per PIN und RFID mit zwei Schranken (Geraet, dann Person)

Weiteres:
- lib/authz.ts mit 9 Rollen und 38 Einzelrechten
- lib/storage.ts (MinIO), lib/audit.ts, lib/warteschlange.ts (BullMQ)
- Integrationen fuer Mail, Telegram und LLM hinter abschaltbaren Interfaces
- tRPC v11, Basis-Layout mit Seitenleiste und dunkler Darstellung
- Seed mit einer Beispielwehr: 16 Personen, 3 Fahrzeuge, 40 Geraete
- 32 Vitest-Tests (davon 8 gegen eine echte Datenbank), 10 Playwright-Tests
- README, Anleitung mit Screenshots, Roadmap, Aufwandsschaetzung, Devlog,
  Versionierungsregeln und Changelog

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Florian Wilde
2026-09-03 00:13:53 +02:00
co-authored by Claude Opus 5
commit 845942f36c
84 changed files with 21433 additions and 0 deletions
+23
View File
@@ -0,0 +1,23 @@
Lies CLAUDE.md. Erstelle Phase 0 des Projekts: das Fundament.
Liefere:
1. Monorepo-Struktur (Next.js App, prisma/, docker/, scripts/)
2. docker-compose.yml mit: traefik, app, worker, postgres (postgis/postgis:17),
redis, minio, gotenberg. Dazu docker-compose.override.yml für Entwicklung
und eine vollständige .env.example mit Kommentaren zu jeder Variable.
3. Dockerfile für die App (Multi-Stage, non-root User, Healthcheck).
4. Prisma-Schema mit den Basismodellen: Organisation, Person, Rolle,
Berechtigung, AusweisToken, AuditLog, Datei. Inklusive RLS-Policies als
SQL-Migration.
5. Auth: OIDC gegen authentik (Auth.js) plus lokaler E-Mail/Passwort-Fallback
für den Erststart, plus Terminal-Login per PIN/RFID-Token für den Kiosk.
6. lib/authz.ts mit Rollen: SUPERADMIN, KOMMANDANT, GERAETEWART,
ATEMSCHUTZGERAETEWART, KASSIER, SCHRIFTFUEHRER, AUSBILDER, MITGLIED, KIOSK.
7. lib/storage.ts (MinIO), lib/audit.ts, lib/db.ts (mit Mandanten-Kontext).
8. Basis-Layout mit shadcn/ui, deutschem UI-Text, Dark Mode, Seitenleiste.
9. Seed-Skript: eine Beispielwehr, 15 Personen, 3 Fahrzeuge, 40 Geräte.
10. Vitest- und Playwright-Setup mit je einem Beispieltest.
11. README mit Schnellstart in unter 10 Zeilen.
Erkläre am Ende kurz, wie ich den Stack hochfahre und mich anmelde.
Frage nach, bevor du Annahmen über meine authentik-Konfiguration triffst.