Version 1.3.0
This commit is contained in:
+19
-8
@@ -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/),
|
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/).
|
||||||
|
|
||||||
## [Unreleased] – 1.3.0 (in Arbeit, Branch `feature/v1.3`)
|
## [1.3.0] – 2026-07-18
|
||||||
|
|
||||||
### Geplant
|
### Hinzugefügt
|
||||||
- Mehrsprachigkeit (mind. Deutsch, Englisch, Polnisch) für die
|
- Mehrsprachigkeit für die komplette Anwendung (Deutsch, Englisch,
|
||||||
öffentliche Speisekarte: automatische Übersetzung neu angelegter
|
Polnisch): Sprachumschalter (Cookie-basiert, kein Neuladen der
|
||||||
Einträge mit anschließender manueller Korrekturmöglichkeit
|
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
|
- Rezeptvorschläge im öffentlichen Bereich: nicht angemeldete
|
||||||
Besucher können Gerichte vorschlagen (mit Dublettenprüfung gegen
|
Besucher können über „Rezept vorschlagen“ ein fehlendes Gericht
|
||||||
bestehende Gerichte); Kantinen-Team sichtet und übernimmt
|
vorschlagen (Name + optionale Beschreibung), inkl. Dublettenprüfung
|
||||||
Vorschläge im internen Bereich
|
gegen bestehende Gerichte und einfachem Honeypot-Spamschutz
|
||||||
|
- Neue Seite „Vorschläge“ im Kantinen-Bereich: eingereichte Vorschläge
|
||||||
|
sichten, als Gericht übernehmen oder ablehnen
|
||||||
|
|
||||||
### Behoben
|
### Behoben
|
||||||
- Passwort-wiederholen-Feld beim Bearbeiten eines Benutzers erschien
|
- Passwort-wiederholen-Feld beim Bearbeiten eines Benutzers erschien
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ markieren die jeweiligen Versionsstände (`git tag`).
|
|||||||
|
|
||||||
| Bereich | Funktionen |
|
| 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 |
|
| Ö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 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) |
|
| 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 |
|
| 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**
|
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
|
Passwort-Anmeldung kann pro Konto deaktiviert werden, sobald mindestens
|
||||||
ein Passkey registriert ist.
|
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
|
## Projektstruktur
|
||||||
|
|
||||||
```
|
```
|
||||||
app/ Next.js-Routen
|
app/ Next.js-Routen
|
||||||
page.tsx Öffentliche Speisekarte
|
page.tsx Öffentliche Speisekarte
|
||||||
login/ Login (Passwort + Passkey)
|
login/ Login (Passwort + Passkey)
|
||||||
|
vorschlag/ Öffentliches Rezeptvorschlag-Formular
|
||||||
intern/ Kantinen-Bereich (Rolle: staff oder admin)
|
intern/ Kantinen-Bereich (Rolle: staff oder admin)
|
||||||
|
vorschlaege/ Rezeptvorschläge sichten/übernehmen
|
||||||
admin/ Verwaltung (Rolle: admin)
|
admin/ Verwaltung (Rolle: admin)
|
||||||
api/admin/users/ Benutzerverwaltung (serverseitig, Service-Role-Key)
|
api/admin/users/ Benutzerverwaltung (serverseitig, Service-Role-Key)
|
||||||
|
api/translate/ DeepL-Anbindung (serverseitig)
|
||||||
|
api/locale/ Sprach-Cookie setzen
|
||||||
components/ Client-Komponenten (WeekEditor, DishManager, …)
|
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/supabase/ Supabase-Clients (Browser / Server / Admin)
|
||||||
lib/ Typen, Datums-/Formatierungshelfer
|
lib/ Typen, Datums-/Formatierungshelfer
|
||||||
proxy.ts Session-Refresh + Schutz von /intern und /admin
|
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!** |
|
| `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 |
|
| `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 |
|
| `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
|
Build & Start auf dem Server – **mit Docker** (empfohlen, Node.js und
|
||||||
PostgreSQL müssen nicht installiert sein):
|
PostgreSQL müssen nicht installiert sein):
|
||||||
|
|||||||
Generated
+2
-2
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.2.0",
|
"version": "1.3.0",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.2.0",
|
"version": "1.3.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@supabase/ssr": "^0.12.3",
|
"@supabase/ssr": "^0.12.3",
|
||||||
"@supabase/supabase-js": "^2.110.7",
|
"@supabase/supabase-js": "^2.110.7",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "canteen-menu",
|
"name": "canteen-menu",
|
||||||
"version": "1.2.0",
|
"version": "1.3.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "next dev -H 0.0.0.0",
|
"dev": "next dev -H 0.0.0.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user