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