diff --git a/CHANGELOG.md b/CHANGELOG.md index 849c539..37c9f6b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,16 +4,27 @@ 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/). -## [Unreleased] – 1.3.0 (in Arbeit, Branch `feature/v1.3`) +## [1.3.0] – 2026-07-18 -### Geplant -- Mehrsprachigkeit (mind. Deutsch, Englisch, Polnisch) für die - öffentliche Speisekarte: automatische Übersetzung neu angelegter - Einträge mit anschließender manueller Korrekturmöglichkeit +### 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 Gerichte vorschlagen (mit Dublettenprüfung gegen - bestehende Gerichte); Kantinen-Team sichtet und übernimmt - Vorschläge im internen Bereich + 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 diff --git a/README.md b/README.md index 01f5d73..c34d483 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,8 @@ markieren die jeweiligen Versionsstände (`git tag`). | Bereich | Funktionen | | --- | --- | -| Öffentlich (ohne Login) | Wochenplan Mo–Fr mit den Bereichen Brotzeit (09:00–10:00), Mittagessen, Mittagessen vegetarisch und Suppe (je 11:30–13:30); Navigation vorherige/nächste Woche/Heute; auf schmalen Bildschirmen umschaltbare Tages-/Wochenansicht (Tag ist Standard); Logo zentriert über der Karte; Allergen-/Zusatzstoff-Kürzel je Gericht, Legende unterhalb der Karte | -| Kantinen-Team (`/intern`) | Gerichte anlegen/bearbeiten/löschen (inkl. Live-Suche und Mehrfachauswahl zum Batch-Löschen) mit Allergenen/Zusatzstoffen je Gericht; Gerichte Tagen/Bereichen zuweisen (mehrere pro Zelle) und wieder entfernen; globale Allergen-/Zusatzstofflisten pflegen; eigenes Konto verwalten (Name, E-Mail, Passwort, Passkeys, Passwort-Anmeldung an/aus) | +| Öffentlich (ohne Login) | Wochenplan Mo–Fr mit den Bereichen Brotzeit (09:00–10:00), Mittagessen, Mittagessen vegetarisch und Suppe (je 11:30–13:30); Navigation vorherige/nächste Woche/Heute; auf schmalen Bildschirmen umschaltbare Tages-/Wochenansicht (Tag ist Standard); Logo zentriert über der Karte; Allergen-/Zusatzstoff-Kürzel je Gericht, Legende unterhalb der Karte; Sprachumschalter Deutsch/Englisch/Polnisch; Rezeptvorschläge einreichen | +| Kantinen-Team (`/intern`) | Gerichte anlegen/bearbeiten/löschen (inkl. Live-Suche, Mehrfachauswahl zum Batch-Löschen, englischem/polnischem Namen mit automatischer DeepL-Übersetzung) mit Allergenen/Zusatzstoffen je Gericht; Gerichte Tagen/Bereichen zuweisen (mehrere pro Zelle) und wieder entfernen; globale Allergen-/Zusatzstofflisten pflegen (ebenfalls mehrsprachig); eingereichte Rezeptvorschläge sichten, übernehmen oder ablehnen; eigenes Konto verwalten (Name, E-Mail, Passwort, Passkeys, Passwort-Anmeldung an/aus) | | Admin (`/admin`) | Kantinenmitarbeiter anlegen/bearbeiten/löschen (inkl. Passwort-Reset mit Wiederholung und Rollenvergabe); Farbgebung der Speisekarte anpassen; Logo und Favicon hochladen/entfernen | Anmeldung mit E-Mail + Passwort oder alternativ per **Passkey** @@ -23,16 +23,28 @@ Anmeldung mit E-Mail + Passwort oder alternativ per **Passkey** Passwort-Anmeldung kann pro Konto deaktiviert werden, sobald mindestens ein Passkey registriert ist. +Die gesamte Oberfläche ist auf Deutsch, Englisch und Polnisch verfügbar +(Sprachumschalter, Cookie-basiert). Gerichte, Bereiche, Allergene und +Zusatzstoffe lassen sich zusätzlich auf Englisch/Polnisch benennen – +mit optionaler automatischer Übersetzung über DeepL (siehe +`DEEPL_API_KEY` unten) und jederzeit manuell korrigierbar. + ## Projektstruktur ``` app/ Next.js-Routen page.tsx Öffentliche Speisekarte login/ Login (Passwort + Passkey) + vorschlag/ Öffentliches Rezeptvorschlag-Formular intern/ Kantinen-Bereich (Rolle: staff oder admin) + vorschlaege/ Rezeptvorschläge sichten/übernehmen admin/ Verwaltung (Rolle: admin) api/admin/users/ Benutzerverwaltung (serverseitig, Service-Role-Key) + api/translate/ DeepL-Anbindung (serverseitig) + api/locale/ Sprach-Cookie setzen components/ Client-Komponenten (WeekEditor, DishManager, …) +components/i18n/ Sprachkontext, Sprachumschalter +lib/i18n/ Wörterbücher (de/en/pl), Locale-Helfer lib/supabase/ Supabase-Clients (Browser / Server / Admin) lib/ Typen, Datums-/Formatierungshelfer proxy.ts Session-Refresh + Schutz von /intern und /admin @@ -73,6 +85,7 @@ Beim Webserver/Hoster müssen genau diese drei Variablen hinterlegt werden | `SUPABASE_SERVICE_ROLE_KEY` | Service-Role-Key für die Benutzerverwaltung | **ja – niemals im Browser/Repo!** | | `APP_URL` | Öffentliche URL der App, z. B. `https://menu.example.de` (Origin-Check hinter Reverse-Proxy; zugleich Passkey-Domain) | nein | | `SITE_TITLE` | Titel im Browser-Tab und Überschrift ohne Logo, Default `Canteen Menu` | nein | +| `DEEPL_API_KEY` | Optional: aktiviert „Automatisch übersetzen“ für Gerichte/Allergene/Zusatzstoffe (DeepL, kostenloser Free-Tier). Ohne Key funktioniert alles weiter, nur automatisch übersetzen ist deaktiviert | **ja – niemals im Browser/Repo!** | Build & Start auf dem Server – **mit Docker** (empfohlen, Node.js und PostgreSQL müssen nicht installiert sein): diff --git a/package-lock.json b/package-lock.json index f5b993a..e83b059 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "canteen-menu", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "canteen-menu", - "version": "1.2.0", + "version": "1.3.0", "dependencies": { "@supabase/ssr": "^0.12.3", "@supabase/supabase-js": "^2.110.7", diff --git a/package.json b/package.json index e2f8483..cfdf261 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "canteen-menu", - "version": "1.2.0", + "version": "1.3.0", "private": true, "scripts": { "dev": "next dev -H 0.0.0.0",