- Java 75.6%
- Vue 16.8%
- JavaScript 3.5%
- CSS 2.8%
- Dockerfile 0.9%
- Other 0.4%
| .claude | ||
| .forgejo/workflows | ||
| backend | ||
| frontend | ||
| .env.example | ||
| .gitignore | ||
| docker-compose.example.yml | ||
| ENTWICKLUNGSPLAN.md | ||
| IMPLEMENTIERUNGSPLAN.md | ||
| README.md | ||
| SCHNITTSTELLEN.md | ||
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)
- Profil – Ernährungsform (vegan/vegetarisch/…), Allergien, Dislikes, Nährstoff-Ziele
- Feed – gescorte Vorschläge (Nährstoff-Lücken, Abwechslung, Geschmack), Filter nach Zeit/Aufwand, Discover-Modus mit überraschenden Gerichten
- Einkaufszettel – aus ausgewählten Gerichten, Mengen konsolidiert, nach Kategorie gruppiert
- Koch-Modus – Step-by-Step, Timer je Schritt, Sprachausgabe (TTS)
- 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) mitwrite: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.svggenutzt. Für optimale Android-Install- Prompts zusätzlichfrontend/public/icon-192.pngundicon-512.pngablegen. - 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.