Add per-meal calorie cap (1000 kcal) + kcal/protein display

- SKILL.md RATIONAL PORTIONS: add ~1000 kcal/meal cap; trim starch/cheese/halloumi/lentil
  (not protein) if over; use scripts/calc_meal.py to check
- scripts/calc_meal.py: estimate protein/kcal/fibre/satfat for a meal's items, flag
  over_kcal (>1000) + per-item max_per_meal breaches (unit-aware); gates daily sends
- scripts/verify_portions.py: now also flags KCAL CAP violations via calc_meal
- references/calories.md: per-portion kcal/macro estimate table (source of truth)
- references/email-template.md + meal-history.md: show Est. kcal + Protein per card/entry
- daily cron prompt: compute + record kcal/protein_g on each entry, show kcal in email,
  enforce 1000 kcal cap before send (pushed via cronjob update)
This commit is contained in:
hermes
2026-08-29 08:17:43 +01:00
parent d4c5a8f658
commit f7c9b78dc1
5 changed files with 132 additions and 1 deletions

View File

@ -20,12 +20,14 @@ Copy this scaffold, fill the meal sections, and save to `/tmp/meal_today.html`
<div style="border:1px solid #e4e7eb;border-radius:10px;padding:16px;margin-bottom:16px;">
<h2 style="margin:0 0 6px;font-size:17px;color:#0f766e;">🍽 Lunch — Meal Name</h2>
<p style="margin:0 0 8px;font-size:14px;color:#52606d;"><strong>Ingredients:</strong> 3 eggs, 100g spinach, 1 tbsp olive oil</p>
<p style="margin:0 0 4px;font-size:14px;color:#3e4c59;"><strong>Protein:</strong> ~24 g · <strong>Est. kcal:</strong> ~310</p>
<p style="margin:0;font-size:14px;color:#3e4c59;line-height:1.5;"><strong>Method:</strong> 1) … 2) … 3) …</p>
</div>
<!-- MEAL 2 -->
<div style="border:1px solid #e4e7eb;border-radius:10px;padding:16px;margin-bottom:16px;">
<h2 style="margin:0 0 6px;font-size:17px;color:#0f766e;">🍽 Dinner — Meal Name</h2>
<p style="margin:0 0 8px;font-size:14px;color:#52606d;"><strong>Ingredients:</strong></p>
<p style="margin:0 0 4px;font-size:14px;color:#3e4c59;"><strong>Protein:</strong> ~40 g · <strong>Est. kcal:</strong> ~520</p>
<p style="margin:0;font-size:14px;color:#3e4c59;line-height:1.5;"><strong>Method:</strong> 1) … 2) …</p>
</div>
</td></tr>

View File

@ -11,7 +11,9 @@ job must record them into `meal-history.json` (same skill dir) so the user can l
"weekday": "Thursday",
"meal": "lunch" | "dinner",
"name": "Human-readable meal name",
"items": [ { "name": "Name as in inventory.json", "qty": 1, "unit": "count" }, ... ]
"items": [ { "name": "Name as in inventory.json", "qty": 1, "unit": "count" }, ... ],
"kcal": 720,
"protein_g": 64
}
```