Files
wtc.waiswuaschd.de/README.md
T

7.4 KiB
Raw Blame History

📖 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:
    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

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.