Initial commit: What To Cook (WTC) v4.4 - Digitales Kochbuch, Wochenmenueplan & Buchdruck
This commit is contained in:
@@ -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.
|
||||
Reference in New Issue
Block a user