Greenfield-Repo, Phase 0 bis Phase A in einem Initial-Commit, plus
Pre-Flight-P1–P7. Strategie B (eigene App, Peer im Mana-Ökosystem),
nicht Subprojekt. Live-Cut am gleichen Tag.
Stats
2 Commits, +10 111 / −14 LoC, 106 Files. 61× .ts, 13× .svelte,
13× .json. Top-Dirs api/routes (13 %), web/lib (12 %), api/db
(11 %). Active-Time-Messung 2 Min (Single-Burst-Commits via
claudebot — reale Vorarbeit war stundenlang, Commits sind das
Push-Event).
Was im Initial-Commit drin ist
- Repo-Skelett. Turborepo + pnpm + Bun für API, Drizzle +
Postgres mit
pgSchema('nutriphi'). Ports 3086 (API), 3087
(Web).
- DB-Schema.
meals, meals.foods[], favorites, goals,
analyses, photos, account_deletion_requests.
- API-Routen. Photos-Upload (Proxy zu mana-media),
/api/v1/analysis/photo + /api/v1/analysis/text,
Meal-CRUD, Summary, Favorites, Goals, DSGVO-Export.
- AI-Pipeline. AI SDK + AnthropicCompatibleProvider gegen
${MANA_LLM_URL}/v1, generateObject({ schema, prompt, image })
mit MealAnalysisSchema aus @mana/shared-types.
- Web-Frontend. SvelteKit 2 + Svelte 5 (runes-only), Camera-
Capture, Photo-Upload, Manual-Entry-Sheet, Today-Dashboard,
Meals-List, Favorites, Goals, Account.
- Föderations-Boilerplate via
@mana/shared-app-tpl:
/healthz, /.well-known/mana-app.json, share-receive,
tools-router, search, dsgvo-export — alle aus dem shared-tpl.
- Pre-Flight P1–P7 (zweiter Commit): Verdaccio-Pakete fix,
DNS bereit, Cloudflared-Tunnel-Konfig, Health-Probe gegen Mac
Mini, JWKS-Cache-Test, Compose-Project-Name fix
(
manacore-monorepo).
Architektur-Entscheidungen
- Strategie B (eigene App) statt food-Modul-Erweiterung. Plan
in
mana/docs/playbooks/NUTRIPHI_GREENFIELD.md. food-Modul
bleibt parallel laufen (Brücke nur via mana-share-Push).
- Server-authoritative MVP, keine Dexie. Local-First später
via mana-sync, nicht eigener Stack.
- AI-Wire-Format aus
@mana/shared-types (MealAnalysisSchema,
NutritionData, AnalyzedFood, AiResponseEnvelope). Single
Source.
- Photo-Upload via mana-media, nicht direkt zur LLM-API.
Verein-Plattform ist einziger LLM-Pfad (Compliance + Cost-
Tracking).
- Encryption initial AUS, dokumentierter Trigger-Pfad in
docs/ENCRYPTION_PATH.md. Wenn Compliance es erzwingt:
meals.description, meals.foods[].name, favorites.{name, description} werden encrypted.
- Föderation über
@mana/shared-app-tpl. Drift-Schutz durch
Boilerplate, nicht Hand-Implementation.
- Compliance-Veto-Override für Live-Cut: siehe Memory
project_nutriphi_live.md. Pre-Flight-Liste in
nutriphi/STATUS.md.
Trade-offs
- +10 097 LoC netto in einem Initial-Commit ist Greenfield-
Pattern, nicht Anti-Pattern: alles musste zusammen funktionieren,
Schnitt wäre kosmetisch. STATUS.md trackt die Phasen.
- Compliance-Veto-Override kostet Vertrauen, wenn nicht
schnell nachgezogen wird. Encryption-Pfad ist dokumentiert,
Trigger explizit — aber nicht aktiv.
- food-Modul bleibt parallel statt geschlossen. Doppel-Pflege-
Last für eine Weile; verhindert aber Daten-Verlust für
Bestands-User.
Offene Punkte (Pre-Flight + Phase B)
- Compliance-Audit-Erinnerung in
STATUS.md muss vor jedem
Major-Schema-Schritt sichtbar bleiben.
- food-Modul-Cutover-Plan — wann genau ziehen wir den Stecker?
- Encryption-Trigger-Watch — wann passiert die erste konkrete
Anforderung?
- Phase B: Local-First via mana-sync — nicht heute, aber Plan.
- Web-Theme-Migration (Phase 7 in CLAUDE.md): oklch → HSL für
Drift-Compliance.