Your targets come from age, sex and life-stage only — never rescaled by weight or body-fat. Energy is a range, not a point.
Step 1 · Age, sex, life-stage
Step 2 · Body & activity
Your targets (provenance under every number)
Today
Energy as a range against your band — with the gap stated honestly.
Adequacy ticker · 7-day rolling (sustained bands only)
Today's log
Add entry
Log by form today — the photo flow is a working estimate-and-confirm demo, and barcode and free-text are marked previews. Every entry carries a confidence tier — photo is always an estimate you confirm.
Form
Barcode
Text
Photo
Barcode (preview — not part of this build)
Additive in a later milestone — spine stubs it behind the tier system.
Free-text parse (preview — not part of this build)
Additive in a later milestone — LLM gateway + cache.
Photo estimate
📷
Recognition errors run 20–50%. A photo gives you an estimate to confirm — never a silently merged number.
Photo · estimate — edit to confirm
The values below are inferred (amber tier). Nothing is added to your log until you confirm.
Adequacy
7/30-day rolling means vs RDA/AI. No single-day flags — the system only speaks when a sustained band holds.
Rolling targets
7d
30d
▲ auto · rolling mean vs RDA/AI · sustained band only