# Changelog 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 ### Hinzugefügt - Wochenplan: „Mahlzeit hinzufügen" bietet jetzt ein Suchfeld mit gefilterter Trefferliste statt einer langen Dropdown-Liste zum Durchscrollen. - `db/seed-demo.sql` (`npm run db:seed-demo`): spielt für lokale Entwicklung/Demos den ursprünglichen Beispieldatensatz ein (Essenszeiten, Allergene, Zusatzstoffe, Testgerichte, zwei Beispielwochen) – kein Teil der automatischen Migrationen, frische Deployments starten weiterhin leer. ### 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. - Logo-/Favicon-Upload akzeptierte anhand des vom Browser gemeldeten Dateityps auch SVG-Dateien. Da diese (anders als beim vorherigen Supabase-Storage-Bucket auf fremder Domain) jetzt auf der eigenen Origin ausgeliefert werden, hätte eine SVG mit eingebettetem `