A food, cosmetics, and personal-care ingredient scanner that says "I don't know" when it doesn't know, instead of quietly scoring it as fine.

Every scanner app gives a number. The number is only meaningful if you know how much of the label it actually understood. Tap any ingredient above to see why it landed where it did — including the ones marked unclassified, which is the whole point of the rebuild.
Matched against the ingredient table with a rating and a stated reason. These are the ones the score can honestly stand on.
Present on the label, absent from the table. Surfaced explicitly rather than silently treated as neutral — which is how a mystery additive becomes a good score.
An escape hatch for the unclassified ones: send the raw ingredient string to a model and get a provisional read, clearly marked as provisional.
What fraction of the label was understood. A 78/100 across four of eleven ingredients is a different claim than 78/100 across eleven of eleven.
Both live in findAlternatives(), and both trace back to the same root cause: trusting that upstream data is complete.
The recommended-substitute feature sometimes returns the scanned product as its own alternative. No identity check on the candidate set before ranking.
Open Food Facts returns truncated ingredient lists for some products. A short list looks like a clean product, so substitute scoring ranks incomplete entries above complete ones.
Both are the scorer treating absence as good news. The same instinct the app exists to argue against, reproduced inside the app.
Exclude the source barcode from the candidate pool, and gate any substitute below a coverage floor out of the ranking entirely.
The scanner card above demonstrates the self-substitution bug on the last sample — it is showing you the real failure rather than a cleaned-up version of it.
Two rebrands now: "Yuka But Honest" became Worm Crawler, and Worm Crawler became Worm Eater — the point both times was to stop naming the product after something it was reacting to.
No longer just food. Worm Eater now reads cosmetics, personal care, and supplements too — 225 ingredients tracked across all of it, not one label at a time.
The same custom SVG worm, drawn as a single stroke path — now gold on black instead of moss on soil. Above this page's title, same file, no raster fallback.
A crawler goes through what's underneath. An eater consumes it — barcode, ingredient list, and whatever a label is trying not to say.
Five now, not one: Open Food Facts, Open Beauty Facts, Open Pet Food Facts, USDA FoodData, and UPCitemdb — open, community-maintained, and uneven in exactly the ways the app surfaces instead of hiding.
Score tiers renamed to match: PRISTINE (85–100), DECENT (65–84), SUSPECT (45–64), CRAWLING (25–44), INFESTED (0–24) — the low end finally sounds like what it's describing.