114 lines
4.9 KiB
Markdown
114 lines
4.9 KiB
Markdown
# 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.4.0] – 2026-07-18
|
||
|
||
### Hinzugefügt
|
||
- Essenszeiten (Brotzeit/Mittagessen/…) vollständig verwaltbar: anlegen,
|
||
umbenennen (inkl. EN/PL), Uhrzeit ändern, löschen und per Pfeil-Buttons
|
||
neu anordnen – neue Seite „Essenszeiten" im Kantinen-Bereich. Löschen
|
||
entfernt zugewiesene Gerichte automatisch aus allen Wochenplänen.
|
||
|
||
### Geändert
|
||
- „Automatisch übersetzen"-Button bei Gerichten/Allergenen/Zusatzstoffen
|
||
ist nur noch sichtbar, wenn `DEEPL_API_KEY` gesetzt ist, statt erst
|
||
nach Klick auf die fehlende Konfiguration hinzuweisen.
|
||
|
||
### Behoben
|
||
- Sprachumschalter (DE/EN/PL) erschien auf der öffentlichen Speisekarte
|
||
in der mobilen Ansicht doppelt.
|
||
|
||
## [1.3.0] – 2026-07-18
|
||
|
||
### Hinzugefügt
|
||
- Mehrsprachigkeit für die komplette Anwendung (Deutsch, Englisch,
|
||
Polnisch): Sprachumschalter (Cookie-basiert, kein Neuladen der
|
||
Seite nötig), sämtliche Oberflächentexte übersetzt
|
||
- Gerichte, Bereiche, Allergene und Zusatzstoffe zusätzlich mit
|
||
englischem/polnischem Namen; öffentliche Speisekarte zeigt je nach
|
||
gewählter Sprache automatisch den passenden Namen (Fallback:
|
||
Deutsch, falls keine Übersetzung hinterlegt ist)
|
||
- Automatische Übersetzung per DeepL: Button „Automatisch übersetzen“
|
||
beim Anlegen/Bearbeiten von Gerichten, Allergenen und Zusatzstoffen;
|
||
Ergebnis bleibt danach manuell korrigierbar. Aktivierung über die
|
||
neue Docker-Variable `DEEPL_API_KEY` – ohne Key bleibt der Button
|
||
inaktiv, die Felder lassen sich weiterhin von Hand ausfüllen
|
||
- Rezeptvorschläge im öffentlichen Bereich: nicht angemeldete
|
||
Besucher können über „Rezept vorschlagen“ ein fehlendes Gericht
|
||
vorschlagen (Name + optionale Beschreibung), inkl. Dublettenprüfung
|
||
gegen bestehende Gerichte und einfachem Honeypot-Spamschutz
|
||
- Neue Seite „Vorschläge“ im Kantinen-Bereich: eingereichte Vorschläge
|
||
sichten, als Gericht übernehmen oder ablehnen
|
||
|
||
### Behoben
|
||
- Passwort-wiederholen-Feld beim Bearbeiten eines Benutzers erschien
|
||
erst, nachdem im ersten Passwortfeld schon getippt wurde – wirkte
|
||
wie ein einzelnes Pflichtfeld
|
||
- Anmelden-Button überlappte auf Mobilgeräten mit breiten Logos
|
||
(Banner-Format) das Logo, da er absolut in der oberen Ecke
|
||
positioniert war
|
||
|
||
## [1.2.0] – 2026-07-18
|
||
|
||
### Hinzugefügt
|
||
- „Heute"-Button in der Wochennavigation (öffentliche Speisekarte und
|
||
Wochenplan-Editor)
|
||
- Mobile Ansicht der öffentlichen Speisekarte: umschaltbar zwischen
|
||
Tag (Standard) und Woche, unabhängig von der Desktop-Tabelle
|
||
- Allergene und Zusatzstoffe wieder pro Gericht auswählbar (Chip-Auswahl
|
||
im Formular) und als kleine Kürzel neben dem Gerichtnamen sichtbar –
|
||
in Speisekarte, mobiler Ansicht und Wochenplan-Editor
|
||
- Passwort-Wiederholung beim Anlegen neuer Benutzer und beim optionalen
|
||
Passwort-Reset
|
||
- Passwort-Anmeldung pro Konto deaktivierbar (nur wenn mindestens ein
|
||
Passkey registriert ist), Durchsetzung im Login-Flow
|
||
- `SITE_TITLE`-Umgebungsvariable für Browser-Tab-Titel und Überschrift
|
||
ohne Logo
|
||
- Austauschbares Favicon über den Admin-Design-Bereich
|
||
|
||
### Geändert
|
||
- Gemeinsame Navigation für Kantinen- und Admin-Bereich statt zwei
|
||
getrennter Menüs
|
||
- Live-Suche bei den Gerichten
|
||
- Mehrfachauswahl zum Batch-Löschen von Gerichten
|
||
- App erreichbar auf `0.0.0.0` statt nur `localhost` (Docker und
|
||
nativer Betrieb)
|
||
- Projekt umbenannt von „Speisekarte“ zu „canteen-menu“ (Docker-,
|
||
npm- und Supabase-Namen; deutsche In-App-Texte unverändert)
|
||
- Öffentliche URL über `APP_URL` konfigurierbar (CSRF-Origin-Check
|
||
hinter Reverse-Proxy, Passkey-Domain)
|
||
|
||
### Behoben
|
||
- Next.js band `app/favicon.ico` zusätzlich zu einem dynamisch
|
||
gesetzten Favicon ein – Favicon wird jetzt immer explizit gesetzt
|
||
- Weiterleitungen (Logout, Zugriffsschutz) übernahmen nach der
|
||
0.0.0.0-Bindung fälschlich die Server-Adresse statt des
|
||
aufgerufenen Hosts
|
||
|
||
## [1.1.0] – 2026-07-17
|
||
|
||
### Hinzugefügt
|
||
- Versionsnummer im Fußbereich jeder Seite
|
||
|
||
## [1.0.0] – 2026-07-17
|
||
|
||
Erste vollständige Version.
|
||
|
||
### Hinzugefügt
|
||
- Öffentliche Speisekarte ohne Login: Wochenansicht Mo–Fr mit den
|
||
Bereichen Brotzeit, Mittagessen, Mittagessen vegetarisch und Suppe;
|
||
Wochen-Navigation; Logo zentriert; Allergene & Zusatzstoffe unterhalb
|
||
der Karte
|
||
- Anmeldung mit E-Mail/Passwort oder Passkey
|
||
- Kantinen-Bereich: Gerichte anlegen/bearbeiten/löschen, Wochenplan
|
||
pflegen, globale Allergen-/Zusatzstofflisten verwalten
|
||
- Admin-Bereich: Benutzerverwaltung, Farbgebung, Logo-Upload
|
||
- Eigenes Konto verwalten: Name, E-Mail, Passwort, Passkeys
|
||
- Row-Level-Security, HTTP-Security-Header, CSRF-Origin-Check
|
||
- Docker-Setup (App-Image, lokale PostgreSQL-Kopie, Dev-Profil ohne
|
||
lokales Node.js)
|
||
- Lokale PostgreSQL-Kopie mit Sync-Skript
|