尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Daily scrape of the Cheese Board Collective pizza schedule, for fun future stats (ingredient frequency, favorite combos, etc). Salads are ignored on purpose.
A GitHub Action runs scrape_cheeseboard.py once a day. Each pizza is written to
data/<pizza-date>.json, keyed by the pizza's own date and upserted — since the
site usually lists the whole upcoming week at once, most days get scraped more
than once before their date arrives, and the file for that date is simply
overwritten each time. The same run also rewrites the table below from
data/, showing this week (Monday onwards, including days already gone by)
plus anything further ahead the site has posted. Rows only drop off when a
new week starts, so the whole week stays readable rather than shrinking a
day at a time — the full history lives in data/ regardless.
| Date | Day | Pizza |
|---|---|---|
| 2026-11-09 | Mon | Closed |
| 2026-11-10 | Tue | Organic tomato, red onion, mozzarella, toasted garlic Parmesan, garlic olive oil, oregano, parsley |
| 2026-11-11 | Wed | Cremini mushroom, green bell pepper, yellow onion, Valbreso feta, mozzarella, garlic olive oil, parsley |
| 2026-11-12 | Thu | Organic zucchini, red onion, herbed fresh ricotta, mozzarella, garlic olive oil, parsley |
| 2026-11-13 | Fri | Organic baby chard and kale, leek, mozzarella, Caciocavallo cheese, garlic olive oil, organic orange and lemon zest, parsley |
| 2026-11-14 | Sat | House made tomato sauce, fresh mozzarella made in Berkeley by Belfiore, mozzarella, garlic olive oil, basil |
scrape_cheeseboard.py — fetches the schedule page and parses each day's
pizza (skips salads).
scrape-pizza.yml — the GitHub Actions workflow (goes in
.github/workflows/).
tests/ — unit tests against saved HTML fixtures of the real page.
data/ — one JSON file per pizza date, either a normal day:
{
"date": "2026-09-12",
"weekday": "Sat",
"closed": false,
"ingredients_raw": "Organic corn (Avalos Farm), red onion, mozzarella, ...",
"ingredients": ["Organic corn", "red onion", "mozzarella", "..."],
"ingredients_normalized": ["organic corn", "red onion", "mozzarella", "..."]
}
or a closed day (weekly closure, holiday, or next week's schedule not posted yet — the site marks all of these the same way, with no "Pizza" heading and a "The pizzeria is closed today." paragraph):
{ "date": "2026-09-14", "weekday": "Mon", "closed": true }
The scraper only fails (non-zero exit) when it can't find any recognizable day on the page at all — a real sign the site's structure changed, not that the pizzeria happened to be closed.
ingredients.toml — hand-maintained ingredient taxonomy: maps each
scraped ingredients_normalized string to a canonical ingredient and a
category (cheese, produce, sauce, ...), so "organic tomato" and "organic
heirloom tomato" count as one Tomato. A scrape that brings in an unknown
ingredient lists it in the PR body; add it here on the PR branch before
merging.
stats.py + build_site.py + templates/ — build the static stats site
(today's pizza with "last seen" context, closest earlier pizza, this
week, per-category leaderboards, rarities, most similar pizzas,
ingredient-by-week table, and a page per day and per ingredient).
build-site.yml — builds the site and deploys it to GitHub Pages on
every push to main that touches the data or the site, plus once a day
so "today" keeps moving.
Dependencies and script execution are managed with uv.
uv sync
uv run pytest
uv run scrape_cheeseboard.py --print
uv run scrape_cheeseboard.py --readme README.md # also refresh the table above
uv run build_site.py # build the site into _site/
uv run build_site.py --today 2026-10-15 # ... as if it were another day
uv run build_site.py --list-unmapped # ingredients missing from ingredients.toml