View on Render: https://dart-pi-tracker.onrender.com
Live GTFS transit overlay for:
- Dallas, TX (DART):
http://www.dart.org/transitdata/latest/google_transit.zip - Hattiesburg, MS (HCT):
https://api.transloc.com/gtfs/hct.zip
The app downloads both feeds, unzips/parses GTFS, and displays routes + moving vehicle dots on a grayscale map.
- Dallas/Hattiesburg city toggle (single-city view)
- Route overlays from GTFS shapes (with fallback geometry)
- Moving vehicles based on GTFS schedules
- Simulated fallback movement when no trips are active at the current time
- Route/vehicle color matching
- Vehicle-type filters (
bus,train,other) - Dallas train-line dropdown filter (per-line multi-select)
- Light and dark mode toggle (dark mode mutes line colors)
- Manual refresh endpoint for feed reload
- Backend: Flask + Pandas + Requests
- Frontend: Leaflet + vanilla JS/CSS
- Deployment: Gunicorn (Render-ready)
- Python 3.11+
- Internet access
python -m venv .venv
.venv\Scripts\activate
pip install -r requirements.txt
python app.pyOpen: http://127.0.0.1:5000
- Feeds are refreshed on startup.
- You can force refresh with
POST /api/refresh. - Vehicle positions are schedule-derived from static GTFS (not GTFS-RT).
- TRE is excluded from Dallas data.
- If there are no currently active trips, a service-window simulation is used so vehicles still animate.
GET /healthGET /api/citiesGET /api/routes?city=dallas|hattiesburgGET /api/vehicles?city=dallas|hattiesburgPOST /api/refresh
This repo includes render.yaml.
- Push this repo to GitHub.
- In Render, create a new Web Service from the repo.
- Render will use:
- Build:
pip install -r requirements.txt - Start:
gunicorn app:app
- Build:
- Deploy.
The app binds to 0.0.0.0:$PORT for hosted environments.