Commit Graph
21 Commits
Author SHA1 Message Date
florian.wilde bfd32d1aa7 Konfigurierbare öffentliche URL (APP_URL) inkl. Passkey-Anbindung
- Neue Umgebungsvariable APP_URL (docker-compose reicht sie durch,
  Default http://localhost:3000): gilt beim CSRF-Origin-Check als
  eigene Origin, falls ein Reverse-Proxy den Host-Header umschreibt
- scripts/configure-passkeys.mjs setzt die Passkey-Domain (WebAuthn
  rp_id/origins) des Supabase-Projekts auf APP_URL – ein Befehl statt
  manueller Dashboard-Konfiguration beim Domain-Wechsel
2026-07-17 23:53:13 +02:00
florian.wilde 32594c2dd8 Fix: Weiterleitungen übernehmen nicht mehr die Server-Bindung 0.0.0.0
Nach dem Abmelden landete man auf 0.0.0.0:3000, weil die absolute
Redirect-URL aus request.url gebaut wurde und dort seit der Bindung an
0.0.0.0 die Server-Adresse statt des aufgerufenen Hosts steht.
Logout leitet jetzt relativ weiter; der Proxy baut die URL aus dem
Host-Header des Browsers (inkl. x-forwarded-proto hinter Proxies).
2026-07-17 23:53:12 +02:00
florian.wilde 5c7112ecd2 Gerichte: Live-Suche
Filtert die Liste bereits während des Tippens (Name, ohne Groß-/
Kleinschreibung). "Alle auswählen" bezieht sich auf die gefilterte
Liste, Treffer-Hinweis bei leerem Ergebnis.
2026-07-17 23:53:12 +02:00
florian.wilde 2a62d07dc4 Navigation: gemeinsamer Kopfbereich statt getrennter Bereiche
Eine Leiste für alles: Gruppe "Speiseplan" (Wochenplan, Gerichte,
Allergene & Zusatzstoffe) und für Admins zusätzlich Gruppe
"Verwaltung" (Benutzer, Design). Aktiver Menüpunkt wird hervorgehoben,
die Konto-Seite nutzt denselben Header – kein Hin- und Herspringen
mehr zwischen Kantinen-Bereich und Verwaltung.
2026-07-17 23:53:11 +02:00
florian.wilde 0dbf89dfa2 Erreichbarkeit auf 0.0.0.0; Projekt zu "canteen-menu" umbenannt
- next dev/start binden jetzt explizit an 0.0.0.0 statt nur localhost
  (Docker war über die Port-Freigabe bereits erreichbar, jetzt auch
  beim nativen npm-Betrieb); docker-compose.yml macht das Binden an
  alle Interfaces zusätzlich explizit
- package.json-Name, Docker-Image/Container/Netzwerk-Namen, lokaler
  DB-Name (canteen_menu), Browser-Tab-Titel und README auf den
  englischen Projektnamen "canteen-menu" umgestellt; deutsche
  In-App-Texte für die Kantinen-Mitarbeiter bleiben unverändert
- Supabase-Projekt (Anzeigename) und native lokale Postgres-DB
  entsprechend umbenannt (Ref/URL/Keys unverändert)
2026-07-17 20:07:53 +02:00
florian.wilde 41a6508b89 Gerichte: Mehrfachauswahl zum Batch-Löschen
Checkbox je Zeile plus "Alle auswählen"; "Ausgewählte löschen (n)"
löscht alle markierten Gerichte in einem einzigen delete().in()-Request.
2026-07-17 20:07:53 +02:00
florian.wilde d59b20d4ba Lokale DB-Kopie: Schema-Dump auf Migration 0003 aktualisieren 2026-07-17 19:16:53 +02:00
florian.wilde 7d08e6fd81 Konto-Seite: eigenen Namen, E-Mail, Passwort und Passkeys selbst verwalten
- Klick auf den Benutzernamen im Header (Kantinen- und Admin-Bereich)
  öffnet /konto
- Name-Änderung per RLS-Policy mit spaltenscharfem Grant (nur
  full_name), Rolle bleibt ausschließlich über die Admin-API änderbar
- E-Mail-Änderung über supabase.auth.updateUser mit Bestätigungslink;
  Trigger synchronisiert profiles.email nach Bestätigung
- Passwortänderung verlangt zur Verifizierung das aktuelle Passwort
  (Re-Login-Check) plus Wiederholung des neuen Passworts
- Passkey-Verwaltung aus /intern/konto hierher verschoben
2026-07-17 19:15:09 +02:00
florian.wilde 902725acae Docker: Compose-Projektnamen fest auf "speisekarte" setzen
Ohne explizite Angabe leitet Compose den Projektnamen aus dem
Ordnernamen ab und wirft dabei das "ß" ersatzlos weg (Images/
Container hießen "speiekarte-*"). name+image+container_name fixieren
das auf "speisekarte-app"/"speisekarte-db"/"speisekarte-dev".
2026-07-17 19:15:09 +02:00
florian.wilde b499708a8f Docker-Fix: DB-Init bricht bei CREATE SCHEMA public nicht mehr ab, Port 5433 statt 5432 2026-07-17 18:52:49 +02:00
florian.wilde 8dd6ba236e Docker-Setup: App-Image (standalone), PostgreSQL-Dienst mit Auto-Import, Dev-Profil 2026-07-17 18:26:36 +02:00
florian.wilde 7cac8cd4fc Sicherheit: HTTP-Security-Header und Origin-Prüfung für schreibende Routen
- X-Frame-Options/CSP frame-ancestors gegen Clickjacking,
  nosniff, Referrer-Policy, Permissions-Policy
- Origin-Check als CSRF-Defense-in-Depth für /api/admin/users
  und /logout (zusätzlich zu SameSite=Lax-Cookies und JSON-Content-Type)
2026-07-17 18:21:22 +02:00
florian.wilde fbd4659346 Doku und Tooling: README, .env-Vorlage, Launch-Konfiguration 2026-07-17 18:18:45 +02:00
florian.wilde b1e41026b6 Lokale PostgreSQL-Kopie: Auth/Storage-Stubs, Dumps und Sync-Skript 2026-07-17 18:18:44 +02:00
florian.wilde 8a393dce1a Admin-Bereich: Benutzerverwaltung (Service-Role, serverseitig), Farben und Logo-Upload 2026-07-17 18:18:43 +02:00
florian.wilde 76f90d519c Kantinen-Bereich: Wochenplan-Editor, Gerichte, Kennzeichnungen, Passkey-Verwaltung 2026-07-17 18:18:41 +02:00
florian.wilde d2bb39d815 Auth: Login mit E-Mail/Passwort und Passkey, Logout 2026-07-17 18:18:34 +02:00
florian.wilde 7e31dce237 Öffentliche Speisekarte: Wochenansicht, konfigurierbare Farben, Allergen-Legende 2026-07-17 18:18:27 +02:00
florian.wilde 74ce663813 Supabase-Clients (Browser/Server/Admin), Session-Proxy und Basis-Typen 2026-07-17 18:18:19 +02:00
florian.wilde 63a30a3835 Supabase: Schema, RLS-Policies und Seed-Daten 2026-07-17 18:18:10 +02:00
florian.wilde d11d2a0687 Initial commit from Create Next App 2026-07-17 17:13:05 +02:00