Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
52 lines
2.7 KiB
Markdown
52 lines
2.7 KiB
Markdown
# Änderungen
|
||
|
||
Alle nennenswerten Änderungen an diesem Projekt stehen hier.
|
||
Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
|
||
die Versionierung [Semantic Versioning](https://semver.org/lang/de/).
|
||
|
||
## [Unveröffentlicht]
|
||
|
||
## [0.1.0] – 2026-09-10
|
||
|
||
### Hinzugefügt
|
||
|
||
- Projektgerüst mit Next 16 (App Router, `output: "standalone"`), React 19,
|
||
TypeScript strict, Tailwind 4 und shadcn-Primitiven.
|
||
- `npm run pruefen` bündelt Prettier, ESLint, `tsc --noEmit`, Vitest und
|
||
ShellCheck. ShellCheck läuft über das Docker-Abbild, wenn es lokal fehlt.
|
||
- Datenmodell für Benutzer mit Rolle, OIDC-Konten, Passkeys, Bereiche und
|
||
Audit-Einträge; PostgreSQL 16 über Prisma 7 mit pg-Treiberadapter.
|
||
- Anmeldung über einen generischen OIDC-Anbieter, über Passkeys
|
||
(SimpleWebAuthn) und wahlweise über E-Mail und Passwort.
|
||
- Rollen `BENUTZER` und `ADMIN`. Jede schreibende Aktion prüft die Rolle
|
||
serverseitig in der Seite **und** noch einmal in der Server Action.
|
||
- Audit-Protokoll für jede schreibende Aktion, mit Protokollseite für die
|
||
Verwaltung. Details werden vor dem Speichern gesäubert.
|
||
- Instanzsteuerung über `INSTANZ=firma|daheim`. Was eine Instanz nicht darf,
|
||
liefert dort 404 und lädt seine Konfiguration gar nicht erst.
|
||
- Bereiche mit Farbe, Arbeitsfenster und Tageskapazität je Wochentag.
|
||
- Zeitrechnung durchgehend in Europe/Berlin, mit Tagesgrenzen, Wochenbeginn
|
||
am Montag und deutschen Anzeigeformaten.
|
||
- `/api/health` mit Status, Version, Instanz und Erreichbarkeit der Datenbank.
|
||
- Hell und Dunkel, Navigation mit Rollenfilter, Oberfläche auf Deutsch.
|
||
- Dockerfile in drei Stufen und Compose-Stapel mit eigenem Migrationsdienst.
|
||
- `backup.sh` (pg_dump im Custom-Format, `.env` und Uploads),
|
||
`update.sh` (mit Rückrollpfad), `scripts/release.sh` und `scripts/zeit.sh`.
|
||
- Tests: Unit mit Vitest, Integrationstest und Migrationstest gegen eine
|
||
echte Datenbank, E2E-Rauchtest mit Playwright.
|
||
- `npm run screenshots` nimmt die Handbuchbilder in einer Wegwerf-Instanz mit
|
||
ausschließlich erfundenen Daten auf.
|
||
- README, Schnellstart, Handbuch, ROADMAP und DEVLOG.
|
||
|
||
### Sicherheit
|
||
|
||
- Anmeldung, Passwort und Passkey antworten bei Fehlschlag immer gleich,
|
||
damit sich nicht abfragen lässt, wer ein Konto hat.
|
||
- Sitzungen als JWT, aber Rolle und Sperrstatus werden bei jeder Anfrage
|
||
frisch aus der Datenbank gelesen — eine Sperre wirkt sofort.
|
||
- Die WebAuthn-Herausforderung wird nach einem Versuch verworfen, gleich ob
|
||
er geglückt ist.
|
||
- Der Demo-Seed verweigert den Dienst ohne `DEMO_MODUS=true`.
|
||
- `allowDangerousEmailAccountLinking` ist bewusst aktiv: je Instanz gibt es
|
||
genau einen vertrauenswürdigen OIDC-Anbieter, der die Adresse selbst prüft.
|