2026
Pure Recs
A tool that checks cosmetic products for pregnancy and nursing safety, built on a pipeline that ingests retailer catalogs and evaluates every ingredient.
Pure Recs was my friend Isha’s idea. There isn’t a simple way for pregnant or nursing people to find out whether a product is safe to use, so we built one.
You search for something from Sephora or Ulta, and it shows you the ingredient list, flags anything worth knowing about, and gives a verdict for each context.

How it works
The interesting part is the data pipeline behind it. Every day it:
- Diffs retailer sitemaps to find new or discontinued products, then pulls the details through an API
- Normalizes each listing into a canonical shape (brand, category, ingredients, etc.) and matches duplicates across sources
- Uses an LLM to parse free-text ingredient lists into INCI names, with confidence scores
- Runs a rules engine over those ingredients for pregnancy and nursing safety
Low-confidence parses land in a human review queue instead of going live. About 29K products have been through the whole thing so far.

Under the hood
- One Docker image, four services. The API, web app, workers, and crons all ship from the same image, and an env var tells each Railway service which one to be. Boring on purpose.
- Postgres is also the job queue. Jobs run on pg-boss, so the queue lives in the same database as the data. One thing to run, one thing to back up, no Redis. Fetch, normalize, merge, and enrich each get their own queue, with the retailer fetchers split per source.
- Crons are just HTTP calls. A cron service hits a task endpoint on the API, which kicks off that day’s delta job and returns a run id. The cron then polls the run until it settles, so a failure shows up as a failed cron in Railway instead of quietly disappearing into a log.
- Checksums for change detection. Every raw API payload is stored with a hash, so the daily normalize pass only re-parses products that actually changed.
- LLM parsing with structured output. The model has to return a typed schema, not free text, and anything it isn’t confident about goes to the review queue rather than the site.
What’s hard
Retailer data is messy. The same product shows up with different names, ingredient lists are pasted in as one long string, and “clean” on a label means nothing. Most of the work is in the matching and normalization, not the safety rules.
Pure Recs is a tool for making informed decisions, not medical advice. Built with Isha Kasliwal and Janak Dadhaniya.