- Confirm VRR EFA usage expectations (rate limits, allowed usage).
- Validate which VRR endpoints we can use:
- Stop finder (
XML_STOPFINDER_REQUEST) - Departure monitor (
XML_DM_REQUEST) - Trip request (
XML_TRIP_REQUEST2) for route detail if needed
- Stop finder (
- Decide how monthly GTFS snapshots are ingested/refreshed.
- Define the initial data model:
- Stations (EVA, DS100, name)
- Route selection per station (trip labels, line, destination/direction)
- Timetable stops (planned vs. changed events)
- Travel time profiles (slow/fast/custom)
- User preferences (tracked station + route + direction)
- Decide on refresh cadence for planned vs. change data and caching strategy.
- Scaffold Angular app in
apps/web. - Establish routing and layout shell.
- Create a departures-board component (static for now).
- Define UX for:
- ✅ Station selection (Timetables
/station/{pattern}) - ✅ Route + direction discovery for a station
- ✅ Route tracking selection per station
- ✅ Travel-time profile configuration per tracked route
- ✅ Station selection (Timetables
- Scaffold Worker in
workers/api. - Define API endpoints:
- ✅
GET /api/stations(VRR GTFS-based station lookup) - ✅
GET /api/departures(VRR DM realtime) - ✅
GET /api/routes(GTFS-based route discovery) - ✅
GET /api/tracked-stations - ✅
POST /api/tracked-stations - ✅
GET /api/tracked-routes - ✅
POST /api/tracked-routes - ✅
GET /api/travel-times - ✅
POST /api/travel-times
- ✅
- Implement request validation and error handling.
- Create D1 schema for configuration data.
- Add KV for caching planned slices and real-time changes.
- Implement DAO layer in
packages/sharedorworkers/api. - ✅ Normalize tracked route line codes (strip
de:nrw.de:prefix).
- ✅ Build Dortmund GTFS station + route index.
- ✅ Use VRR DM for realtime departures.
- Implement optional trip-detail lookup via
XML_TRIP_REQUEST2. - Handle cancellations, platform changes, and delays from VRR responses.
- Calculate leave-home recommendations based on travel profiles and departure times.
- Status rules:
- On time vs. delayed vs. cancelled
- Action rules:
- “Walk slowly”
- “Hurry”
- “Wait for next one”
- ✅ Display departures board with live departures data.
- ✅ Render departures board text with split-flap display components.
- ✅ Correct split-flap panel orientation.
- ✅ Support umlauts (ÄÖÜ) in split-flap display.
- ✅ Add feature flag to toggle split-flap vs. monospaced board display.
- Show status and recommended action for each tracked station + route + direction.
- Add settings screens for configuration.
- Add basic logging in Workers.
- Add frontend error boundaries and UX states.
- Add unit tests for business logic.
- Configure Cloudflare Pages build settings.
- Add Wrangler deployment scripts.
- Add CI checks (lint/test/build).