Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
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.