尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Meeting timeline and agenda topics for Lake Tahoe-area public agencies
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗A local Tahoe-area meeting timeline with configurable agencies and six shared topics: Biking, Transit, Housing, Short Term Rentals, Environment, and Hot Topics. The October 20, 2026 local capture contains 123 confirmed meetings across 35 agencies/bodies. The source review records the reviewed sources and remaining gaps; source coverage lists every registry entry and how it is read. Public comment periods have a separate page and verified-source import workflow.
The Astro website reads a versioned export from a Python/PostgreSQL ingestion worker. A visible Today marker separates earlier meetings, which open ten at a time, from upcoming dates. Topic and agency filters expose related agenda items on that same timeline. Each meeting shows its covered topics and counts, tags on collapsed agenda items, and multi-select topic filters. Meeting pages also include page-level citations, a direct link from each agenda item to its cited page in the official document, participation links, calendar downloads, and cancellations. The included source bundle has 19 verified meetings and 243 agenda items, spanning May through November 2026. Upcoming listings without posted agendas or confirmed start times preserve those missing details. Canceled meetings stay listed, greyed out. By default the timeline lists upcoming meetings with posted agendas. One button reveals the rest: confirmed meetings without an agenda yet, plus dashed placeholders for regular meetings predicted from each agency's usual schedule (for example, TTD's first Wednesday at 3 PM) before an agenda or notice exists. Any real record replaces the placeholder.
Upcoming meetings can also show what is planned for their agenda before it is posted (decision 0028): subjects read deterministically from the South Lake Tahoe and TTD agenda planning calendars, and meetings and presentations that a tracked public notice announces, each marked subject to change and linked to its source. Meetings hosted by an organization that is not a followed body, such as a co-hosted open house, appear under Other with their host named.
Coverage is limited to the records actually captured; it is not a comprehensive live feed. Item summaries repeat official text verbatim: the requested action the agenda prints under an item, plus sentences Claude selects and trims from the item's own staff report, each checked against the stored page text before publishing (decision 0024). Items link to their staff reports for every agency that publishes them in a verifiable way (decision 0026) and, for South Lake Tahoe and TRPA, to each item's listed attachments. Claude is the selected provider for future automated analysis (decision 0011); the topic classification evaluation compares Claude Haiku with the current rules. No API key or cloud account is needed to run locally.
Prerequisites: Node.js 22.12+ (Node 24 recommended), npm, uv, PostgreSQL command-line tools, curl with system CA certificates, and Poppler (pdftotext, pdfinfo). Setup uses uv to obtain Python 3.13 if needed.
From the repo root:
python3 scripts/project.py setup
python3 scripts/project.py dev
Open http://127.0.0.1:4321/. The server binds to loopback only. In a normal terminal, Ctrl-C stops the website. Astro may run in the background when started by a coding agent; use npm --prefix apps/web run dev -- stop to stop that server. The database uses a dedicated cluster in ignored data/postgres/, port 55432, and does not modify other PostgreSQL installations. Stop it with python3 scripts/project.py stop.
Setup installs locked dependencies, starts the dedicated database, initializes its schema, ingests the fixtures, and validates the public JSON export. It can be rerun without duplicate records. Fixture ingestion preserves operator edits, but reapplies the captured source state; use refresh, rather than seed, after editing or live capture.
For Docker instead of a native PostgreSQL installation:
docker compose up -d db
DATABASE_URL=postgresql://tahoe:tahoe-local@localhost:55432/tahoe python3 scripts/project.py setup
The localhost URL selects an existing database instead of starting the native cluster. Choose one database approach at a time. The sample password is for loopback development only. Copy .env.example to .env to use another local database; environment variables take precedence. POSTGRES_BIN can locate PostgreSQL tools if they are not on PATH.
| Command | Purpose |
|---|---|
python3 scripts/project.py test | PostgreSQL tests, evidence validation, Astro checks, build, agenda/timeline interaction tests, calendar tests, and internal links |
python3 scripts/project.py refresh | Export current database state plus 90 days of expected meetings, and validate citations; the dev website reloads |
python3 scripts/project.py build | Refresh data and build static HTML in apps/web/dist/ |
python3 scripts/project.py status | Inspect source state, processing failures, and invalid summaries |
python3 scripts/project.py worker --help | All ingestion and operator commands |
python3 scripts/project.py worker reclassify --dry-run | Preview changes from the current topic rules |
python3 scripts/project.py worker reclassify | Refresh generated tags while preserving human overrides |
python3 scripts/project.py worker evaluate-topics | Compare rule tags with Claude Haiku (read-only; a dry run with cost projection unless ANTHROPIC_API_KEY is set) |
python3 scripts/project.py worker learn-schedules --dry-run | Report each agency's regular meeting pattern, support, and exceptions from stored meetings |
python3 scripts/project.py worker learn-schedules --write | Store learned schedules (3+ matches, 60%+ match rate); never replaces configured ones |
python3 scripts/project.py seed | Reapply the original source fixtures; preserves human edits |
python3 scripts/storage_report.py [--json] | Read-only database size report: per-table bytes, page text, per-agency counts, and share of pages cited |
Local operator edits are separate from generated facts. Corrections require an author and reason for the internal audit trail; a correction simply replaces the displayed summary text, and topic overrides and suppression are likewise internal steering. The site shows only the latest summary, with no revision history or attribution. After an edit, run refresh.
Topic rules use each item's title and limited agency context, with recorded rule evidence. They exclude ambiguous uses such as a funding "Cycle B" from Biking, and recognize ridership, transit services, mobility hubs, and relevant fleet actions. They do not scan neighboring agenda items for keywords. Supporting-report topics that are absent from a title can still be missed; use a topic override for those cases.
The canonical topic catalog defines IDs, names, descriptions, and examples for ingestion, overrides, exports, and every public view. It currently includes six topics. Title-matching rules and the STR → Housing relationship are configured there too. Keep IDs stable when adjusting display names. After changing classification rules, run worker reclassify --dry-run, worker reclassify, and refresh. The configuration guide explains topic boundaries, the 42-entry agency/body registry (41 imported CSV rows plus Truckee), adding one-off workshops through config/one-off-meetings.json, and agency meeting schedules for expected meetings. Imported agency metadata is unverified; automated discovery still covers the three existing agencies.
Meeting filters match any selected topic, preserve agenda order, and can be shared through the page URL. All items clears the filters. A deep link keeps its referenced item visible even if it falls outside the selection. Calendar downloads are .ics snapshots with stable event IDs and explicit cancellations; they do not update automatically. A meeting with no verified start time has no downloadable event. Every event has an end time: a published or observed length when known, otherwise a long-biased estimate that is labelled as an estimate (decision 0013; tune the defaults in config/meeting-durations.json and a body's own length in its registry duration, with worker duration-report).
Discover official meetings without changing stored data:
mkdir -p data
python3 scripts/project.py worker discover truckee --limit 5 --out data/truckee-candidates.json
See the worker guide for capture, document refresh, and correction commands, and the operations guide for backup, recovery, and failed-job procedures. Live access can be rate-limited or blocked; the reproducible fixture workflow works offline after dependencies are installed.
TEST_DATABASE_URL and remove only those schemas. They do not reset the application database.The source audit documents genuine dates, source IDs, known inconsistencies, and selected-page coverage. The large PDF benchmark measures the 505-page SLT packet. The implementation status is the resume handoff, with verified work and remaining limitations.
Selected hosting is Vercel, Prisma Postgres, and Python on Google Cloud Run Jobs with Cloud Scheduler. Alerts and resident accounts are deferred; recurring budget remains below $20/month.
Read the implementation handoff before older planning documents. See the build plan, product brief, decisions, and idea backlog. Local defaults are in decision 0006.
MIT. Source: github.com/nickspeal/tahoe-public-meetings. Agenda text in tests/fixtures/ is excerpted from public agency documents for testing; the official sources remain authoritative.