Xata
몇 초 만에 새 Postgres를 시작하거나 기존 것을 복제하고 사용 안 할 때는 자동으로 축소
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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