200 lines
7.4 KiB
Markdown
200 lines
7.4 KiB
Markdown
# 📖 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.
|