Version 1.5.0

Vollständig verifiziert: natives npm run dev auf frisch geleerter
lokaler Postgres-DB (Migration + Admin-Bootstrap + ZUGANGSDATEN.md,
Login, Essenszeiten/Gerichte/Wochenplan/Kennzeichnung/Vorschläge-CRUD,
Konto-Verwaltung inkl. serverseitiger Passkey-Absicherung,
Branding-Upload/-Löschung, Admin-Benutzerverwaltung mit
rollenbasierter Zugriffskontrolle, Neustart-Idempotenz) sowie über
docker compose --build auf eigenem Volume (Migration/Bootstrap im
Container-Entrypoint, Bind-Mount für ZUGANGSDATEN.md, Login).
This commit is contained in:
2026-07-18 11:21:19 +02:00
parent b512093a7e
commit c60f481aec
3 changed files with 46 additions and 6 deletions
+40
View File
@@ -4,6 +4,46 @@ Alle nennenswerten Änderungen an diesem Projekt werden hier dokumentiert.
Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
Versionierung nach [Semantic Versioning](https://semver.org/lang/de/).
## [1.5.0] – 2026-07-18 (Branch `feature/v1.5`, noch nicht gemergt)
### Geändert
- **Supabase vollständig entfernt** – die App läuft jetzt komplett
selbst gehostet, einzige externe Abhängigkeit bleibt optional DeepL.
- Datenbank: selbst gehostetes PostgreSQL statt Supabase-Cloud-Postgres.
Schema in `db/migrations/*.sql`, wird beim Start automatisch und
idempotent angewendet (`db/migrate.mjs`).
- Anmeldung: eigene Session-Verwaltung (opake, in der DB gespeicherte
Tokens, `httpOnly`/`sameSite=lax`-Cookie) statt Supabase Auth.
Passwörter werden mit Node-eigenem `crypto.scrypt` gehasht (keine
neue Abhängigkeit).
- Passkeys: `@simplewebauthn` ersetzt Supabase's bisher experimentelles
WebAuthn-API. Die RP-Domain wird direkt aus `APP_URL` abgeleitet –
kein externer Konfigurationsschritt mehr nötig.
- Logo/Favicon: lokale Dateiablage (Docker-Volume) statt
Supabase-Storage-Bucket, ausgeliefert über `/branding/[filename]`.
- Autorisierung (öffentlich lesbar / Kantinen-Team schreibt / nur
Admin für Einstellungen & Benutzer) läuft jetzt in den API-Routen
statt über Postgres-Row-Level-Security.
- E-Mail-Änderung im eigenen Konto läuft direkt nach
Passwort-Bestätigung statt über eine Supabase-Bestätigungsmail
(kein SMTP-Server vorhanden).
- Datenbank startet beim allerersten Deployment leer; beim ersten Start
wird automatisch genau ein Admin-Benutzer mit zufällig generiertem
Passwort angelegt, die Zugangsdaten landen in `ZUGANGSDATEN.md`.
### Behoben
- „Mindestens 1 Passkey nötig, um die Passwort-Anmeldung zu
deaktivieren" wurde bisher nur clientseitig geprüft; ein manuell
gebauter Request hätte die Passwort-Anmeldung auch ohne Passkey
deaktivieren können. Jetzt zusätzlich serverseitig erzwungen.
### Hinweis für bestehende Docker-Installationen
Das Docker-Volume `pgdata` diente bisher nur als Lese-Kopie/Backup und
wird mit v1.5 zur primären Datenbank. Es enthält noch das alte
Supabase-Mirror-Schema und muss vor dem Upgrade entfernt werden
(`docker compose down -v`, danach `docker compose up -d --build`), damit
die neuen Migrationen auf einer leeren Datenbank laufen.
## [1.4.0] – 2026-07-18
### Hinzugefügt
+2 -2
View File
@@ -1,12 +1,12 @@
{
"name": "canteen-menu",
"version": "1.4.0",
"version": "1.5.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "canteen-menu",
"version": "1.4.0",
"version": "1.5.0",
"dependencies": {
"@simplewebauthn/browser": "^13.3.0",
"@simplewebauthn/server": "^13.3.2",
+4 -4
View File
@@ -1,15 +1,15 @@
{
"name": "canteen-menu",
"version": "1.4.0",
"version": "1.5.0",
"private": true,
"scripts": {
"predev": "node db/migrate.mjs && node scripts/bootstrap-admin.mjs",
"predev": "node --env-file-if-exists=.env.local db/migrate.mjs && node --env-file-if-exists=.env.local scripts/bootstrap-admin.mjs",
"dev": "next dev -H 0.0.0.0",
"build": "next build",
"prestart": "node db/migrate.mjs && node scripts/bootstrap-admin.mjs",
"prestart": "node --env-file-if-exists=.env.local db/migrate.mjs && node --env-file-if-exists=.env.local scripts/bootstrap-admin.mjs",
"start": "next start -H 0.0.0.0",
"lint": "eslint",
"db:migrate": "node db/migrate.mjs"
"db:migrate": "node --env-file-if-exists=.env.local db/migrate.mjs"
},
"dependencies": {
"@simplewebauthn/browser": "^13.3.0",