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>
3.8 KiB
3.8 KiB
Changelog
Alle nennenswerten Änderungen an FLORIAN. Format nach Keep a Changelog, Versionierung nach Semantic Versioning.
Die Regeln dazu stehen in docs/VERSIONIERUNG.md.
[Unveröffentlicht]
Noch nichts. Nächster Schritt ist Phase 1 (Stammdatenverwaltung).
[0.1.0] — 2026-09-03
Phase 0: das Fundament. Ab hier steht ein lauffähiger Stack mit Mandantentrennung, Anmeldung, Dateiablage und lückenloser Protokollierung.
Hinzugefügt
Betrieb
docker-compose.ymlmit Traefik, App, Worker, PostgreSQL 17 + PostGIS, Redis, MinIO und Gotenberg.docker-compose.override.ymlfür die Entwicklung: ohne Traefik, mit Mailpit als SMTP-Auffangkorb und Adminer für den Blick in die Datenbank. Host-Ports bewusst abseits der Standardwerte (3100, 5442, 6389, 9010/9011), damit FLORIAN neben anderen lokalen Stacks laufen kann.- Mehrstufiges
docker/Dockerfile: eigener Benutzerflorian(UID 1001, kein root),tinials PID 1, Healthcheck gegen/api/health, Standalone-Build von Next.js. docker/entrypoint.shwendet ausstehende Migrationen an — nur im App-Container, nicht im Worker.docker/postgres/10-init-app-role.shlegt beim ersten Start die Rolleflorian_app(NOBYPASSRLS) samt Vorgabeprivilegien an..env.examplemit einem Kommentar zu jeder einzelnen Variable.
Datenmodell
- Prisma-Schema mit
Organisation,Person,Rolle,Berechtigung,RolleBerechtigung,PersonRolle,AusweisToken,AuditLog,Datei. FahrzeugundGeraetbereits schmal angelegt, damit der Seed eine realistische Wehr aufbauen kann. Phase 1 erweitert beide.- Migration
20260902000100_rls_policies: Row Level Security auf allen mandantenpflichtigen Tabellen, Funktionaktuelle_organisation(), Append-only-Trigger aufaudit_log. - Migration
20260902000200_audit_bereinigung:UPDATEaufaudit_logbleibt dauerhaft gesperrt,DELETEist nur im gekennzeichneten Aufbewahrungslauf möglich.
Anwendungskern
lib/env.ts— Zod-Validierung der gesamten Umgebung beim Start.lib/db.ts— getrennte Verbindungen für Anwendung (RLS aktiv) und System (RLS-frei),fuerOrganisation()als einziger Weg zu Fachdaten.lib/authz.ts— 9 Rollen, 38 Einzelrechte, zentrale Prüffunktionen.lib/storage.ts— MinIO, presignte Up- und Downloads, SHA-256-Prüfsumme.lib/audit.ts— Protokolleinträge mit Vorher/Nachher-Vergleich, entfernt Geheimnisse vor dem Schreiben.lib/auth.ts— Auth.js mit OIDC gegen authentik, lokalem Passwort-Login und Terminal-Anmeldung über PIN oder RFID.lib/warteschlange.tsundsrc/worker/— BullMQ-Gerüst mit den Auftragsarten für Fristen, Erinnerungen, PDF und Aufbewahrung.lib/integrations/— Mail, Telegram und LLM hinter abschaltbaren Schnittstellen.- tRPC v11 mit den Prozedurarten
oeffentlich,angemeldetundmitRecht(...).
Oberfläche
- Basis-Layout mit Seitenleiste, heller und dunkler Darstellung (Systemvorgabe als Standard) und durchgängig deutschen Texten.
- Anmeldeseite, die genau die eingerichteten Anmeldewege zeigt.
- Übersicht mit Kennzahlen und dem Sicherheitshinweis zur analogen Atemschutzüberwachung.
- Farbwelt in OKLCH mit festen Statusfarben für Gerätezustände.
Daten und Tests
- Seed mit einer vollständigen Beispielwehr: 15 Personen mit Rollen und Terminal-Ausweisen, 3 Fahrzeuge, 40 Geräte mit gemischten Prüffristen.
- Vitest: 32 Tests, darunter acht, die die Mandantentrennung gegen eine echte Datenbank prüfen.
- Playwright: 10 Tests über Desktop und Tablet.
npm run screenshotserzeugt die Bilder für die Anleitung.
Dokumentation
- README mit Schnellstart in sechs Zeilen.
- Anleitung, Roadmap, Aufwandsschätzung, Devlog und Versionierungsregeln.