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:
@@ -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/),
|
Format angelehnt an [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
|
||||||
Versionierung nach [Semantic Versioning](https://semver.org/lang/de/).
|
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
|
## [1.4.0] – 2026-07-18
|
||||||
|
|
||||||
### Hinzugefügt
|
### Hinzugefügt
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.4.0",
|
"version": "1.5.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.4.0",
|
"version": "1.5.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@simplewebauthn/browser": "^13.3.0",
|
"@simplewebauthn/browser": "^13.3.0",
|
||||||
"@simplewebauthn/server": "^13.3.2",
|
"@simplewebauthn/server": "^13.3.2",
|
||||||
|
|||||||
+4
-4
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.4.0",
|
"version": "1.5.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"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",
|
"dev": "next dev -H 0.0.0.0",
|
||||||
"build": "next build",
|
"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",
|
"start": "next start -H 0.0.0.0",
|
||||||
"lint": "eslint",
|
"lint": "eslint",
|
||||||
"db:migrate": "node db/migrate.mjs"
|
"db:migrate": "node --env-file-if-exists=.env.local db/migrate.mjs"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@simplewebauthn/browser": "^13.3.0",
|
"@simplewebauthn/browser": "^13.3.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user