Bridge from Amtrak's Train Tracker to the GTFS RT system through MQTT (mimicking actual vehicles posting data)
  • Python 99.4%
  • Dockerfile 0.4%
  • Makefile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Max Katz-Christy 9d5f9b6d7d
All checks were successful
Build / build (push) Successful in 28s
chore: add gitleaks config
2026-09-30 20:41:50 +02:00
.forgejo/workflows ci: install tzdata on the runner so zoneinfo tests can load America/New_York 2026-09-23 15:01:59 +02:00
scripts fix(buswhere): map the Albany Greenport and Columbiaville timepoints 2026-09-25 00:17:56 +02:00
src/hell_gate_bridge fix(buswhere): map the Albany Greenport and Columbiaville timepoints 2026-09-25 00:17:56 +02:00
tests feat(publish): batch the ingest calls and require a vehicle_id 2026-09-22 10:22:25 +02:00
.env.example feat(publish): batch the ingest calls and require a vehicle_id 2026-09-22 10:22:25 +02:00
.gitignore chore: remove em-dashes from comments and docs 2026-08-04 19:59:23 +02:00
.gitleaks.toml chore: add gitleaks config 2026-09-30 20:41:50 +02:00
.pre-commit-config.yaml feat: copier copy 2026-04-17 12:19:52 +02:00
CLAUDE.md fix(buswhere): map the Albany Greenport and Columbiaville timepoints 2026-09-25 00:17:56 +02:00
Dockerfile feat: copier copy 2026-04-17 12:19:52 +02:00
LICENSE.txt feat: copier copy 2026-04-17 12:19:52 +02:00
Makefile chore: sync shared repo standards 2026-09-22 13:58:46 +02:00
pyproject.toml chore: sync shared repo standards 2026-09-22 13:58:46 +02:00
README.md chore: drop copier scaffolding remnants 2026-07-31 20:13:45 +02:00
uv.lock feat(amtrak): scrape rider alerts and sync them to cafe-car 2026-08-03 22:04:10 +02:00

Hell Gate Bridge

Sidecar worker that polls an upstream live tracker (Amtrak or buswhere/Columbia County), resolves each vehicle to a GTFS trip, and POSTs positions + per-stop trip-updates to the cafe-car ingest API. Select the source with SOURCE.

Overview

One process runs one source (SOURCE=amtrak|buswhere); deploy one container per source. Each source polls its upstream tracker, resolves the vehicle to a GTFS trip instance via the shared GtfsResolver, and hands provider-neutral VehicleUpdates to publisher.py, which POSTs them to cafe-car. cafe-car serves the resulting GTFS-RT feeds; schedule-foamer loads the static schedules the resolver matches against.

Running Locally

cp .env.example .env  # edit as needed
uv sync

python -m hell_gate_bridge.main

Development

uv sync              # install dependencies
ruff check .         # lint
ruff format .        # format
pre-commit install   # install git hooks (run once after clone)