How It Works

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.

1

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.

2

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.

3

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