7.4 KiB
📖 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
✨ Features im Überblick
🍽️ Digitales Kochbuch
- 11 liebevoll kuratierte Kapitel:
- 🍲 Suppen & Eintöpfe
- 🥨 Traditionell & Basics
- 🍝 Pasta & Nudelgerichte
- 🥔 Kartoffeln
- 🍚 Reis & Getreide
- 🥐 Teig & Gebackenes
- 🥢 Asiatische Küche
- 🥞 Süßspeisen
- 🍮 Desserts
- 🥧 Kuchen & Gebäck
- 🍪 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
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
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:
cp .env.example .env
nano .env
Beispiel-Konfiguration:
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:
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:
[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:
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:
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:
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
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.