From cart row
to verdict in seconds.
A Chrome extension, a small self-hostable API, and a curated rules database — that's the whole stack.
Parse the cart
The content script watches iHerb's cart page, extracts product brand + name for each row, and attaches a Shadow DOM overlay so styles never collide.
Resolve & classify
The service worker calls POST /resolve on the API. The server runs a product-lookup waterfall (cache → curated DB → Open Food Facts), then runs the ingredient list through the rules engine.
Render in-page
The overlay renders a colour-coded report card per product: red / yellow flags with reasons + sources, plus a "+N clean ingredients" chip to keep it scannable.
The verdict scale
Red — at least one "avoid" ingredient (banned, restricted, or strong concern). More than two reds in one product triggers a stronger "do not buy" recommendation.
Yellow — caution-list ingredient(s) you may want to limit, e.g. some artificial sweeteners or controversial preservatives.
Green — nothing flagged on the curated list. Safe to send.
What gets sent off your machine
Only { product_id, brand, name } for each cart row. No cookies, no headers, no analytics. The API caches results for 30 days, keyed by product code.
Self-hostable
The whole API is Node 22 + Fastify + SQLite — small enough to run on a $5 VPS or your laptop. The repo includes an install.sh and an nginx config for a one-shot deploy.
Try it on your next iHerb order.
Install the extension and watch your cart light up.
Add to Chrome — It's Free