GARNI

Personal nutrition system · built 2026

If the numbers don't reconcile, nothing ships.

Garni tracks 37 nutrients against a single rule: every figure has to be defensible. Five automated checks run before each release. Any one of them fails and the build stops — no override, no warning-and-continue.

npm run build
Change a single component by 4mg and watch it refuse.

Three defects the checks caught

Bad data rarely announces itself. It reconciles wrongly.

Every one of these passed a human read. None survived the build.

Two errors arranged to cancel each other out

Two ingredients in the same recipe had been hand-tuned against each other so the meal's totals looked right while both individual entries were wrong. Carbohydrate, potassium and omega-3 discrepancies offset to exactly zero across the pair.

Calcium didn't cancel. A 4mg residue blocked the build and exposed the whole arrangement.

Arithmetic — fixed=226.5, parts=222.5

A checkpoint that could never be met

On training days one time block relocated to follow the workout, landing entirely inside another. Ownership resolved to whichever started first, so the second block could never be credited — not a hard target, an impossible one.

It only appeared on days a workout was logged, which is why it read as random.

Overlap — Afternoon 3–5p × Post-lift 4–7p × Dinner 5–8p

A portion size that was quietly a guess

Records stored "1 medium" and multiplied from there. A medium peach is 150g by reference; the one in the kitchen was closer to 200g — a third more sugar than the figure claimed, every time.

Weighed foods are now stored per gram and entered from the scale. The reference serving survives as a display default, not as an assumption.

Per-unit records — chicken, salmon, steak, broccoli, peach

What's in it

37nutrients tracked against live targets
127weighed food records, zero duplicate keys
11weighed meals that must reconcile exactly
5automated gates, all blocking

How it's built

One file. No account. Nothing leaves the phone.

Garni ships as a single HTML file dragged onto static hosting. No backend, no sign-up, no server holding anyone's health data — every log lives in the browser on the device that wrote it.

Sources are ranked, not averaged

A product's own label beats a reference database for the item in your kitchen. Where they disagree, the check reports it rather than splitting the difference.

Estimates are labelled as estimates

Records carry their provenance — measured, label-exact, or informed guess — and the interface says which. A guess that looks like a measurement is worse than no number.

Targets that shouldn't move, don't

Five figures scale with bodyweight. The other 32 are fixed, because a requirement set by enzyme demand or a risk threshold doesn't care what you weigh.

Status

In private testing.

Garni installs to a phone's home screen, runs offline, and keeps every log on the device that wrote it — no account, no server, nothing to breach. It's in daily use by one person while the data model settles. A walkthrough is available on request.