einkaufen und kochen - leicht gemacht
  • Java 75.6%
  • Vue 16.8%
  • JavaScript 3.5%
  • CSS 2.8%
  • Dockerfile 0.9%
  • Other 0.4%
Find a file
CptTony efeb60c78e
Some checks failed
Build & Push Docker Images / docker (./backend, backend) (push) Failing after 3m14s
Build & Push Docker Images / docker (./frontend, frontend) (push) Failing after 47s
.forgejo/workflows/build.yml aktualisiert
2026-07-30 00:11:57 +02:00
.claude initial commit 2026-07-30 00:05:19 +02:00
.forgejo/workflows .forgejo/workflows/build.yml aktualisiert 2026-07-30 00:11:57 +02:00
backend initial commit 2026-07-30 00:05:19 +02:00
frontend initial commit 2026-07-30 00:05:19 +02:00
.env.example initial commit 2026-07-30 00:05:19 +02:00
.gitignore initial commit 2026-07-30 00:05:19 +02:00
docker-compose.example.yml initial commit 2026-07-30 00:05:19 +02:00
ENTWICKLUNGSPLAN.md initial commit 2026-07-30 00:05:19 +02:00
IMPLEMENTIERUNGSPLAN.md initial commit 2026-07-30 00:05:19 +02:00
README.md initial commit 2026-07-30 00:05:19 +02:00
SCHNITTSTELLEN.md initial commit 2026-07-30 00:05:19 +02:00

ShopNCook Einkaufen & Kochen, leicht gemacht

Eine Web-/Mobile-App (PWA), deren Herzstück ein personalisierter Rezept-Feed ist: Er löst das Problem „Ich will mich gesund und abwechslungsreich ernähren, weiß aber nicht, was ich kochen soll." Der Feed berücksichtigt Nährstoffbedarf, Abwechslung, Vorlieben, Allergien und Dislikes.

Planungsdokumente: ENTWICKLUNGSPLAN.md · SCHNITTSTELLEN.md · IMPLEMENTIERUNGSPLAN.md

Features (MVP)

  1. Profil Ernährungsform (vegan/vegetarisch/…), Allergien, Dislikes, Nährstoff-Ziele
  2. Feed gescorte Vorschläge (Nährstoff-Lücken, Abwechslung, Geschmack), Filter nach Zeit/Aufwand, Discover-Modus mit überraschenden Gerichten
  3. Einkaufszettel aus ausgewählten Gerichten, Mengen konsolidiert, nach Kategorie gruppiert
  4. Koch-Modus Step-by-Step, Timer je Schritt, Sprachausgabe (TTS)
  5. Historie mit Foto und Bewertung; fließt zurück in die Feed-Personalisierung

Tech-Stack

  • Backend: Java 21, Spring Boot 3, Spring Data JPA, PostgreSQL
  • Frontend: Vue 3, Vite, Vue Router, PWA (installierbar, mobiltauglich)
  • Betrieb: Docker (je ein Image für Backend & Frontend), Docker Compose
  • CI: Forgejo Actions baut & pusht beide Images bei Push auf main

Architektur

Browser / installierte PWA
        │  (/api, same-origin)
   [ frontend ]  nginx: statische Vue-App + Reverse-Proxy auf /api
        │
   [ backend ]   Spring Boot REST  ──►  [ postgres ]

Erweiterungspunkte für Supermarkt-Angebote (OffersProvider) und Vorrats-Tracking (PantryProvider) sind als Interfaces mit No-op-Standard bereits verdrahtet eine echte Implementierung aktiviert die zugehörigen Feed-Scores ohne weitere Codeänderungen (siehe backend/.../ext).

Schnellstart mit Docker Compose

cp .env.example .env                 # Werte anpassen (v.a. DB_PASSWORD)
cp docker-compose.example.yml docker-compose.yml
docker compose up -d --build

Danach:

Die Datenbank wird beim ersten Start automatisch mit ~10 Rezepten, Zutaten und Allergenen befüllt (siehe DataSeeder). Es gibt einen Demo-Nutzer; echte Auth ist als klarer Erweiterungspunkt (CurrentUserService) vorbereitet.

Lokale Entwicklung (ohne Docker)

Backend (braucht Maven + JDK 21 und ein laufendes Postgres, z. B. docker compose up -d db):

cd backend
mvn spring-boot:run

Läuft auf http://localhost:8080/api. Alternativ ohne lokales Maven einfach das Backend-Image bauen/laufen lassen (siehe Docker-Compose oben).

Frontend:

cd frontend
npm install
npm run dev

Läuft auf http://localhost:5173 und proxyt /api automatisch auf Port 8080.

API-Überblick

Methode Pfad Zweck
GET /api/feed?maxTime=&maxDifficulty=&discover= personalisierter Feed
POST /api/feed/interaction LIKED/DISLIKED/SKIPPED protokollieren
GET/PUT /api/preferences Profil lesen/ändern
POST/DELETE /api/preferences/allergens, /dislikes Allergene & Dislikes pflegen
GET /api/recipes/{id} Rezeptdetails inkl. Schritte
POST /api/shopping-list Einkaufszettel aus recipeIds
GET /api/shopping-list/active aktueller Zettel
GET/POST /api/history Historie lesen / mit Foto+Bewertung anlegen

Ohne Login operiert alles auf dem Demo-Nutzer. Ein optionaler Header X-User-Id: <uuid> wählt einen anderen Nutzer.

CI / Forgejo

.forgejo/workflows/build.yml baut bei Push auf main die Images shopncook-backend und shopncook-frontend und pusht sie in die Container-Registry der Forgejo-Instanz.

Voraussetzungen im Repo:

  • Ein Actions-Runner mit Docker (Label docker).
  • Optional Variable REGISTRY (Standard: Host der Forgejo-Instanz).
  • Optional Secret PACKAGES_TOKEN (sonst automatischer Token) mit write:package-Recht.

Zum Ausrollen der CI-Images: in docker-compose.yml die build:-Blöcke gegen die image:-Zeilen tauschen (siehe Kommentare dort).

Hinweise

  • PWA-Icons: aktuell wird favicon.svg genutzt. Für optimale Android-Install- Prompts zusätzlich frontend/public/icon-192.png und icon-512.png ablegen.
  • Schema-Verwaltung: MVP nutzt Hibernate ddl-auto=update. Für Produktion auf versionierte Migrationen (Flyway/Liquibase) umstellen.
  • Sprachsteuerung (Erkennung) und echte Supermarkt-/Vorrats-Anbindung sind bewusst noch nicht enthalten die Extension Points stehen bereit.