Replace the hello-world shell with the elevated design system, bilingual screens, recipe/extras data, and the interactive Mein Teller view. Co-authored-by: Cursor <cursoragent@cursor.com>
2.7 KiB
Pocket Pascal
Nutrition coach app for Steffi + David, built on Pascal Wirth's Ernährungsbaukasten (building-block nutrition system). Decision aid for "what do I eat right now" — not a tracker, not chat-first. See /docs/CONCEPT.md for the full spec.
Before touching this repo
Read /docs/CONCEPT.md in full. It is the source of truth for:
- Vision, non-goals, and the "app should make itself obsolete" success criterion
- The plate/building-block rules (protein, fat, carbs, veg/fruit) and portion sizes
- The module list and which phase each belongs to
- The decision log (section 8) — settled calls, do not re-litigate without a documented reason
- Open questions (section 7) — several are marked as UX calls Steffi owns; don't decide those unilaterally
Platform
Web/PWA. Not a native iOS app. Decided 2026-08-03 (see decision log) — only 2 users, no App Store needed, and the existing vanilla JS data model/logic carries over directly.
Target stack: React + shadcn/ui + Tailwind, hosted on Vercel or GitHub Pages (exact host still an open question — see concept doc §7).
Data model
/data/foods.json and /data/steps.json are extracted from the working prototype. Structured records, not display strings:
{ "id": "chicken_breast", "cat": "protein",
"name": { "de": "Hühnerbrust", "en": "Chicken breast" },
"v": { "de": "111 kcal · 24 g", "en": "111 kcal · 24 g" },
"f": "pick" }
f is "pick" (especially recommended), "caution" (enjoy mindfully), or absent. v is currently a display string per item — not yet normalized to a common basis. Pantry items are mostly per-100g; snack items are per-serving. Normalizing everything to per-100g is a prerequisite before quantities/calorie math can be added (see concept doc, Teller-Builder — Analyse-Layer module).
DE is the primary working language (Steffi edits it directly), EN is the general template — every user-facing string needs both. UI chrome strings (not food data) live in a separate dictionary, not duplicated HTML.
What's already built (reference only — not authoritative, rebuild in the new stack)
/reference/kueche_app.html — working single-file prototype (Claude Artifact). Has: plate rule view, pantry/knowledge base with search, Teller-Builder (multi-select plate builder with pick/caution scoring), settings with language switch. Useful for behavior reference, not for copy-pasting into the new stack as-is.
Working conventions
- Bilingual: every content change ships both
deandenin the same commit. - Curated, not exhaustive — see non-goals in the concept doc. Don't add a food-database API integration without checking §7 first.
- UX/UI decisions are Steffi's call (she's the UX designer on this project). Flag them, don't just decide.