# TikTok Rezepte Deine Rezepte, immer griffbereit. Speichere, organisiere und durchsuche Rezepte aus TikTok-Videos. Mit KI-gestützter Extraktion von Zutaten und Zubereitungsschritten. ## Features - **TikTok-Extraktion** — URL einfügen, Rezept wird automatisch erkannt - **KI-Unterstützung** — Ollama extrahiert Zutaten und Schritte aus dem Video-Titel (optional) - **Suche & Filter** — Rezepte nach Name, Zutaten oder Kategorie durchsuchen - **Einkaufsliste** — Zutaten mit Haken abhaken beim Kochen - **Schritt für Schritt** — Zubereitung mit Fortschrittsanzeige - **Invite-System** — Geschlossene Registrierung, nur eingeladene Nutzer - **Admin-Dashboard** — Einladungen verwalten, Nutzer einsehen und löschen - **Profil** — Username und Passwort ändern - **Responsive** — Funktioniert auf Desktop, Tablet und Handy ## Screenshots | Startseite | Rezept hinzufügen | Admin Dashboard | |---|---|---| | Rezepte als Karten mit Suche und Kategorien | TikTok-URL + KI-Extraktion | Einladungen + Nutzerverwaltung | ## Tech Stack | Bereich | Technologie | |---|---| | Frontend | React 18, Vite, Tailwind CSS, React Router | | Backend | Node.js, Express, bcryptjs, jsonwebtoken | | Datenbank | JSON-Datei (keine Datenbank-Installation nötig) | | KI | Ollama mit Mistral-Modell (optional) | | Deployment | Docker Compose (Nginx + Node.js + Ollama) | ## Projektstruktur ``` tiktok-rezepte/ ├── docker-compose.yml # Docker Deployment ├── .env.example # Umgebungsvariablen-Vorlage │ ├── backend/ # Express API Server │ ├── Dockerfile │ ├── server.js # Einstiegspunkt │ ├── db.js # JSON-Datenbank │ ├── routes/ │ │ ├── auth.js # Authentifizierung & Benutzerverwaltung │ │ └── recipes.js # Rezepte CRUD + TikTok-Extraktion │ ├── services/ │ │ ├── tiktok.js # TikTok oEmbed API │ │ └── ai.js # Ollama KI-Integration │ └── prompts/ │ └── extractRecipe.js # System-Prompt für KI-Extraktion │ └── frontend/ # React SPA ├── Dockerfile ├── nginx.conf # Nginx-Konfiguration ├── vite.config.js # Vite + Dev-Server Proxy └── src/ ├── App.jsx # Routen & Navigation ├── context/ │ └── AuthContext.jsx # Auth-Zustand (JWT) ├── pages/ │ ├── Home.jsx # Rezeptübersicht mit Suche │ ├── AddRecipe.jsx # TikTok-URL + KI-Extraktion │ ├── RecipeDetail.jsx # Rezept ansehen/bearbeiten │ ├── Login.jsx # Anmeldung │ ├── Register.jsx # Registrierung (Invite) │ ├── Profile.jsx # Profil bearbeiten │ └── Admin.jsx # Admin Dashboard └── components/ ├── RecipeCard.jsx # Rezept-Karte ├── IngredientList.jsx # Zutaten (Lesen/Bearbeiten) ├── StepList.jsx # Schritte (Lesen/Bearbeiten) └── CategoryBadge.jsx # Kategorie-Badge ``` ## Schnellstart (lokal) ### Voraussetzungen - Node.js 18+ - (Optional) Ollama für KI-Extraktion ### Installation ```bash # Repository klonen git clone /dein-user/tiktok-rezepte.git cd tiktok-rezepte # Backend installieren cd backend npm install # Frontend installieren cd ../frontend npm install ``` ### Starten ```bash # Backend starten (Port 3001) cd backend npm run dev # Frontend starten (Port 5173, in anderem Terminal) cd frontend npm run dev ``` Oder über das Root-Projekt: ```bash npm run dev ``` Die App ist dann unter `http://localhost:5173` erreichbar. ### Standard-Login | Benutzername | Passwort | |---|---| | `admin` | `admin123` | > **Wichtig:** Passwort nach dem ersten Login ändern! ### Ollama (optional) Für KI-gestützte Rezept-Extraktion: ```bash # Ollama installieren (https://ollama.com) ollama pull mistral ``` Ohne Ollama funktioniert die App vollständig — TikTok-Titel werden übernommen, Zutaten und Schritte werden manuell ausgefüllt. ## Docker Deployment ### Voraussetzungen - Docker & Docker Compose - (Optional) Synology NAS mit Container Manager ### Schritte ```bash # 1. .env-Datei anlegen cp .env.example .env # Werte in .env ändern (JWT_SECRET, ADMIN_PASS)! # 2. Docker starten docker compose up -d # 3. Ollama Modell herunterladen docker exec -it ollama pull mistral ``` ### Umgebungsvariablen | Variable | Beschreibung | Standard | |---|---|---| | `JWT_SECRET` | Geheimnis für JWT-Tokens | `tiktok-rezepte-secret-key-...` | | `ADMIN_USER` | Initialer Admin-Username | `admin` | | `ADMIN_PASS` | Initial admin password | `admin123` | | `PORT` | Backend-Port | `3001` | | `OLLAMA_URL` | Ollama API-URL | `http://localhost:11434` | | `OLLAMA_MODEL` | KI-Modell | `mistral` | | `DB_PATH` | Pfad zur Datenbank-Datei | `./data.json` | ### Synology NAS mit Reverse Proxy 1. Code nach Gitea pushen 2. Container Manager → Projekt → "Aus Git-Repository" 3. Gitea-URL angeben, `docker-compose.yml` wählen 4. Environment-Variablen setzen 5. Deploy starten 6. Systemsteuerung → Login-Dienste → Reverse Proxy einrichten 7. SSL-Zertifikat über Let's Encrypt beantragen ## API Endpoints ### Authentifizierung (`/api/auth`) | Methode | Pfad | Beschreibung | |---|---|---| | POST | `/register` | Registrierung (Invite-Token erforderlich) | | POST | `/login` | Anmeldung, gibt JWT zurück | | GET | `/me` | Aktuellen Benutzer abrufen | | POST | `/invite` | Einladung erstellen (Admin) | | GET | `/invites` | Alle Einladungen anzeigen (Admin) | | GET | `/users` | Alle Benutzer anzeigen (Admin) | | DELETE | `/users/:id` | Benutzer löschen (Admin) | | PUT | `/credentials` | Username/Passwort ändern | ### Rezepte (`/api/recipes`) | Methode | Pfad | Beschreibung | |---|---|---| | GET | `/` | Rezepte auflisten (optional: `?search=&category=`) | | GET | `/categories` | Kategorien mit Anzahl | | GET | `/ai-status` | Ollama-Verfügbarkeit prüfen | | GET | `/:id` | Einzelnes Rezept | | POST | `/` | Rezept erstellen | | PUT | `/:id` | Rezept aktualisieren | | DELETE | `/:id` | Rezept löschen | | POST | `/from-tiktok` | Rezept aus TikTok-URL extrahieren | ## Kategorien | Kategorie | Emoji | |---|---| | Frühstück | 🍳 | | Hauptgericht | 🍽️ | | Dessert | 🍰 | | Snack | 🍿 | | Getränk | ☕ | | Sonstiges | 📋 | ## Wartung ### Daten sichern Die gesamte Datenbank liegt in einer einzigen Datei: ```bash # Bei Docker: cp data/data.json data/data.json.backup # Bei lokaler Entwicklung: cp backend/data.json backend/data.json.backup ``` ### Datenbank zurücksetzen ```bash # Vorsicht: Alle Rezepte, User und Einladungen gehen verloren! rm data/data.json # Beim Neustart wird die Admin-Config neu erstellt ``` ### Logs anzeigen ```bash docker compose logs -f backend docker compose logs -f nginx ``` ## Lizenz MIT