Body composition, and the charter rule we wrote against it
Charter rule C6 banned body composition framing at every age. Then we specified a product built on exactly those numbers. Here is the whole argument.
Blog Nutrition
Food photo analysis cannot state an energy figure, because a photograph of a plate does not contain the information required to work one out. Every product that states one anyway is guessing and then rounding the guess to make it look like a measurement.
Food photo analysis supports identification of components, reasonably. Relative proportions, roughly. Preparation method, sometimes. Portion mass, poorly — this is the one that dominates the error, and it is the one a photograph is worst at.
A curry can vary by a factor of three in energy density depending on how it was made, and nothing in the image distinguishes the versions. So FoodLens returns a range, and the range is wide when it should be.
A barcode is verified. A restaurant menu item with published data is verified. A user-entered weight is strong. A photograph alone is weak. The range narrows as the evidence improves and never narrows because the interface would look better.
This produces the counter-intuitive result that a barcode-scanned ready meal is analysed with more confidence than a carefully photographed home-cooked salad, which is correct and occasionally annoying.
The number at the top of a FoodLens result is not a verdict on the meal. There is no composite health score — a single number that ranks food good or bad is the shortest path to a disordered relationship with eating, and the Charter forbids it.
Meal Intelligence measures how much the system knows: evidence source, item coverage, portion certainty, preparation certainty. It answers "how well did we read this plate", and the caption saying so is fixed in code rather than left to a designer.
No energy figure, no macronutrient breakdown and no portion judgement is shown below 18, in any mode, under any consent. What a younger user sees is component identification, plant variety, and allergen flags — which is the genuinely useful part anyway.
A FoodLens result carries twelve independent dimensions — component identification, portion estimate, energy range, macronutrient split, plant variety, fibre, preparation method, allergen flags, evidence source, confidence, agreement between estimates, and personal relevance against what the person has told us.
What it does not carry is a thirteenth number that combines them. Every reasonable objection to that decision is about convenience, and every objection to the alternative is about what happens to somebody who starts organising their eating around a score that a piece of software invented.
The Charter forbids the composite, and the test suite asserts that no dimension named anything like a health score exists in the response type. It is the most frequently requested feature we have.
Fourteen allergens are flagged under UK labelling rules, and a photograph can suggest the presence of most of them. It can never establish absence.
So the result has three states, not two: present, unknown, and verified-absent. The third requires a barcode or published data — it is never inferred from appearance, however confident the identification looks.
The interface says "cannot confirm" rather than showing a reassuring empty space, because an empty space reads as "no allergens" to somebody scanning quickly, and the consequence of that misreading is not a slightly worse meal.
Simulating a change — swap the rice for salad, halve the sauce — is the most useful thing food photo analysis does and the easiest to get wrong. The most useful thing FoodLens does and the easiest to get wrong, because a simulated meal has all the uncertainty of the original plus the uncertainty of the substitution.
So a swap widens the range rather than narrowing it, which is the opposite of what makes a good screenshot. The comparison shown is between two ranges, and where they overlap the interface says the difference is not distinguishable rather than picking a winner.
Because a photograph is worst at portion mass, and that error dominates. A curry can vary by a factor of three in energy density depending on how it was made, and nothing in the image distinguishes the versions.
No. There is no composite score — a single number ranking food good or bad is the shortest path to a disordered relationship with eating, and the Charter forbids it. Meal Intelligence measures how well the plate was read, not the food.
Only from a barcode or published data. A photograph can suggest presence but never establish absence, so a result is present, unknown, or verified-absent, and the interface says “cannot confirm” rather than showing a reassuring empty space.
This article sits in the food-intelligence cluster and links up to /foodlens. Clusters are how the editorial agent decides what to write next — the thinnest one wins.
Reading this page records the time it was visible and how far it was scrolled. No cookie, no identifier, and the connecting address is hashed with a salt that regenerates daily. How that works.
Other pages here that point at this one. Internal links are the part of “backlinks” a site actually controls — nothing on this platform buys or exchanges the other kind.
Read next
Charter rule C6 banned body composition framing at every age. Then we specified a product built on exactly those numbers. Here is the whole argument.
We moved the platform invariants into database constraints. Postgres rejected four writes the same afternoon that the services had been allowing.
Accessible interface design as a settings toggle produces a worse product for everyone. Six modes change register, density, mechanics and guardrails together.
Everything described here is running. An account is free, takes about two minutes, and the writing stays free whether or not you make one.
Free to create. 150 AI credits a month for 2 months, then AI features need a plan — everything that is not AI carries on either way. Premium is £5.99 a month and cancels in one click. Under 18 a guardian confirms before the account opens.