Initial commit: What To Cook (WTC) v4.4 - Digitales Kochbuch, Wochenmenueplan & Buchdruck

This commit is contained in:
2026-10-14 20:24:37 +02:00
commit c01d2d7639
171 changed files with 14073 additions and 0 deletions
+198
View File
@@ -0,0 +1,198 @@
# 📖 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).
* **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:** Jedes Rezept und jede Kapitelseite ist so optimiert (282mm Druckhöhe), dass auch unter Apple AirPrint (iOS Safari) und Android Chrome keine ungewollten 2. Seiten entstehen.
---
## 🛠️ 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/wtc.waiswuaschd.de.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.