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.
JESS MOVEBlog
Notes
Engineering notes and product decisions, written up properly — including the ones that made the roadmap slower and the ones we got wrong the first time.
articles, all human-reviewed
7 of 55 supporting subjects covered
no article below 600 words
score required to publish, out of 100
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.
Law 2 treats a notification fired into a moment you cannot move as a defect. We count silence as a successful outcome, and the held rate is a headline metric.
A habit streak usually works by making people feel bad. We built Grace Tokens, Flare Mode and a Bereavement Hold instead, and week-six retention improved.
Seated movement and three other variants are authored independently, never degraded from the standing one. Five or it does not ship, and there is no override.
If an HR director can see one named person stopped moving in March, workplace wellbeing data is a liability. The individual view is absent from the types.
Food photo analysis returns a range, its evidence source and a confidence level, and never narrows it to look tidier. Twelve dimensions, and no health score.
Editorial pipeline
Those are two different verbs, and the system does not let them collapse into one. The status machine has no transition from draft to published — a draft goes to review, and review is a name, not a flag.
Six clusters, each with a pillar page and a set of supporting subjects. The agent is commissioned against whichever cluster has the fewest published articles relative to its subjects — not against whatever ranked well last month.
A frontier-tier call through the AI Gateway, ceiling 18 ACU, 90-second timeout. It gets the cluster, the pillar path, the sibling subjects and the banned lexicon. It returns title, description, keywords, a Markdown body and internal links.
Title and description length, slug format, word count, heading structure, keyword density, internal linking, cluster validity — and the banned lexicon, which is a blocker rather than a warning. Same draft in, same score out, every time.
A failing draft goes back with its own findings attached, and the repair is kept only if it scores higher. An agent that cannot fix its blockers on the second pass will not on the fifth, and every pass spends real money.
The status machine has no edge from draft to published. Publishing requires a reviewer name and re-runs the audit at that moment rather than trusting the score stored when the draft was written.
Every banned term in the brand lexicon — the weight-loss vocabulary, the guilt vocabulary, the streak-threat vocabulary — is a blocker in the audit, not a warning. A draft containing one cannot reach review however well it scores on everything else.
This matters specifically for search, because those phrases have real volume and an optimiser pointed at traffic will reach for them. The rule lives in the audit function rather than the prompt: a prompt is a request, a function is a gate.
Every finding carries a fix as well as a complaint — that is asserted in the test suite, because a finding you cannot act on is noise.
Topic clusters
That is what search visibility is made of — not repeating a phrase. Each cluster has one pillar page and the articles that link up to it, and the emptiest cluster is what the agent gets commissioned against next.
Pillar: /micro-movement · informational intent
Pillar: /body-balance · commercial intent
Pillar: /foodlens · informational intent
Pillar: /micro-movement · informational intent
Pillar: /body-balance · informational intent
Pillar: /micro-movement · informational intent
Pillar: /mova · commercial intent
Pillar: /wearables · commercial intent
Pillar: /challenges · commercial intent
Pillar: /industries · commercial intent
Pillar: /for-children · informational intent
Pillar: /assurance · commercial intent
Analytics
A blog on a health platform that quietly profiled its readers would be an odd thing to publish a privacy policy next to. The analytics are built to the same standard as the product.
Nothing is written to the reader’s device. There is no consent banner because there is nothing to consent to.
The connecting address and user agent are hashed on arrival with a salt that regenerates daily. The raw values are never held in a variable that outlives the request.
A read is 25 seconds visible and 55 per cent scrolled. Both numbers are reported, separately, and the gap between them is the interesting part.
A background tab accrues nothing. A page left open over lunch is not a two-hour read, and counting it as one flatters us in exactly the wrong direction.
Events older than that are dropped rather than archived. Uniqueness holds within a day and deliberately stops holding across days.
There is no identifier in the event, so there is no audience to build, no profile to enrich and no third party to share one with.
The consequence is a unique-visitor count that is honest within a day and deliberately meaningless across days. We would rather have a number we can explain than a funnel we cannot.
Everything written here describes a product you can be using in two minutes. The writing is free either way.
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.