Files

200 lines
7.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 📖 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.