diff --git a/CHANGELOG.md b/CHANGELOG.md index 005ebb5..09fac63 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/package-lock.json b/package-lock.json index 88a81e1..dc57df9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index fb0694d..4fce37d 100644 --- a/package.json +++ b/package.json @@ -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",