Refactor database handling to require PostgreSQL connection, removing fallback to JSON. Implement error handling for database unavailability in key files. Update .env.example to reflect mandatory DATABASE_URL for local development. Remove Firebase configuration and related code from the project.

This commit is contained in:
2026-05-23 10:23:28 +02:00
parent 547778bba5
commit 6577db475a
20 changed files with 823 additions and 789 deletions
+28 -50
View File
@@ -12,10 +12,10 @@ Dieses Dokument enthält den aktuellen Entwicklungsstand und detaillierte Aufgab
- Fullscreen Overlay-Navigation (`LiquidOverlayMenu` & `SlideUpTextHover`)
- Geschmeidiges Scrollverhalten (`LenisSmoothScroll` & `IndexSectionIndicator`)
- Layout-Raster (`FloemaLayoutGrid`) & Premium-Buttons
- [x] **Phase 2: Authentifizierung & Firebase Integration**
- Firebase-Projekt Setup & Anbindung
- Newsletter-System (Firebase Firestore)
- Benutzerprofile (Registrierung, Login, Favoriten)
- [x] **Phase 2: Profil & Personalisierung (lokal)**
- Ernährungsziel & Favoriten im Browser (`fc-local.js`)
- Newsletter per Mailto
- Profilseite `login.php`
- [x] **Phase 3: Nährwerte & Rezepterweiterung**
- Datenmodell & Admin.php Erweiterung
- Visuelles Nährwert-Widget (Floema-Präzision)
@@ -28,12 +28,10 @@ Dieses Dokument enthält den aktuellen Entwicklungsstand und detaillierte Aufgab
- Touch-Swipe-Karussell direkt auf index.php (unter Landing-Page)
- Filteralgorithmus nach Benutzer-Ernährungszielen
- Mikro-Animationen & Quick-Save Funktion
- [/] **Phase 6: Firebase Firestore Datenbank-Migration & Seeding**
- Firebase CLI-Login & Projekt-Initialisierung
- .env-Konfiguration mit Firebase App Credentials
- Client-seitiger "Seed Firestore"-Button in admin.php
- Firestore REST API Integration in helpers.php
- Echtzeit-Zwei-Wege-Sync bei Rezeptänderungen in admin.php
- [x] **Phase 6: PostgreSQL Datenbank**
- `DATABASE_URL` in `.env`, Docker Compose für lokale Dev-DB
- `init_db()` / `save_recipes()` in `helpers.php`
- Fallback auf `data/recipes.json`
---
@@ -66,26 +64,17 @@ Das visuelle Fundament der Website. Die Etablierung des Premium-Designs stellt s
---
### 🔒 Phase 2: Authentifizierung & Firebase Integration
Das Fundament für Personalisierung und Newsletter-Abos über eine sichere Firebase-Anbindung (Auth & Firestore).
### 🔒 Phase 2: Profil & Personalisierung (lokal)
Favoriten, Ernährungsziel und Newsletter ohne Cloud-Backend.
- [x] **Firebase Setup & Initialisierung**
- [x] Firebase SDK Client-Side Einbindung in `partials/head.php` or separaten Helper
- [x] Firebase Config in umweltabhängigen Settings/Variablen auslagern
- [x] Firestore-Datenbank initialisieren (`subscribers` und `users` Collections)
- [x] **Premium Login- & Registrierungsseite**
- [x] Erstellung der Seite `login.php` (und optional `signup.php`) im neuen Design-System-Stil
- [x] Firebase Authentication (Email/Passwort Login & Registrierung) implementieren
- [x] Responsive UI mit sanften Error- & Success-Meldungen und Eingabefeldern im Glasmorphismus-Look
- [x] Client-seitige und Server-seitige Session-Synchronisation (z.B. Firebase Session Tokens an PHP-Session via Ajax senden)
- [x] **Profilseite `login.php`**
- [x] Ernährungsziel wählen und in `localStorage` speichern (`fc-local.js`)
- [x] Gespeicherte Favoriten anzeigen
- [x] **Favoriten-Funktion (Rezept-Bookmarks)**
- [x] Firestore-Collection `user_favorites` anlegen (Format: `userId` -> Liste von `recipeSlugs`)
- [x] "Rezept speichern" Button (Herz-Icon) auf den Rezeptkarten und Rezept-Details mit dynamischem Login-Check
- [x] Mikro-Animationen für das Herz-Icon (Scale up/down, Fülleffekte mit `var(--ease-overshoot)`)
- [x] **Firebase-gestütztes Newsletter-Abo**
- [x] Newsletter-Eingabefeld im Footer (`partials/footer.php`) implementieren
- [x] AJAX-Submit-Handler: E-Mail-Adresse prüfen und in Firestore Collection `subscribers` speichern
- [x] Elegantes Feedback-UI (Erfolgsmeldung ohne Page-Reload)
- [x] Herz-Icon auf Karten, Speicherung in `localStorage`
- [x] Mikro-Animationen für das Herz-Icon
- [x] **Newsletter**
- [x] Footer-Formular mit `mailto:`-Weiterleitung
---
@@ -112,7 +101,7 @@ Jedes Rezept erhält präzise Makronährstoffe (Kalorien, Proteine, Kohlenhydrat
Ein immersiver Kochmodus, der Anwendern Schritt-für-Schritt durch die Zubereitung führt inklusive Videoanleitungen und integrierten Timern.
- [x] **Video-Verknüpfung im Admin-Panel**
- [x] Rezeptstruktur in `data/recipes.json` erweitern, damit jeder Arbeitsschritt (`steps`) eine optionale `video_url` (MP4 aus Firebase Storage oder extern) besitzen kann
- [x] Rezeptstruktur in `data/recipes.json` erweitern, damit jeder Arbeitsschritt (`steps`) eine optionale `video_url` (externe MP4-URL) besitzen kann
- [x] `admin.php` erweitern, um Video-URLs pro Einzelschritt einzugeben
- [x] **Fullscreen Cooking-Mode Overlay**
- [x] Trigger-Button "Kochmodus starten" (`CapitoliumRevealButton` Stil) auf `recipe.php` einbauen
@@ -134,36 +123,25 @@ Ein hochgradig interaktives, touch-freundliches Karussell direkt auf der Startse
- [x] CSS-Klammern (`clamp()`) für responsive Skalierung der Karten
- [x] Flüssiges Einblenden per Scroll-Reveal (`reveal-target`) mit Anbindung an `LenisSmoothScroll`
- [x] **Personalisiertes Goal-Matching**
- [x] Falls der Benutzer eingeloggt ist, sein Ernährungsziel aus den Firebase-Profildaten abrufen
- [x] Ernährungsziel aus `localStorage` (`fc-local.js`) für Karussell-Filter
- [x] Rezepte dynamisch filtern (z.B. High-Protein Rezepte bei Ziel "Muskelaufbau", Low-Carb Rezepte bei Ziel "Abnehmen")
- [x] Personalisierte "Für dich empfohlen"-Badge auf den Karten anzeigen
- [x] **Mikro-Interaktionen & Quick-Save**
- [x] Touch-Gesten-Unterstützung (Wischen zum Blättern mit sanftem Trägheits-Feedback)
- [x] Quick-Save Button direkt auf den Karussell-Karten (Herzeffekt mit direktem Firebase Firestore Sync)
- [x] Quick-Save Button direkt auf den Karussell-Karten (Herzeffekt, `localStorage`)
- [x] Hover-Reveal-Effekte für Rezeptdetails (Zutaten-Vorschau oder Kochzeit-Highlight schiebt sich weich hoch)
---
### 🔥 Phase 6: Firebase Firestore Datenbank-Migration & Seeding
Migration des lokalen JSON-Flachdateispeichers auf eine skalierbare, cloudbasierte Firestore-Struktur.
### 🔥 Phase 6: PostgreSQL Datenbank
Rezepte in Postgres (JSONB), optional lokal per Docker.
- [/] **Firebase-Projekt & CLI-Setup**
- [x] Firebase-Verzeichnis-Umgebung initialisieren und anbinden
- [/] Firebase CLI Login durchführen und aktiven Account verknüpfen
- [ ] Firebase Project & Web App ermitteln oder neu anlegen
- [ ] Lokale `.env`-Konfiguration mit Firebase SDK Parametern befüllen
- [ ] **Client-seitiges Daten-Seeding**
- [ ] "Seed Firestore"-Aktion im Admin-Bereich (`admin.php`) einbauen
- [ ] Batch-Dokumentenupload der `recipes.json`-Einträge in die Firestore Collection `recipes` über JS SDK
- [ ] Firestore Security Rules für den öffentlichen Lesezugriff anpassen
- [ ] **Firestore Server-seitiger Abruf (PHP REST API)**
- [ ] Firestore REST API Parser-Helfer in `helpers.php` implementieren (Transformation von Firestore Key-Maps in Standard-Arrays)
- [ ] `load_recipes()` auf REST API GET `/recipes` umstellen
- [ ] Neue Funktion `load_recipe_by_slug($slug)` für gezielten Einzelabruf implementieren und in `recipe.php` integrieren
- [ ] **Zwei-Wege-Echtzeit-Synchronisierung (Admin)**
- [ ] `save_recipes()` so anpassen, dass lokales JSON als Fallback-Backup erhalten bleibt
- [ ] Client-seitigen Trigger nach erfolgreichem PHP-Speichern in `admin.php` ausführen, um Änderungen sofort in Firestore zu spiegeln
- [ ] Funktionstest: Hinzufügen, Editieren und Löschen von Rezepten über die Admin-Konsole verifizieren
- [x] **`DATABASE_URL` & Docker Compose**
- [x] `docker-compose.dev.yml` für lokale Postgres-Instanz
- [x] `init_db()` legt Tabelle `recipes` an und seedet aus `recipes.json`
- [x] **PHP-Datenzugriff**
- [x] `load_recipes()` / `save_recipes()` mit JSON-Fallback
- [x] `load_recipe_by_slug()` in `recipe.php`
---