Catalog
python -m catalog.build streams the product JSON, joins reliability + carbon CSVs, validates every row, FTS5 indexes names/ingredients/claims.
- ~17,500 products; Finnish compound search (
maito→kevytmaitojuoma) - Curated substitutes (~188) + similar-product fallback
- Allergen filters follow allergen-check strictness
- Gateway reads via
catalog.dbAPI: engine never opens the file