Omnigraph
Graph engine for context assembly. Object-storage native. Agents work with graph data the way engineers work with code: branched, typed, reviewed, merged, audited, and governed.
Admin pipeline for scraping DA prices, Panlasang Pinoy recipes, and FNRI nutrition data into static snapshots.
DataGitHub @john3162000OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗SarapSulit ("masarap, masustansya, sulit") is a free web app, part of FARM2FIGURE, that helps Filipino families cook meals that are nutritious and affordable. It prices every dish at today's market prices, works out its nutrition from the FNRI Food Composition Table, and ranks dishes by nutrition per peso.
docs/)scraper-backend/)Other files in this repository (the Python files at the root, render.yaml, platform/) are not
part of SarapSulit.
| Data | Source | How it's used |
|---|---|---|
| Recipes | Panlasang Pinoy, Kawaling Pinoy, Yummy Kitchen, Recipes by Nora, Pinoy Recipe, Foxy Folksy, Manila Spoon, Pepper.ph (see "Recipe sources") | Title, ingredient list, servings, times, course, a photo link and the source link |
| Market prices | DA Daily Price Index (Metro Manila), every day | First choice for every ingredient DA lists |
| PSA OpenSTAT monthly retail prices (NCR, else PH average), every Monday | When DA has no price | |
SM Markets and DTI SRP bulletins (manual-prices.tsv) | Packaged goods DA and PSA don't list (soy sauce, canned goods, noodles, …) | |
Derived prices (derived-prices.tsv) | Last resort: a labelled conversion or stand-in from a priced item, shown with "≈" | |
| Nutrition | FNRI Philippine Food Composition Table (PhilFCT) | Per 100 g edible portion: kcal, protein, fat, carbs, sodium and more |
USDA FoodData Central (nutrients-extra.tsv) | Only for foods FNRI doesn't have (spices, some imported items) |
All recipes go through the same engine (scraper-backend/src/lib/recipe-compile/), whatever site
they come from:
2 tbsp fish sauce → 2 · tbsp · fish sauce). Ingredient groups ("Marinade", "Sauce") are
kept. The steps are only scanned for short method notes ("deep fry", "discard the
marinade", "oven"); the steps themselves are not stored.quantity.ts). Fractions, ranges (midpoint), unicode ½, package sizes
("1 (14 oz) can"), US cups and spoons, pieces, cloves, bunches, thumbs, "to taste".data/catalog/aliases.tsv → canonicals.tsv, about
1,600 names for about 550 foods). Water, headings, "to taste" and optional lines are
recognized and left out of cost and nutrition.Rules we keep:
The crawl (scraper-backend/src/lib/scrapers/recipe-sources.ts) reads each site's sitemap.
It runs by itself every hour, politely: one page every 1.5 s, with
a SarapSulitBot user agent that links to the site. Pages that aren't recipes, or are duplicates,
are remembered (RecipeSkip) so they aren't fetched again.
# site: no build step
python -m http.server 5173 --directory docs # uses the live API
# backend tests and type check
cd scraper-backend && npm ci && npm test && npx tsc --noEmit
# site tests (from the repo root)
node --test docs/*.test.mjs
# after editing any catalog TSV (CRLF line endings), regenerate and commit both
cd scraper-backend && node scripts/build-catalog.mjs
The backend needs DATABASE_URL, DIRECT_URL, ADMIN_TOKEN and CRON_SECRET, which are set in
Vercel. CLAUDE.md has the project rules, and PROGRESS.md has the history of every change.
© 2026 FARM2FIGURE.