commit 72ce56edebb7bc12ff42fd19d98ac9023695eb71 Author: jp Date: Wed Aug 26 02:55:33 2026 +0100 Initial meal-suggestion skill (logic + template; live data git-ignored) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d60332a --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +# Live data — keep out of version control. +# Your current stock and 7-day meal log drift as you eat / the daily job runs. +inventory.json +meal-history.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..f9795ed --- /dev/null +++ b/README.md @@ -0,0 +1,49 @@ +# meal-suggestion skill + +Kitchen-inventory + high-protein meal suggestion skill for Hermes Agent. + +- Tracks a kitchen inventory (`inventory.json`). +- Emails **2 daily meal suggestions** (from stock) every day at 09:00. +- Emails a **weekly £30 shopping list** (Mondays 08:00) with a per-store + price comparison (Lidl preferred) and a plain-text fallback. +- Targets ~190–200 g protein/day for a recovering burns victim (2 g/kg at + ~95–100 kg, age 46), avoids buying red meat, allows Amazon Prime + low-cost + condiments/flavourings/micronutrients when budget allows. + +## Files +- `SKILL.md` — the skill (rules, shop logic, 7-day history removal flow). +- `references/` — email template, protein sources, Eastbourne shop ratios, + meal-history logger spec, protein-target notes. +- `inventory.json` — **LIVE DATA** (your current stock). Git-ignored; a + `inventory.example.json` is committed as a template. +- `meal-history.json` — **LIVE DATA** (rolling 7-day meal log). Git-ignored. + +## Setup +1. Copy the skill into your Hermes skills dir: + ``` + cp -r meal-suggestion ~/.hermes/skills/ + ``` +2. Create `inventory.json` from the example: + ``` + cp ~/.hermes/skills/meal-suggestion/inventory.example.json \ + ~/.hermes/skills/meal-suggestion/inventory.json + ``` +3. Ensure the email sender exists at `~/.hermes/.env`: + ``` + EMAIL_ADDRESS=hpm6@txt3.com + EMAIL_PASSWORD="your-app-password" + EMAIL_SMTP_HOST=smtp.gmail.com + EMAIL_SMTP_PORT=587 + ``` +4. Place the send helper: + `scripts/meal/send_meal_email.py` (reads creds from `~/.hermes/.env`, + supports `--subject --html --text --to`). +5. Create the two cron jobs (Hermes `cronjob` tool): + - Daily 09:00: `0 9 * * *` — load skill `meal-suggestion`, read inventory, + build 2 meals, email to `jp@txt3.com`, record into `meal-history.json`. + - Monday 08:00: `0 8 * * 1` — load skill `meal-suggestion`, build £30 Lidl + list + comparison, email to `jp@txt3.com`. + +See `SKILL.md` for the full behavior spec and the removal-from-history flow. + +> General guidance, not medical advice — defer to clinical/dietitian team. diff --git a/SKILL.md b/SKILL.md new file mode 100644 index 0000000..0b6c47b --- /dev/null +++ b/SKILL.md @@ -0,0 +1,190 @@ +--- +name: meal-suggestion +description: "Kitchen inventory + high-protein meal suggestions. Tracks ingredients, suggests 2 daily meals from stock, and a weekly £30 shopping list. Emails jp@txt3.com from hpm6@txt3.com. For a recovering burns victim on a high-protein diet avoiding red meat." +version: 1.0.0 +author: agent +license: MIT +--- + +# Meal Suggestion + +## Context +User **jp** is a recovering burns victim who must eat a **high-protein diet** and wants to +**avoid red meat**. This skill keeps a running kitchen inventory and produces: + +- **2 daily meal suggestions** (from what's in stock) — emailed every day at 09:00. +- **A weekly shopping list** on a **£30 budget** — emailed Mondays. + +- **Sender:** `hpm6@txt3.com` (the agent's Gmail, via smtp.gmail.com:587). +- **Recipient:** `jp@txt3.com`. + +## Inventory +File: `/home/jp/.hermes/skills/meal-suggestion/inventory.json` + +Schema: +```json +{ + "updated": "YYYY-MM-DD", + "diet": { "goal": "high-protein", "avoid": ["red meat"] }, + "items": [ + { "name": "Eggs", "qty": 12, "unit": "count", "category": "protein", "notes": "" } + ] +} +``` +- `category` is one of: `protein`, `veg`, `fruit`, `dairy`, `grain`, `tinned`, + `frozen`, `condiment`, `other`. +- Keep `qty` as a number with a `unit` (`count`, `g`, `ml`, `pack`, `can`, `tbsp`, etc.). + +### Updating the inventory (you own this) +- When the user says they **used/consumed** ingredients, decrement or remove the + matching item(s) with the `patch` tool, then bump `updated` to today. +- When the user **bought** items, add or increase them. +- Do **NOT** auto-consume on a daily suggestion — the user tells you what was + actually eaten. The daily email only *proposes* meals. + +## Meal suggestion rules +- Suggest **two meals** per day (e.g. lunch + dinner) using only items currently in the inventory. +- **Maximize protein** per meal; lead with a protein source. +- **Avoid red meat for PURCHASES** (beef, lamb, pork, venison, bacon, gammon) — the + weekly shopping list must NEVER suggest red meat to buy. +- **If red meat is already in the inventory, it stays usable** in daily meal + suggestions so it isn't wasted. Deprioritize it behind the high-protein + non-red-meat options, but do NOT exclude it just because it's red meat. +- Preferred proteins (lead with these): eggs, chicken, turkey, fish, prawns, tofu, + tempeh, lentils, beans, chickpeas, Greek yogurt, cottage cheese, quark, skim milk, + whey, tinned tuna/salmon, edamame, halloumi. +- **Protein target:** ~**190–200 g/day** (user ~95–100 kg × 2 g/kg — burns recovery + + preserving lean mass while losing ~15 kg fat). Aim each meal at **~90–100 g protein** + and **STATE the per-meal and daily protein totals** in the email. If 2 meals can't + reach ~190 g with current stock, say so and suggest a third hit (whey shake, extra + eggs, Greek yogurt) to close the gap. +- **Weight-loss framing:** keep meals calorie-moderate — bulk with veg, go easy on oven + chips, white bread, and oil; lead with lean protein. Fat loss comes from a mild calorie + deficit, NOT from cutting protein. +- **Note:** this is general guidance, not medical advice — defer to the user's + clinical/dietitian team and keep hydration up on a high-protein intake. +- Each meal block: **name**, the **ingredients + approx amounts** used, a short + **2–3 step method**, and the **protein total (g)**. +- If the inventory is too sparse for a real meal, say so and list the top 2–3 + things to buy. + +## Email format +Send via the helper (it reads SMTP creds from `~/.hermes/.env`): +```bash +python3 /home/jp/.hermes/scripts/meal/send_meal_email.py \ + --subject "Your Meals for Today — " \ + --html /tmp/meal_today.html \ + --to jp@txt3.com +``` +HTML must be self-contained (inline CSS), mobile-friendly, dark-on-light, with a +header, the two meal cards, and a footer note +("Reply to tell me what you used and I'll update the inventory"). +Use the scaffold in `references/email-template.md`. + +## Weekly shopping list (Mondays) +- Budget **£30** total. Use realistic UK supermarket prices (Tesco/Asda/Sainsbury's). +- Prioritize protein, then veg/fruit, then staples. Show item, est. price, and a + running total that lands in range. +- Email subject: `Weekly Shopping List — `. +- This does **not** modify the inventory. +- **Micronutrients & vitamins (user is 46):** you MAY include 1–2 low-price + health-support items on the weekly shop when budget allows under £30, to support + overall health alongside the high-protein diet. Sensible, evidence-aware picks for a + 46-year-old on high protein with limited red meat: vitamin D (low sun exposure risk), + omega-3 (fish-oil or flax/chia), magnesium (recovery/sleep), and a B12 source if + relying on eggs/dairy over meat. Prefer food-first (oily fish, leafy greens, seeds); + only add a supplement line (e.g. "Vitamin D3 1000–2000 IU", "Omega-3 caps") when + budget permits and label it clearly as a general-health suggestion, NOT medical advice. + Keep each low-cost and behind protein + veg + staples in priority. +- **Condiments & flavourings:** you MAY include a small item or two from the + spice/sauce/condiment aisle (e.g. fresh herbs, lemon, soy, spices, stock cubes, + passata, a hot sauce) so meals are more interesting — keep each low-price and only + if budget allows under £30. These are optional "interest" buys; protein + veg + + staples come first. + +## Where to shop (Eastbourne) — single-shop, per-store totals +User is in **Eastbourne**. Local options: **Lidl, Sainsbury's, Co-op, Tesco Express, +and a local Londis** (good deal on milk: 2L £1.40). Memberships: Tesco Clubcard, Co-op member. + +**User preference (confirmed): Lidl is the PREFERRED shop.** It's a weekly trip so the +extra distance is acceptable; Lidl gives the best value AND leaves budget for essential +micronutrients and the occasional treat. The other stores (Tesco Express, Sainsbury's, +Co-op, Londis) are shown ONLY for comparison, and as the fallback for days he doesn't +want to make the longer journey. + +Grounded in Which? 2026 monthly price index (93-item basket; Lidl £160.70 baseline): +- Lidl ≈ 1.00x — **CHEAPEST, preferred** (whey, eggs, chicken, lentils, frozen veg, milk, tuna, bananas, plus fruit/veg for micronutrients + a treat) +- Tesco superstore w/ Clubcard ≈ 1.17x; **Tesco Express** adds convenience premium → ~1.22x WITH Clubcard +- Sainsbury's w/ Nectar ≈ 1.17x +- Co-op ≈ 1.30x nominal — membership = annual dividend, not instant discount +- Londis ≈ 1.25–1.35x indicative; milk cheap but full basket pricier → top-up only + +**Weekly email MUST:** +1) Build ONE single-shop basket available at **Lidl** (the default recommended shop). +2) Show a **"Same basket — where else?" comparison table** (Lidl / Tesco Express Clubcard + / Sainsbury's Nectar / Co-op member / Londis) with estimated totals + delta vs Lidl. + Label as ESTIMATES from Which? 2026 ratios + known local prices (Londis milk £1.40), + NOT live scans. Do NOT run a live web search. +3) **Recommend Lidl** as the primary shop — note it's a weekly trip so distance is fine + and it best fits the budget incl. micronutrients/treats. List the others as fallback + only ("if you'd rather not make the trip: Tesco Express is closest"). +4) Single-shop the list — don't split across stores UNLESS a specific item's local price + is **definitely known** to be lower elsewhere (e.g. Londis milk 2L at £1.40 is a + confirmed cheaper line). Estimated basket ratios alone are NOT grounds to split. +5) You MAY suggest ordering certain items via **Amazon Prime** when it's clearly better + value (e.g. whey protein 1 kg is often cheaper per gram on Prime than in-store). If + used, show the Prime item separately and note it's a delivery, not a store trip. +6) Robustness: the comparison table must be clearly visible. ALSO attach a plain-text + alternative (send_meal_email.py --text) so the comparison survives even if the mail + client strips HTML tables. + +## Split-store & Amazon Prime rules +- **Default: single shop at Lidl.** Do NOT split the basket across stores based only on + the estimated Which? 2026 ratios — those are approximations. Splitting is allowed ONLY + when a **specific item's local price is definitely known** to be lower elsewhere + (e.g. Londis milk 2L at £1.40 is a confirmed cheaper line, so milk could be a Londis + top-up). State the known price when you do this. +- **Amazon Prime:** you MAY suggest ordering specific items via Amazon Prime, but ONLY + when it is **genuinely better value or more convenient** — do not assume Prime is + automatically cheaper. Reality check (2026): Lidl whey is ~£9.99/500g (≈£20/kg); + Prime branded whey (Bulk/Myprotein) is typically £18–£27/kg, so it's roughly comparable + and Lidl often wins on a single trip. Suggest Prime for whey ONLY when (a) a confirmed + deal drops it below Lidl's per-kg price, or (b) the user prefers delivery over the trip. + When suggesting, show both prices side by side and state which is cheaper. Show any + Prime item as a separate "delivered via Prime" line, distinct from the in-store Lidl list. +- When neither applies, keep everything in the one Lidl list. + +## 7-day meal history (for inventory removal) +A rolling log lives at `meal-history.json` (same skill dir). The **daily job UPSERTS** +its two meal entries each run (replaces any same `date`+`meal`, so re-runs don't +duplicate) and **prunes entries older than 7 days**. Each entry: +`{ date, weekday, meal: "lunch"|"dinner", name, items: [{name, qty, unit}] }`. +Only substantive food items are logged — pure condiments (oil, salt, pepper, spices, +garlic, soy, etc.) and the optional "third hit" snack are NOT logged. Units match +`inventory.json` where possible. + +**On-demand removal (user says e.g. "remove Wednesday's dinner from inventory"):** +1) Resolve the weekday/date to the matching entry (weekday is relative to today; if + ambiguous, ask). 2) For each `item` in that entry, find the matching inventory entry + by name (case-insensitive). 3) Subtract `qty`; if the result is ~0 or negative, + remove the inventory entry; else update it. 4) Skip any item NOT present in inventory + (e.g. a suggested-but-never-bought item) and say so. 5) Bump `updated` to today. +6) Confirm what was removed. The user can also say "remove all of " to drop both + meals, or name a specific item to override. + +## On-demand (chat) +If the user lists ingredients in chat, add them to the inventory and optionally +give an immediate 2-meal suggestion. If they ask "what should I eat today?", read +the inventory and suggest now (and offer to email it). + +## Automation +Two cron jobs (created via the `cronjob` tool), both loading this skill: +- Daily 09:00 — `0 9 * * *` — 2 meal suggestions. +- Monday 08:00 — `0 8 * * 1` — weekly £30 shopping list. + +Delivery is `local` because the email itself is the deliverable; check +`cronjob action=list` / logs if a send ever seems missing. + +## References +- `references/protein-sources.md` — allowed proteins + example pairings. +- `references/email-template.md` — HTML email scaffold. diff --git a/inventory.example.json b/inventory.example.json new file mode 100644 index 0000000..5451104 --- /dev/null +++ b/inventory.example.json @@ -0,0 +1,30 @@ +{ + "updated": "YYYY-MM-DD", + "diet": { + "goal": "high-protein", + "reason": "recovering burns victim — healing well, preserving lean mass", + "avoid_purchase": ["red meat"], + "age_years": 46, + "bodyweight_kg": "95-100", + "protein_per_kg": 2, + "protein_target_g_per_day": "190-200", + "weight_loss_goal_kg": 15, + "notes": "2g/kg for burns recovery + lean-mass preservation during ~15kg fat loss. Fat-loss comes from a mild calorie deficit (bulk with veg, limit chips/bread/bread/oil), NOT from cutting protein. Red meat already in stock is usable but never re-bought. General guidance, not medical advice — defer to clinical/dietitian team; keep hydrated." + }, + "items": [ + { "name": "Eggs", "qty": 14, "unit": "count", "category": "protein", "notes": "" }, + { "name": "Chicken breast", "qty": 1, "unit": "count", "category": "protein", "notes": "whole breast, ~120-150g" }, + { "name": "Whey protein powder", "qty": 1000, "unit": "g", "category": "protein", "notes": "high-protein staple; ~25g protein per scoop" }, + { "name": "Tinned tuna in veg oil", "qty": 1, "unit": "can", "category": "tinned", "notes": "protein" }, + { "name": "Milk", "qty": 1, "unit": "litre", "category": "dairy", "notes": "" }, + { "name": "Greek yogurt", "qty": 1, "unit": "pot", "category": "dairy", "notes": "high protein" }, + { "name": "Cottage cheese", "qty": 1, "unit": "pot", "category": "dairy", "notes": "high protein" }, + { "name": "Red lentils", "qty": 500, "unit": "g", "category": "grain", "notes": "protein-rich" }, + { "name": "Frozen mixed veg", "qty": 1000, "unit": "g", "category": "frozen", "notes": "calorie bulk, cheap" }, + { "name": "Broccoli", "qty": 2, "unit": "count", "category": "veg", "notes": "small heads" }, + { "name": "Carrots", "qty": 800, "unit": "g", "category": "veg", "notes": "" }, + { "name": "Sweet potatoes", "qty": 3, "unit": "count", "category": "veg", "notes": "" }, + { "name": "Onions", "qty": 6, "unit": "count", "category": "veg", "notes": "" }, + { "name": "Bananas", "qty": 5, "unit": "count", "category": "fruit", "notes": "" } + ] +} diff --git a/meal-history.example.json b/meal-history.example.json new file mode 100644 index 0000000..5628cb2 --- /dev/null +++ b/meal-history.example.json @@ -0,0 +1,4 @@ +{ + "note": "Rolling 7-day log of suggested meals. See SKILL.md / references/meal-history.md. This is an example/empty template — the live file is git-ignored.", + "entries": [] +} diff --git a/references/eastbourne-shops.md b/references/eastbourne-shops.md new file mode 100644 index 0000000..8b9c684 --- /dev/null +++ b/references/eastbourne-shops.md @@ -0,0 +1,32 @@ +# Where to Shop — Eastbourne (value research, 2026) + +User is in Eastbourne. Local options: Lidl, Sainsbury's, Co-op, Tesco Express +(closest), and a local Londis (milk 2L £1.40). Memberships: Tesco Clubcard, Co-op member. + +## Price index (Which? 2026, ~93-item standard basket; Lidl = £160.70 baseline) +| Supermarket | Basket | vs Lidl | Notes | +|---|---|---|---| +| Lidl | £160.70 | 1.00x | Cheapest discounter; furthest from user | +| Tesco (Clubcard) | £188.45 | 1.17x | Clubcard Prices = real discount | +| Sainsbury's (Nectar) | £187.86 | 1.17x | Mid; Nectar needed for this price | +| Tesco Express | ~£196–203 | ~1.22–1.26x | Superstore + convenience premium; Clubcard applies | +| Co-op | ~£209+ | ~1.30x | Membership = annual dividend, not instant | +| Londis | varies | ~1.25–1.35x | Milk cheap (£1.40/2L); full basket pricier | + +## Multipliers used for per-store estimates in the weekly email +- Lidl: 1.00 +- Tesco Express (Clubcard): 1.22 +- Sainsbury's (Nectar): 1.17 +- Co-op (member): 1.30 (dividend softens over the year, not at till) +- Londis: 1.30 indicative, flagged rough + +## Recommendation logic (single shop) +- Default: **Tesco Express** — closest to user + Clubcard Prices narrow the gap. + Pragmatic given limited mobility during burns recovery. +- If user prioritises price over proximity: **Lidl** (~£6 cheaper on a ~£28 list). +- Co-op only if already there for something else; Londis for milk/top-ups. + +## Why proximity matters here +User is a recovering burns victim — a long trip to Lidl may not be feasible daily/weekly. +The ~17–22% price premium of Tesco Express is often worth the saved trip. The email +states this trade-off explicitly so he can choose. diff --git a/references/email-template.md b/references/email-template.md new file mode 100644 index 0000000..39c4dd9 --- /dev/null +++ b/references/email-template.md @@ -0,0 +1,44 @@ +# HTML Email Template (inline CSS, mobile-friendly) + +Copy this scaffold, fill the meal sections, and save to `/tmp/meal_today.html` +(or `/tmp/meal_shop.html` for the weekly list) before sending. + +```html + + + + + + +
+ + + + +
+

Your Meals for Today

+

Tuesday, 25 August 2026 · high-protein · no red meat

+
+ +
+

🍽 Lunch — Meal Name

+

Ingredients: 3 eggs, 100g spinach, 1 tbsp olive oil

+

Method: 1) … 2) … 3) …

+
+ +
+

🍽 Dinner — Meal Name

+

Ingredients:

+

Method: 1) … 2) …

+
+
+ Reply to tell me what you used and I'll update the inventory. — your meal agent +
+
+ + +``` + +For the **weekly shopping list**, replace the meal cards with a table: +`Item | Est. price | Running total`, a `Total: £XX.XX` row, and a one-line note on +what it covers (protein-first). Keep the same header/footer style. diff --git a/references/meal-history.md b/references/meal-history.md new file mode 100644 index 0000000..1440b12 --- /dev/null +++ b/references/meal-history.md @@ -0,0 +1,38 @@ +# Meal-history logger (used by the daily job) + +After composing the two meals (lunch + dinner) and BEFORE sending the email, the daily +job must record them into `meal-history.json` (same skill dir) so the user can later say +"remove 's from inventory" and have precise items deducted. + +## Entry shape +```json +{ + "date": "2026-08-27", + "weekday": "Thursday", + "meal": "lunch" | "dinner", + "name": "Human-readable meal name", + "items": [ { "name": "Name as in inventory.json", "qty": 1, "unit": "count" }, ... ] +} +``` + +## Rules +- UPSERT: if an entry with the same `date`+`meal` already exists, replace it (don't + duplicate on re-runs). +- PRUNE: drop any entry whose `date` is more than 7 days before today (keep a true + rolling 7-day window). +- Log ONLY substantive food items actually used in that meal — enough to decrement + inventory accurately. Do NOT log pure condiments (olive oil, salt, pepper, spices, + garlic, soy sauce, miso, honey, etc.) and do NOT log the optional "third hit" snack. +- Item `name` values should match `inventory.json` names closely (case-insensitive match + on removal) so removal works: e.g. "Chicken breast", "Eggs", "Tinned tuna in veg oil", + "Dried red lentils", "Sweet potatoes", "Aubergine", "Red cabbage", "Green pesto", + "Leeks", "Orange bell pepper", "Cooked beetroot", "Microwave rice", "Cheese", etc. +- Use units consistent with inventory.json (count / g / can / portion / pieces / jar). + For a half-item use 0.5 (e.g. half a sweet potato = qty 0.5 unit "count"). +- Bump the top-level file with no extra schema — keep the `entries` array only. +- This does NOT modify inventory.json (that only happens on explicit user removal). + +## Example +Composed lunch "Chicken & Pesto Roast Veg Bowl" using chicken breast (1), sweet potato +(½), aubergine (½), red cabbage (150 g), green pesto (1 tbsp ≈ 0.1 jar) → record those +five items under meal "lunch" for today's date/weekday. diff --git a/references/protein-sources.md b/references/protein-sources.md new file mode 100644 index 0000000..1f12e85 --- /dev/null +++ b/references/protein-sources.md @@ -0,0 +1,43 @@ +# Allowed Protein Sources (no red meat) + +High-protein foods to favor, with rough protein density and typical cheap UK buys. +Use these when suggesting meals and when building the weekly shopping list. + +## Animal (non-red-meat) +- Eggs — ~13g protein each; cheapest protein there is. Buy 12–15 packs. +- Chicken breast / thigh — ~30g per 100g raw. Buy 500g–1kg trays. +- Turkey breast / mince — lean, ~29g per 100g. +- White fish (cod, haddock, basa) — ~20g per 100g; frozen fillets are cheap. +- Salmon (fresh or tinned) — ~20–25g per 100g; tinned in spring water is budget-friendly. +- Tinned tuna — ~25g per 100g drained; ~£1/can. +- Prawns — ~20g per 100g; frozen raw prawns often <£3/300g. +- Quark / cottage cheese — ~12–14g per 100g; very cheap per gram. +- Greek yogurt (0%/low fat) — ~10g per 100g; buy large tubs. +- Skim milk / semi-skimmed — ~3.4g per 100ml. +- Whey protein powder — ~25g per scoop; good staple for hitting targets. + +## Plant +- Tofu (firm) — ~12–17g per 100g; ~£1.50/block. +- Tempeh — ~19g per 100g. +- Edamame (frozen) — ~11g per 100g. +- Lentils (dry or tinned) — ~9g per 100g cooked; very cheap. +- Chickpeas (tinned) — ~8g per 100g; ~50p/can. +- Beans (kidney/black/butter) — ~8g per 100g; ~50p/can. +- Peanut butter (no added sugar) — ~25g per 100g; cheap calorie+protein. + +## Example pairings (per meal) +- Eggs + Greek yogurt + spinach/peppers (omelette + side). +- Chicken + lentils + veg (stir-fry / bowl). +- Tofu + edamame + rice/quinoa (buddha bowl). +- Tinned tuna + cottage cheese + salad. +- Salmon + boiled eggs + greens. +- Whey shake + banana + peanut butter (snack/breakfast). +- Prawns + chickpeas + tomato (stew). +- Turkey mince + beans + tinned tomatoes (chilli). + +## Rough UK prices (guide for the £30 list) +Eggs (12) ~£2.20 · Chicken 1kg ~£4.50 · Greek yogurt 500g ~£1.50 · +Cottage cheese 300g ~£1.20 · Tofu 396g ~£1.50 · Lentils 500g ~£1.00 · +Tinned tuna x2 ~£2.00 · Frozen veg 1kg ~£1.20 · Eggs, milk 2L ~£1.50 · +Whey 1kg ~£12 (occasional) · Bananas ~£0.90 · Chickpeas x2 ~£1.00 · +Quark 250g ~£1.10 · Frozen edamame 300g ~£1.80. diff --git a/references/protein-targets.md b/references/protein-targets.md new file mode 100644 index 0000000..25b1e97 --- /dev/null +++ b/references/protein-targets.md @@ -0,0 +1,30 @@ +# Protein Targets — Burns Recovery & Fat Loss + +User profile this skill was tuned for: recovering burns victim, healing well, +~95–100 kg, wants to lose ~15 kg fat while **preserving lean mass**. + +## Target math +- Burns recovery + lean-mass preservation during a deficit: **2 g protein per kg + bodyweight per day**. +- At 95–100 kg → **~190–200 g/day**. +- Split across 2 main meals: aim **~90–100 g per meal**; any remainder comes from a + third hit. +- **Recompute whenever the user reports a new weight:** target = weight_kg × 2. + Keep `diet.bodyweight_kg`, `diet.protein_per_kg`, and + `diet.protein_target_g_per_day` in inventory.json in sync with that. + +## Fat-loss lever +- Fat loss = a MILD calorie deficit, NOT protein cutting. Bulk meals with veg; limit + oven chips / white bread / added oil; lead with lean protein. + +## Closing the gap (third hit) +When 2 cooked meals fall short of the daily target, name one cheap, fast hit: +- Whey protein shake (1 scoop ≈ 25 g) — most cost-efficient per gram; ideal staple. +- Extra eggs (1 egg ≈ 13 g). +- Greek yogurt 150 g (≈ 15 g) or cottage cheese / quark. +- Tinned tuna (≈ 25 g) or skim milk. + +## Why red meat is excluded from BUY lists +User prefers to stop buying red meat (lamb / pork / beef / bacon / gammon). Red meat +ALREADY in stock is still cooked and suggested so it isn't wasted — it is never +re-purchased. Encode this as: usable-if-in-stock, never-re-buy.