# 📖 What To Cook? (WTC) – Digitales Kochbuch, Wochenmenüplan & Buchdruck-Engine Eine moderne, elegante Web-Applikation zur Verwaltung von Lieblingsrezepten, zur spielerischen Menüauslosung (Shuffle-Generator), zur flexiblen Wochenmenü-Planung und zum professionellen Duplex-Buchdruck mit Inhaltsverzeichnis und abwechselnden Seitenzahlen. Live-Instanz: [wtc.dev.waiswuaschd.de](https://wtc.dev.waiswuaschd.de) --- ## ✨ Features im Überblick ### 🍽️ Digitales Kochbuch * **11 liebevoll kuratierte Kapitel:** 1. 🍲 Suppen & Eintöpfe 2. 🥨 Traditionell & Basics 3. 🍝 Pasta & Nudelgerichte 4. 🥔 Kartoffeln 5. 🍚 Reis & Getreide 6. 🥐 Teig & Gebackenes 7. 🥢 Asiatische Küche 8. 🥞 Süßspeisen 9. 🍮 Desserts 10. 🥧 Kuchen & Gebäck 11. 🍪 Plätzchen * **Handgezeichnete Kapitel-Illustrationen:** Hochauflösende Doodles auf jeder Kapitel-Trennseite (sowohl auf dem Bildschirm als auch im Druck). * **2-Spalten-Layout:** Links Bild und Zutaten, rechts nummerierte Zubereitungsschritte und persönliche Notizen. * **Intelligente Portionstabelle:** Automatische 2 / 4 / 6 / 8 Portionen-Berechnung (z. B. für Waffeln, Pfannkuchen und Teige). * **Echtzeit-Titelsuche:** Schnelle Live-Suche in der oberen Navigationsleiste, die Rezepte sofort beim Tippen filtert und leere Kapitel automatisch ausblendet. * **Rezept-Management:** Schnelles Hinzufügen, Bearbeiten, Löschen und Foto-Upload mit automatischer Bildoptimierung und Komprimierung (WebP/JPEG). ### 🎲 Shuffle-Generator (Essensauslosung) * Würfelt 1 bis 5 Gerichte gleichzeitig ohne doppelte Vorschläge in einer Runde. * Filterbar nach **Kapitel** und **Aufwand** (Mehrfachauswahl: Gering, Mittel, Hoch). * Direkte Schaltfläche zum Öffnen oder Tauschen eines Gerichts. ### 📅 Interaktiver Wochenmenü-Plan * **4 Mahlzeiten pro Tag:** 🌅 Früh, ☀️ Mittag, ☕ Kaffee & Kuchen, 🌙 Abend. * **Nur belegte Mahlzeiten sichtbar:** Schlanke, aufgeräumte Wochenansicht ohne überflüssige leere Blöcke. * **Flexible Zuordnung:** Rezepte direkt aus dem Kochbuch wählen, Freitext eingeben (z. B. *Kantine*, *Pizzaabend*, *Brotzeit*) oder Zufallsgericht würfeln. * **Wochennavigation:** Beliebiges Blättern durch vergangene und zukünftige Kalenderwochen mit Anzeige der aktuellen KW. * **Persistente Speicherung:** Dauerhafte Speicherung aller Einträge in der Datenbank. ### 🖨️ A4-Buchdruck & PDF-Export (Duplex-Buchbindung) * **Reine Druck-Elemente:** Deckblatt (*Meine Lieblingsrezepte*), 2-seitiges Inhaltsverzeichnis mit Punktlinien und Seitenzahlen erscheinen ausschließlich im Ausdruck. * **Abwechselnde Seitenzahlen:** - Gerade Seiten (links im Buch): Seitenzahl links unten - Ungerade Seiten (rechts im Buch): Seitenzahl rechts unten * **Millimetergenaue 1-Seiten-Garantie (256mm Safe-Height):** Universell abgestimmte Seitenhöhe, die sowohl unter Apple AirPrint (iOS Safari, iPhone/iPad) als auch unter Android Chrome und Desktop garantiert exakt 1 A4-Seite pro Rezept erzeugt – ohne ungewollte Leerseiten und ohne abgeschnittene Fußzeilen. --- ## 🛠️ Systemvoraussetzungen * **Betriebssystem:** Linux (Debian 12 / Ubuntu 22.04+ empfohlen) oder Windows * **Python:** 3.10 oder neuer * **Datenbank:** MariaDB 10.6+ / MySQL 8.0+ (oder SQLite als Fallback) * **Webserver:** Nginx (als Reverse Proxy mit SSL via Let's Encrypt) --- ## 🚀 Installation & Einrichtung ### 1. Repository klonen ```bash git clone https://gitea.sp13l.de/kobold-ai/cookbook.git /home/maxi/Projekt/wtc.waiswuaschd.de cd /home/maxi/Projekt/wtc.waiswuaschd.de ``` ### 2. Python Virtual Environment anlegen ```bash python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ``` ### 3. Konfiguration (`.env`) Erstelle eine `.env`-Datei auf Basis der Vorlage: ```bash cp .env.example .env nano .env ``` Beispiel-Konfiguration: ```ini DB_ENGINE=mariadb MARIADB_HOST=localhost MARIADB_PORT=3306 MARIADB_USER=wtc_user MARIADB_PASS=dein_sicheres_passwort MARIADB_NAME=wtc_cookbook # Login Zugangsdaten für das Kochbuch APP_USERNAME=admin APP_PASSWORD=dein_super_geheimes_passwort! SECRET_KEY=wtc_hmac_secret_key_zufaelliger_string_hier ``` ### 4. MariaDB Datenbank & Benutzer anlegen Verbinde dich mit deiner MySQL/MariaDB-Konsole: ```sql CREATE DATABASE IF NOT EXISTS `wtc_cookbook` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS 'wtc_user'@'localhost' IDENTIFIED BY 'dein_sicheres_passwort'; GRANT ALL PRIVILEGES ON `wtc_cookbook`.* TO 'wtc_user'@'localhost'; FLUSH PRIVILEGES; ``` *(Tabellen für Rezepte und den Wochenplan werden beim ersten Start der Applikation automatisch migriert und angelegt).* --- ## ⚙️ Produktion: Systemd Service einrichten Erstelle die Service-Datei `/etc/systemd/system/wtc.service`: ```ini [Unit] Description=What To Cook (WTC) Kochbuch & Menüplaner (FastAPI) After=network.target mariadb.service [Service] Type=simple User=maxi Group=maxi WorkingDirectory=/home/maxi/Projekt/wtc.waiswuaschd.de Environment="PATH=/home/maxi/Projekt/wtc.waiswuaschd.de/venv/bin:/usr/local/bin:/usr/bin:/bin" ExecStart=/home/maxi/Projekt/wtc.waiswuaschd.de/venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8003 --workers 2 Restart=always RestartSec=3 [Install] WantedBy=multi-user.target ``` Dienst aktivieren und starten: ```bash sudo systemctl daemon-reload sudo systemctl enable wtc.service sudo systemctl start wtc.service sudo systemctl status wtc.service ``` --- ## 🌐 Nginx Reverse Proxy Konfiguration Erstelle `/etc/nginx/sites-available/wtc.dev.waiswuaschd.de`: ```nginx server { server_name wtc.dev.waiswuaschd.de; client_max_body_size 25M; location / { proxy_pass http://127.0.0.1:8003; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Aktivieren und SSL-Zertifikat via Certbot einbinden: ```bash sudo ln -s /etc/nginx/sites-available/wtc.dev.waiswuaschd.de /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx sudo certbot --nginx -d wtc.dev.waiswuaschd.de ``` --- ## 📂 Projektstruktur ```text wtc.waiswuaschd.de/ ├── app/ │ ├── static/ │ │ ├── cookbook.css # Haupt-Stylesheet & A4-Druckregeln │ │ └── uploads/ # Hochgeladene Rezeptfotos & Illustrationen │ ├── templates/ │ │ ├── cookbook.html # Hauptansicht, Buch-Wrapper, Modals & Wochenplan │ │ ├── recipe_detail.html # Einzelrezeptansicht │ │ ├── recipe_form.html # Standalone Formular │ │ └── login.html # Login-Maske │ ├── database.py # Datenbank-Abstraktion (MariaDB / SQLite CRUD) │ ├── ingredients.py # Portions-Skalierung & Zutaten-Parser │ └── main.py # FastAPI Routen, Session-Auth & Endpunkte ├── requirements.txt # Python Dependencies ├── wtc.service # Systemd Service Vorlage ├── .env.example # Konfigurationsvorlage └── README.md # Projektdokumentation ``` --- ## 📄 Lizenz & Credits Entwickelt für den privaten Gebrauch und die Erstellung gebundener Familien-Kochbücher. Alle Rechte vorbehalten.