尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證製作者的介紹僅有上面的一句話。 更多詳情請閱讀儲存庫 README。 儲存庫 README ↗
正在載入完整 README。
檢視完整 README ↗This is one ecosystem for live bus tracking, punctuality auditing, and social-media commentary across the West of England (WECA), built entirely on open data from the Bus Open Data Service (BODS). This started out as a hobby engineering project when I got a Raspberry Pi 4. After many damp waits for rush hour buses in East Bristol, I decided to weaponise my frustration and automate being passive-aggressive about First Bus, so here we are.
Live map: Bristol Buses LIVE · Punctuality audit: West of England bus punctuality audit · Bluesky: Bristol Bus Bot
| Folder | What it is | Language | Runs where |
|---|---|---|---|
collector/ | The only process that talks to BODS. Polls SIRI-VM (positions) and SIRI-SX (disruptions) every 30s, matches vehicles to the timetable, computes delays once for everyone. | Python | Raspberry Pi (systemd) |
site/ | bristolbuses.live - live map + dot-matrix departure board (Flask + Leaflet). | Python/JS | Raspberry Pi (gunicorn/systemd) |
bot/ | @bristolbusbot.live - Bluesky bot. AI commentary on delays, with persona. Reads the collector's event stream. | TypeScript | Raspberry Pi (systemd) |
pipeline/ | Offline data jobs: 3-layer timetable build (BODS GTFS → operator TransXChange → TNDS), fleet data refresh, AI blurb generation, route shapes. | Python | GitHub Actions + Pi timers; workstation fallback |
audit-site/ | Source of the WECA bus punctuality audit static site, published via GitHub Pages (nightly data push from the Pi). | HTML/CSS/JS | GitHub Pages |
deploy/ | Immutable release deployment, systemd units, health/rollback gates, backups, Slack monitoring and named-tunnel configuration. | Python | Workstation → Pi |
BODS SIRI-VM ──┐
BODS SIRI-SX ──┤ ┌── site (Flask) ──────▶ bristolbuses.live
▼ │
collector ──▶ live.db┼── bot (TS) ───────────▶ Bluesky
──▶ audit.db ┴── nightly rollup ─────▶ GitHub Pages (audit)
▲
timetable.db ◀── GitHub build → Pi validation/promotion
There is one poller, one matcher and one delay number - the site displays it, the audit records it, and the bot posts about it. These processes cannot disagree by construction.
Routine timetable refreshes are also unattended. The Pi checks each morning,
asks a fixed GitHub Actions workflow for a fresh candidate when the six-day
cooldown has elapsed, validates the result independently, and either promotes
it atomically or keeps the previous database. The complete production auto
path was accepted on 22 July 2026 and the daily timer is enabled; the first
scheduler-triggered due rebuild remains routine observation. The Windows
workstation is now an emergency fallback rather than part of normal production.
These are the principles that shape the code:
cd collector && pip install -e . && python -m collector.run
needs .env with BODS_API_KEY, plus a timetable.db built by the
pipeline (set BBB_TIMETABLE_DB to its path).cd site && pip install -e . -e ../collector && python wsgi.py
→ http://localhost:5000. Point BBB_LIVE_DB at the collector's live.db.cd bot && npm ci && npm run typecheck && npm run build
(local .env must keep test mode enabled). See bot/.env.example.python deploy\push.py --refresh-timetable from
the repository root. Use python deploy\push.py --dry-run --refresh-timetable
to inspect its scope without building, connecting or changing anything.Production code is deployed only through python deploy\push.py; see
deploy/README.md for the exact scope, safety gates and rollback behaviour of
every command.
Timetables, vehicle locations and disruptions: BODS (OGL v3.0). Fallback
timetables: Traveline National Dataset. Boundaries: ONS Open Geography
(OGL). Stops: NaPTAN (OGL). Fleet data is fetched at runtime from the
community-maintained bustimes.org API and is not redistributed in this
repository. Full attributions are in ATTRIBUTION.md.
Except where noted, code is licensed under AGPL-3.0-only. The adapted
TransXChange parser remains under MPL-2.0; see THIRD_PARTY_NOTICES.md.
Not affiliated with, endorsed by, or funded by any bus operator, WECA, or any
authority.