Skip to content

10mirec/nutriflow

Repository files navigation

NutriFlow

Týdenní AI plánovač jídel pro českého uživatele orchestrující 5 LLM agentů přes Claude Agent SDK.

NutriFlow vezme uživatelský profil (váha, výška, věk, cíl, alergie, preference, obsah spíže) a vygeneruje na jedno volání týdenní plán jídel + nákupní seznam v češtině. Vše respektuje denní makroživinové cíle (Mifflin–St Jeor), dietní restrikce, akce v Rohlík.cz a obsah spíže. Plán je hotový za desítky sekund a uživatel vidí progres v reálném čase přes SSE stream.


Naplnění zadání

Zadání vyžaduje projekt s praktickým použitím SDK pro kódovacích agentů, který demonstruje orchestraci (workflow / multi-agent). NutriFlow pokrývá více vzorů najednou — nejen minimum.

Použité SDK pro kódovací agenty

Vrstva SDK Kde
Runtime orchestrace agentů uvnitř aplikace Claude Agent SDK (claude_agent_sdk v Pythonu) backend/src/nutriflow/agents/
Vývoj projektu samotného Claude Code (kódovací agent) + 8 specializovaných subagentů .claude/agents/
Metodologie vývoje Superpowers plugin (brainstorming → writing-plans → TDD → verification) CLAUDE.md

Demonstrovaná orchestrace

Vzor ze zadání Kde v kódu Popis
Workflow — Sequential orchestrator.py:184-272 Nutritionist → Shopper.recon → Chef → Critic → Shopper.finalize
Workflow — Loop orchestrator.py:216-261 Validation revise loop (max 1× re-Chef, pokud Critic vrátí passed=False)
Workflow — Conditional orchestrator.py:218-261 + tools/rohlik_mcp.py Větvení podle validace + fallback path při výpadku Rohlík MCP (prázdný PromotionContext + warning; cart sync failure → items bez syncu)
Multi-agent — Supervisor orchestrator.py:166-319 OrchestratorAgent řídí 4 podagenty procedurálně, drží transakční hranice a perzistenci
Multi-agent — Collaboration domain/schemas.py Typovaný handoff mezi agenty výhradně přes Pydantic v2 (žádný volný text mezi agenty — viz GOAL.md §13)

Diagram workflow

flowchart TD
    Start([POST /plans/generate]) --> Skeleton[Create plan skeleton<br/>status=pending]
    Skeleton --> Nutritionist[Nutritionist<br/>compute DailyTargets<br/>Mifflin–St Jeor]
    Nutritionist --> Recon[Shopper.recon<br/>get PromotionContext<br/>via Rohlík MCP]
    Recon -->|MCP unavailable| ReconFallback[empty PromotionContext<br/>+ warning_cs]
    Recon --> Chef
    ReconFallback --> Chef[Chef<br/>generate WeeklyMealDraft<br/>pantry-first, 7 days]
    Chef --> Critic{Critic<br/>validate}
    Critic -->|passed=true| Finalize
    Critic -->|passed=false<br/>allergy violation| Fail422[HTTP 422<br/>status=failed]
    Critic -->|passed=false<br/>other| Revise[Chef.run<br/>+ revision_prompt_cs]
    Revise --> Critic2{Critic 2nd run}
    Critic2 -->|passed=true| Finalize
    Critic2 -->|passed=false| Partial[status=partial<br/>+ warnings_cs]
    Partial --> Finalize
    Finalize[Shopper.finalize<br/>aggregate ShoppingList<br/>+ optional cart sync] -->|MCP cart fail| FinalizeFallback[items without sync<br/>+ warning_cs]
    Finalize --> Persist[Persist artifacts<br/>commit transaction]
    FinalizeFallback --> Persist
    Persist --> Done([WeeklyPlanResult])
Loading

Tech stack

  • Backend: Python 3.12, FastAPI, Claude Agent SDK, Pydantic v2, SQLAlchemy 2.x async, Alembic, PostgreSQL 16, Redis 7, uv, pytest, ruff, mypy strict
  • Frontend: Next.js 15 (App Router), TypeScript strict, Tailwind v4, shadcn/ui, TanStack Query, react-hook-form + zod
  • Infra: Docker Compose, devcontainer, GitHub Actions ready

Quick start

Vše běží v devcontaineru (.devcontainer/), takže nejjednodušší cesta je otevřít repo ve VS Code → „Reopen in Container“. Mimo devcontainer:

# 1) Spustit Postgres + Redis
docker compose up -d

# 2) Backend
cd backend
cp .env.example .env          # doplnit ANTHROPIC_API_KEY
uv sync
uv run alembic upgrade head
uv run uvicorn nutriflow.main:app --reload
# → http://localhost:8000/docs

# 3) Frontend (v jiném terminálu)
cd frontend
cp .env.local.example .env.local
pnpm install
pnpm dev
# → http://localhost:3000

Smoke test orchestrace:

curl -X POST http://localhost:8000/api/v1/plans/generate \
  -H "Content-Type: application/json" \
  -d '{"user_id":1,"week_start":"2026-05-18","regenerate":true}'
# → 202 Accepted s plan_id, dál sledovat:
# GET /api/v1/plans/{plan_id}/events    (SSE stream)
# GET /api/v1/plans/{plan_id}           (finální výsledek)

Demo

Generování plánu (SSE stream) Generate flow
Detail hotového plánu Plan detail

Screenshoty jsou v docs/screenshots/. Pokud chybí, viz Quick start — UI běží na http://localhost:3000.


Praktické použití

Toto není toy projekt. Řeší konkrétní reálný problém:

  • Vstup: profil uživatele + spíž + dietní restrikce + akce v Rohlík.cz
  • Výstup: 7-denní plán × N jídel denně + agregovaný nákupní seznam, vše v češtině
  • Hodnota: ušetří uživateli 30–60 minut týdně plánování, respektuje alergie (hard rule — žádný kompromis), využívá akce a obsah spíže
  • Robustnost: validační smyčka chytá nesedící makra a alergické chyby ještě před odevzdáním uživateli; výpadek externí služby (Rohlík MCP) neshazuje workflow — pouze degraduje funkčnost s explicitním varováním v češtině

Architekturní spec a všechny invariant je v GOAL.md, pravidla pro práci s kódem v CLAUDE.md.


Struktura repa

.
├── backend/                     # FastAPI + 5 LLM agentů + DB
│   ├── src/nutriflow/agents/    # Orchestrator, Nutritionist, Chef, Shopper, Critic
│   ├── src/nutriflow/prompts/   # České prompty pro agenty (markdown)
│   ├── src/nutriflow/domain/    # Pydantic schémy (typed handoff mezi agenty)
│   ├── src/nutriflow/tools/     # Rohlík MCP adapter
│   ├── src/nutriflow/db/        # SQLAlchemy modely + Alembic migrace
│   └── tests/                   # 158 testů (unit + integration proti real Postgres)
├── frontend/                    # Next.js 15 App Router, UI v češtině
│   └── src/app/                 # /profil, /spiz, /preference, /plans/generate, /plans/[id]
├── .claude/agents/              # 8 specializovaných subagentů pro Claude Code
├── .devcontainer/               # Reprodukovatelné dev prostředí (Postgres, Redis, tmux backend)
├── docs/                        # Architektonická dokumentace + screenshoty
├── GOAL.md                      # Autoritativní produkt/architecture spec
├── CLAUDE.md                    # Coding rules + Superpowers metodologie
└── PLAN.md                      # Progres napříč fázemi vývoje

Roadmap / known limitations

Projekt je MVP. Vědomě mimo scope (per GOAL.md §3):

  • Multi-user / autentifikace (single-user MVP, dev session token)
  • Jiné jazyky než čeština (cílová persona je česká domácnost)
  • Mobile native, billing, sociální features

Vědomě nedokončené ve scope (Fáza 7 podle CLAUDE.md):

  • POST /plans/{id}/feedback endpoint — ORM model MealFeedback existuje, endpoint a UI formulář ne. Plánováno jako navazující práce.

Co je vědomě kompletní:

  • 5 agentů s reálnými LLM voláními (žádné stuby v hot path)
  • Validační revise loop + Rohlík MCP fallback path
  • 158 testů (unit + integration), mypy strict zelený, ruff zelený, TypeScript strict zelený
  • Konec-konec flow z UI: profil → generovat plán → vidět progres → otevřít detail

Licence

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors