Add Phase 1 Pocket Pascal UI: home, pantry, week plan, and plate.

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>
This commit is contained in:
Steffi Müller
2026-08-04 12:22:32 +02:00
parent 3785d08e97
commit a482bf5b09
60 changed files with 7366 additions and 72 deletions

979
handover/data/foods.json Normal file
View File

@@ -0,0 +1,979 @@
[
{
"id": "protein",
"cls": "protein",
"ic": "🥚",
"title": {
"de": "Protein",
"en": "Protein"
},
"thumb": {
"de": "Mindestens 1520 g Protein pro 100 g, wenig Zucker & wenig Fett, kurze Zutatenliste.",
"en": "At least 1520 g protein per 100 g, low sugar & low fat, short ingredient list."
},
"items": [
{
"id": "edamame",
"name": {
"de": "Edamame",
"en": "Edamame"
},
"v": {
"de": "125 kcal · 14 g",
"en": "125 kcal · 14 g"
}
},
{
"id": "egg",
"name": {
"de": "Ei (Größe M)",
"en": "Egg (size M)"
},
"v": {
"de": "137 kcal · 13 g",
"en": "137 kcal · 13 g"
}
},
{
"id": "pea_protein_strips",
"name": {
"de": "Erbsenproteinschnetzel",
"en": "Pea-protein strips"
},
"v": {
"de": "367 kcal · 61 g",
"en": "367 kcal · 61 g"
}
},
{
"id": "feta",
"name": {
"de": "Feta (leicht)",
"en": "Feta (light)"
},
"v": {
"de": "161 kcal · 19 g",
"en": "161 kcal · 19 g"
},
"f": "caution"
},
{
"id": "chicken_breast",
"name": {
"de": "Hühnerbrust",
"en": "Chicken breast"
},
"v": {
"de": "111 kcal · 24 g",
"en": "111 kcal · 24 g"
},
"f": "pick"
},
{
"id": "cottage_cheese",
"name": {
"de": "Hüttenkäse",
"en": "Cottage cheese"
},
"v": {
"de": "87 kcal · 12,3 g",
"en": "87 kcal · 12.3 g"
}
},
{
"id": "like_chicken",
"name": {
"de": "„Like Chicken\" (pflanzlich)",
"en": "\"Like Chicken\" (plant-based)"
},
"v": {
"de": "≈140 kcal · 18 g",
"en": "≈140 kcal · 18 g"
},
"approx": true
},
{
"id": "low_fat_quark",
"name": {
"de": "Magerquark",
"en": "Low-fat quark"
},
"v": {
"de": "67 kcal · 12 g",
"en": "67 kcal · 12 g"
}
},
{
"id": "beef_fillet",
"name": {
"de": "Rinderfilet / Tatar",
"en": "Beef fillet / tartare"
},
"v": {
"de": "112 kcal · 22 g",
"en": "112 kcal · 22 g"
},
"f": "pick"
},
{
"id": "silken_tofu",
"name": {
"de": "Seidentofu",
"en": "Silken tofu"
},
"v": {
"de": "≈55 kcal · 5 g",
"en": "≈55 kcal · 5 g"
},
"approx": true
},
{
"id": "skyr",
"name": {
"de": "Skyr",
"en": "Skyr"
},
"v": {
"de": "54 kcal · 10,3 g",
"en": "54 kcal · 10.3 g"
},
"f": "pick"
},
{
"id": "tempeh",
"name": {
"de": "Tempeh",
"en": "Tempeh"
},
"v": {
"de": "184 kcal · 19 g",
"en": "184 kcal · 19 g"
}
},
{
"id": "tofu",
"name": {
"de": "Tofu",
"en": "Tofu"
},
"v": {
"de": "129 kcal · 13 g",
"en": "129 kcal · 13 g"
}
}
],
"sub": {
"title": {
"de": "Milch & Joghurt",
"en": "Milk & yoghurt"
},
"items": [
{
"id": "greek_yogurt_10",
"name": {
"de": "Griech. Joghurt 10 %",
"en": "Greek yoghurt 10%"
},
"v": {
"de": "≈115 kcal · 5 g",
"en": "≈115 kcal · 5 g"
},
"approx": true
},
{
"id": "natural_yogurt",
"name": {
"de": "Naturjoghurt",
"en": "Natural yoghurt"
},
"v": {
"de": "≈61 kcal · 3,5 g",
"en": "≈61 kcal · 3.5 g"
},
"approx": true
},
{
"id": "oatly_barista",
"name": {
"de": "Oatly Barista",
"en": "Oatly Barista"
},
"v": {
"de": "≈68 kcal · 1 g (kaum Protein)",
"en": "≈68 kcal · 1 g (barely protein)"
},
"approx": true,
"f": "caution"
},
{
"id": "whole_milk",
"name": {
"de": "Vollmilch 3,5 %",
"en": "Whole milk 3.5%"
},
"v": {
"de": "≈64 kcal · 3,4 g",
"en": "≈64 kcal · 3.4 g"
},
"approx": true,
"f": "caution"
}
]
}
},
{
"id": "snack",
"cls": "snack",
"ic": "🥤",
"title": {
"de": "Proteinsnacks für Steffi",
"en": "Protein snacks for Steffi"
},
"thumb": {
"de": "Mindestens 15 g Protein pro Portion, unter 5 g Zucker, Fett unter 8 g — Zutatenliste beginnt nicht mit Zucker/Sirup/Schokolade.",
"en": "At least 15 g protein per serving, under 5 g sugar, fat under 8 g — ingredient list shouldnt open with sugar/syrup/chocolate."
},
"items": [
{
"id": "three_eggs",
"name": {
"de": "3 Eier",
"en": "3 eggs"
},
"v": {
"de": "≈205 kcal · 19 g",
"en": "≈205 kcal · 19 g"
},
"approx": true
},
{
"id": "cottage_berries",
"name": {
"de": "Hüttenkäse + Beeren",
"en": "Cottage cheese + berries"
},
"v": {
"de": "≈210 kcal · 25 g",
"en": "≈210 kcal · 25 g"
},
"approx": true
},
{
"id": "chickpea_waffles",
"name": {
"de": "Kichererbsenwaffeln 90g",
"en": "Chickpea waffles 90g"
},
"v": {
"de": "≈300 kcal · 17 g",
"en": "≈300 kcal · 17 g"
},
"approx": true,
"f": "caution"
},
{
"id": "pumpkin_seeds_30",
"name": {
"de": "Kürbiskerne 30g",
"en": "Pumpkin seeds 30g"
},
"v": {
"de": "≈171 kcal · 9 g",
"en": "≈171 kcal · 9 g"
},
"approx": true,
"f": "caution"
},
{
"id": "lentil_waffles",
"name": {
"de": "Linsenwaffeln 90g",
"en": "Lentil waffles 90g"
},
"v": {
"de": "≈300 kcal · 18 g",
"en": "≈300 kcal · 18 g"
},
"approx": true,
"f": "caution"
},
{
"id": "protein_bar",
"name": {
"de": "Magerer Proteinriegel",
"en": "Lean protein bar"
},
"v": {
"de": "≈180 kcal · 20 g",
"en": "≈180 kcal · 20 g"
},
"approx": true
},
{
"id": "protein_rice_pudding",
"name": {
"de": "Proteinmilchreis (2x)",
"en": "Protein rice pudding (2x)"
},
"v": {
"de": "≈340 kcal · 40 g",
"en": "≈340 kcal · 40 g"
},
"approx": true
},
{
"id": "protein_pudding",
"name": {
"de": "Proteinpudding",
"en": "Protein pudding"
},
"v": {
"de": "≈90 kcal · 20 g",
"en": "≈90 kcal · 20 g"
},
"approx": true,
"f": "pick"
},
{
"id": "protein_shake",
"name": {
"de": "Proteinshake 40g",
"en": "Protein shake 40g"
},
"v": {
"de": "≈150 kcal · 30 g",
"en": "≈150 kcal · 30 g"
},
"approx": true,
"f": "pick"
},
{
"id": "turkey_breast_pack",
"name": {
"de": "Putenbrust, 1 Packung",
"en": "Turkey breast, 1 pack"
},
"v": {
"de": "≈130 kcal · 28 g",
"en": "≈130 kcal · 28 g"
},
"approx": true,
"f": "pick"
},
{
"id": "smoked_tofu_cubes",
"name": {
"de": "Räuchertofu-Würfel",
"en": "Smoked tofu cubes"
},
"v": {
"de": "≈225 kcal · 25 g",
"en": "≈225 kcal · 25 g"
},
"approx": true
},
{
"id": "skyr_honey",
"name": {
"de": "Skyr/Griech. Joghurt 10% + Honig, 250g+",
"en": "Skyr/Greek yoghurt 10% + honey, 250g+"
},
"v": {
"de": "≈180 kcal · 25 g",
"en": "≈180 kcal · 25 g"
},
"approx": true
}
],
"recipe": {
"title": {
"de": "Rezept: Whey-Waffeln",
"en": "Recipe: Whey waffles"
},
"text": {
"de": "40 g Whey-Protein + 1 Ei + 40 g Haferflocken (fein gemahlen) + 60 ml Milch/Wasser verquirlen. ≈25 g Protein.",
"en": "Whisk 40 g whey protein + 1 egg + 40 g oats (finely ground) + 60 ml milk/water. ≈25 g protein."
}
}
},
{
"id": "obst",
"cls": "obst",
"ic": "🍎",
"title": {
"de": "Obst",
"en": "Fruit"
},
"thumb": {
"de": "Frisch oder tiefgekühlt ohne Zuckerzusatz, Saison bevorzugen.",
"en": "Fresh or frozen without added sugar, prefer whats in season."
},
"items": [
{
"id": "apple",
"name": {
"de": "Apfel",
"en": "Apple"
},
"v": {
"de": "Vit. C, Kalium, Kupfer",
"en": "Vit. C, potassium, copper"
}
},
{
"id": "banana",
"name": {
"de": "Banane",
"en": "Banana"
},
"v": {
"de": "Kalium, B6, C, Magnesium",
"en": "Potassium, B6, C, magnesium"
},
"f": "caution"
},
{
"id": "blueberry",
"name": {
"de": "Blaubeere",
"en": "Blueberry"
},
"v": {
"de": "Vit. K, C, Mangan",
"en": "Vit. K, C, manganese"
},
"f": "pick"
},
{
"id": "strawberry",
"name": {
"de": "Erdbeere",
"en": "Strawberry"
},
"v": {
"de": "Vit. C, Mangan, Folsäure, Kalium",
"en": "Vit. C, manganese, folate, potassium"
}
},
{
"id": "granadilla",
"name": {
"de": "Granadilla (≈ Passionsfrucht)",
"en": "Granadilla (≈ passion fruit)"
},
"v": {
"de": "Vit. C, A, Kalium, B2",
"en": "Vit. C, A, potassium, B2"
},
"approx": true
},
{
"id": "pomegranate",
"name": {
"de": "Granatapfel",
"en": "Pomegranate"
},
"v": {
"de": "Vit. C, K, Folsäure, Kalium, B6",
"en": "Vit. C, K, folate, potassium, B6"
},
"f": "pick"
},
{
"id": "mango",
"name": {
"de": "Mango",
"en": "Mango"
},
"v": {
"de": "Vit. C, A, B6, Folsäure, Kupfer",
"en": "Vit. C, A, B6, folate, copper"
},
"f": "pick"
},
{
"id": "nectarine",
"name": {
"de": "Nektarine",
"en": "Nectarine"
},
"v": {
"de": "Vit. C, A, Kalium, E, Niacin",
"en": "Vit. C, A, potassium, E, niacin"
}
},
{
"id": "orange",
"name": {
"de": "Orange",
"en": "Orange"
},
"v": {
"de": "Vit. C, Folsäure, Kalium, Calcium",
"en": "Vit. C, folate, potassium, calcium"
}
},
{
"id": "passion_fruit",
"name": {
"de": "Passionsfrucht",
"en": "Passion fruit"
},
"v": {
"de": "Vit. C, A, Kalium, Eisen",
"en": "Vit. C, A, potassium, iron"
},
"approx": true
},
{
"id": "plum",
"name": {
"de": "Pflaume",
"en": "Plum"
},
"v": {
"de": "Vit. C, K, Kalium, A, Kupfer",
"en": "Vit. C, K, potassium, A, copper"
}
},
{
"id": "grapes",
"name": {
"de": "Trauben",
"en": "Grapes"
},
"v": {
"de": "Vit. K, C, Kalium, Kupfer, Mangan",
"en": "Vit. K, C, potassium, copper, manganese"
},
"f": "caution"
}
]
},
{
"id": "gemuese",
"cls": "gemuese",
"ic": "🥦",
"title": {
"de": "Gemüse",
"en": "Vegetables"
},
"thumbLabel": {
"de": "Tipp",
"en": "Tip"
},
"thumb": {
"de": "TK-Gemüse ist völlig okay, wenns schnell gehen muss — genauso nährstoffreich wie frisch, einfach ohne Salz-/Fettzusatz wählen.",
"en": "Frozen veg is perfectly fine when time is short — just as nutrient-rich as fresh, just pick it without added salt/fat."
},
"items": [
{
"id": "broccoli",
"name": {
"de": "Brokkoli",
"en": "Broccoli"
},
"v": {
"de": "Vit. C, K, Folsäure, Eisen",
"en": "Vit. C, K, folate, iron"
}
},
{
"id": "mushrooms",
"name": {
"de": "Champignons",
"en": "Mushrooms"
},
"v": {
"de": "Kalium, Selen, Kupfer, B2",
"en": "Potassium, selenium, copper, B2"
}
},
{
"id": "iceberg_lettuce",
"name": {
"de": "Eisbergsalat",
"en": "Iceberg lettuce"
},
"v": {
"de": "Vit. K, A, Folsäure, Kalium — nährstoffarm",
"en": "Vit. K, A, folate, potassium — low nutrient density"
},
"f": "caution"
},
{
"id": "lambs_lettuce",
"name": {
"de": "Feldsalat",
"en": "Lambs lettuce"
},
"v": {
"de": "Vit. A, C, Folsäure, Eisen",
"en": "Vit. A, C, folate, iron"
},
"f": "pick"
},
{
"id": "cucumber",
"name": {
"de": "Gurke",
"en": "Cucumber"
},
"v": {
"de": "Vit. K, Kalium, Mangan",
"en": "Vit. K, potassium, manganese"
}
},
{
"id": "carrot",
"name": {
"de": "Karotte",
"en": "Carrot"
},
"v": {
"de": "Vit. A, K, Kalium, B6",
"en": "Vit. A, K, potassium, B6"
},
"f": "pick"
},
{
"id": "bell_pepper",
"name": {
"de": "Paprika",
"en": "Bell pepper"
},
"v": {
"de": "Vit. C, A, B6, E",
"en": "Vit. C, A, B6, E"
}
},
{
"id": "spinach",
"name": {
"de": "Spinat",
"en": "Spinach"
},
"v": {
"de": "Vit. K, A, Folsäure, Eisen",
"en": "Vit. K, A, folate, iron"
},
"f": "pick"
},
{
"id": "tomato",
"name": {
"de": "Tomate",
"en": "Tomato"
},
"v": {
"de": "Vit. C, K, Kalium, Folsäure",
"en": "Vit. C, K, potassium, folate"
}
},
{
"id": "zucchini",
"name": {
"de": "Zucchini",
"en": "Zucchini"
},
"v": {
"de": "Vit. C, Kalium, B6, Mangan",
"en": "Vit. C, potassium, B6, manganese"
}
}
],
"note": {
"de": "Hinweis: Süßkartoffel, Kochbanane und Erbsen zählen hier als Kohlenhydratquelle, Avocado als Fettquelle — siehe dort.",
"en": "Note: sweet potato, plantain and peas count here as a carb source, avocado as a fat source — see those cards."
}
},
{
"id": "fett",
"cls": "fett",
"ic": "🥑",
"title": {
"de": "Fett",
"en": "Fat"
},
"thumb": {
"de": "Native/kaltgepresste Öle, ungesalzene & ungeröstete Nüsse/Kerne, Zutatenliste = nur die Zutat selbst.",
"en": "Native/cold-pressed oils, unsalted & unroasted nuts/seeds, ingredient list = just the ingredient itself."
},
"items": [
{
"id": "avocado",
"name": {
"de": "Avocado",
"en": "Avocado"
},
"v": {
"de": "217 kcal · 12,5 g",
"en": "217 kcal · 12.5 g"
}
},
{
"id": "chia_seeds",
"name": {
"de": "Chiasamen",
"en": "Chia seeds"
},
"v": {
"de": "486 kcal · 31 g",
"en": "486 kcal · 31 g"
},
"f": "pick"
},
{
"id": "pumpkin_seeds",
"name": {
"de": "Kürbiskerne",
"en": "Pumpkin seeds"
},
"v": {
"de": "570 kcal · 44 g",
"en": "570 kcal · 44 g"
}
},
{
"id": "linseed_oil",
"name": {
"de": "Leinöl",
"en": "Linseed oil"
},
"v": {
"de": "837 kcal · 93 g",
"en": "837 kcal · 93 g"
},
"f": "pick"
},
{
"id": "almonds",
"name": {
"de": "Mandeln",
"en": "Almonds"
},
"v": {
"de": "612 kcal · 55 g",
"en": "612 kcal · 55 g"
}
},
{
"id": "olive_oil",
"name": {
"de": "Olivenöl",
"en": "Olive oil"
},
"v": {
"de": "857 kcal · 91,5 g",
"en": "857 kcal · 91.5 g"
}
},
{
"id": "walnuts",
"name": {
"de": "Walnüsse",
"en": "Walnuts"
},
"v": {
"de": "674 kcal · 62,5 g",
"en": "674 kcal · 62.5 g"
},
"f": "pick"
}
]
},
{
"id": "kh",
"cls": "kh",
"ic": "🌾",
"title": {
"de": "Kohlenhydrate",
"en": "Carbohydrates"
},
"thumb": {
"de": "Vollkorn als erste Zutat, wenig zugesetzter Zucker. Faustregel 10:1 — pro 10 g Kohlenhydrate mind. 1 g Ballaststoffe (z. B. 30 g KH → mind. 3 g Ballaststoffe).",
"en": "Whole grain as the first ingredient, low added sugar. 10:1 rule of thumb — at least 1 g fibre per 10 g carbs (e.g. 30 g carbs → at least 3 g fibre)."
},
"items": [
{
"id": "brown_lentils",
"name": {
"de": "Berglinsen",
"en": "Brown lentils"
},
"v": {
"de": "319 kcal · ≈46 g",
"en": "319 kcal · ≈46 g"
},
"approx": true,
"f": "pick"
},
{
"id": "buckwheat",
"name": {
"de": "Buchweizen",
"en": "Buckwheat"
},
"v": {
"de": "343 kcal · 71,5 g",
"en": "343 kcal · 71.5 g"
}
},
{
"id": "puffed_spelt",
"name": {
"de": "Dinkel gepufft",
"en": "Puffed spelt"
},
"v": {
"de": "≈338 kcal · 70 g",
"en": "≈338 kcal · 70 g"
},
"approx": true
},
{
"id": "spelt_pasta",
"name": {
"de": "Dinkel-Vollkorn-Nudeln",
"en": "Whole-grain spelt pasta"
},
"v": {
"de": "≈338 kcal · 70 g",
"en": "≈338 kcal · 70 g"
},
"approx": true
},
{
"id": "peas",
"name": {
"de": "Erbsen",
"en": "Peas"
},
"v": {
"de": "93 kcal · 10,4 g",
"en": "93 kcal · 10.4 g"
}
},
{
"id": "oats",
"name": {
"de": "Haferflocken",
"en": "Oats"
},
"v": {
"de": "372 kcal · 66,3 g",
"en": "372 kcal · 66.3 g"
}
},
{
"id": "millet",
"name": {
"de": "Hirse",
"en": "Millet"
},
"v": {
"de": "363 kcal · 69 g",
"en": "363 kcal · 69 g"
},
"f": "caution"
},
{
"id": "chickpeas",
"name": {
"de": "Kichererbsen",
"en": "Chickpeas"
},
"v": {
"de": "108 kcal · 14,2 g",
"en": "108 kcal · 14.2 g"
}
},
{
"id": "chickpea_pasta",
"name": {
"de": "Kichererbsennudeln / -couscous",
"en": "Chickpea pasta / couscous"
},
"v": {
"de": "≈335 kcal · 50 g",
"en": "≈335 kcal · 50 g"
},
"approx": true
},
{
"id": "plantain",
"name": {
"de": "Kochbanane",
"en": "Plantain"
},
"v": {
"de": "≈122 kcal · 32 g",
"en": "≈122 kcal · 32 g"
},
"approx": true,
"f": "caution"
},
{
"id": "lentil_pasta",
"name": {
"de": "Linsennudeln",
"en": "Lentil pasta"
},
"v": {
"de": "≈335 kcal · 52 g",
"en": "≈335 kcal · 52 g"
},
"approx": true
},
{
"id": "quinoa",
"name": {
"de": "Quinoa",
"en": "Quinoa"
},
"v": {
"de": "368 kcal · 64,2 g",
"en": "368 kcal · 64.2 g"
}
},
{
"id": "red_lentils",
"name": {
"de": "Rote Linsen",
"en": "Red lentils"
},
"v": {
"de": "326 kcal · ≈52 g",
"en": "326 kcal · ≈52 g"
},
"approx": true,
"f": "pick"
},
{
"id": "sweet_potato",
"name": {
"de": "Süßkartoffel",
"en": "Sweet potato"
},
"v": {
"de": "86 kcal · 20,1 g",
"en": "86 kcal · 20.1 g"
},
"f": "caution"
},
{
"id": "french_lentils",
"name": {
"de": "Tellerlinsen",
"en": "French lentils"
},
"v": {
"de": "234 kcal · ≈34 g",
"en": "234 kcal · ≈34 g"
},
"approx": true,
"f": "pick"
}
]
}
]

66
handover/data/steps.json Normal file
View File

@@ -0,0 +1,66 @@
[
{
"n": 1,
"cls": "g",
"title": {
"de": "Protein",
"en": "Protein"
},
"qty": {
"de": "30 g pro Mahlzeit",
"en": "30 g per meal"
},
"text": {
"de": "Bspw. 125 g Rinderfilet, 300 g Skyr, 40 g Proteinpulver, 50 g Erbsenproteingeschnetzeltes oder 5 Eier. 150 g am Tag insgesamt.",
"en": "E.g. 125 g beef fillet, 300 g Skyr, 40 g protein powder, 50 g pea-protein strips, or 5 eggs. 150 g total per day."
}
},
{
"n": 2,
"cls": "t",
"title": {
"de": "Obst ODER Gemüse",
"en": "Fruit OR Vegetables"
},
"qty": {
"de": "eine Portion",
"en": "one portion"
},
"text": {
"de": "Obst = 100 g oder eine geballte Faust. Gemüse = 200 g oder 2 Handvoll.",
"en": "Fruit = 100 g or one clenched fist. Vegetables = 200 g or 2 handfuls."
}
},
{
"n": 3,
"cls": "o",
"title": {
"de": "Fett",
"en": "Fat"
},
"qty": {
"de": "",
"en": ""
},
"text": {
"de": "15 g Samen/Kerne/Nüsse (≈20 Stück, 1 EL) · ¼ Avocado · 1 EL Öl (15 g) — Nussöl außer Erdnuss, Olivenöl, Leinsamenöl.",
"en": "15 g seeds/nuts (≈20 pieces, 1 tbsp) · ¼ avocado · 1 tbsp oil (15 g) — nut oil except peanut, olive oil, linseed oil."
}
},
{
"n": 4,
"cls": "s",
"title": {
"de": "Kohlenhydrate",
"en": "Carbohydrates"
},
"qty": {
"de": "",
"en": ""
},
"text": {
"de": "75 g Reis/Nudeln/Brot (trocken) · ca. 250 g rohe Kartoffeln (≈3 mittelgroße) · 50 g Haferflocken (≈5 gehäufte EL).",
"en": "75 g rice/pasta/bread (dry) · approx. 250 g raw potatoes (≈3 medium) · 50 g oats (≈5 heaped tbsp)."
}
}
]