Technical Details

The Data

You’re a nerd. It’s why you’re here. Welcome to a discussion of what data is collected and where it is presented. All data is gathered from 511.org. This data is separated into two categories: GTFS static data and dynamic data.

The GTFS static data includes things like the list of stops, list of trains and which stops they make, list of colors and route names, things like that. This changes when Caltrain updates it. Every time you open or resume the app, the app checks the server for a checksum of the current static data. If Caltrain has updated the data, the checksum will have changed, and the app will download the newest data. This app intentionally does not come with a copy of this data, as that data would be immediately out of date!

The dynamic data is updated by a call to 511.org‘s API servers every 10 seconds, as well as calls to various APIs which handle alert information. The app calls dynamic data every 10 seconds to make sure the data on the server is always up to date. That dynamic data consists of realtime lists of all the trains on the track and associated information and realtime lists of all the stops on the system and associated information. It also contains alert data from to 511.org and Caltrain. This allows for the granular breakdowns in realtime data for each train, each stop, and each type of alert (critical alert, general alert, train alert, station alert, and public address display system (PADS) notifications (what is displayed on each station platform).

Known App Bugs

I am aware of the following non-data related issues and am working on fixing them. Data-related issues can be found below.

  • No currently known bugs

Known Data Bugs

Data for this app is collected from 511.org. Below is the list of known 511.org data bugs affecting the Caltrain Commuter app. Caltrain is aware of these issues and is working on fixing them.

  • Trains do not show up in real-time train data after second-to-last stop.
  • Trains do not show up in real-time departure information on their second-to-last stop.
  • Sometimes an alert will show up that should not which says:
    The following stops may also be affected:
    – [Stop 1]
    – [Stop 2]

The Tech Stack

Interested in what tech I’m using to build this app? Well, here it all is!

Server-side

Language:

  • Python/Flask API

Development:

  • Github
    • Github Actions
  • Docker Hub
    • Docker Container
  • VSCode

Management:

  • Tailscale
  • Portainer
  • Traefik

Hosts/DNS:

  • Digital Ocean Droplet
    • Ubuntu + Docker
  • Cloudflare

Client-side

Language:

  • Flutter

Key Packages:

  • Firebase (Notifications)
  • Sentry.io (Errors/crashes)

Development:

  • Github
  • Codemagic
  • App Store Connect
  • Google Play Console
  • VSCode

Testing Devices:

  • iOS Simulator
  • iPhone 12 Pro
  • Samsung A12
  • iPhone SE 2020

Roadmap

These are ideas on the roadmap that I am hoping to implement as my time and energy allows. There is no set timeline or order for these ideas, nor is there a guarantee that they will ever be implemented. I would like to implement them if possible because I, like you, are an everyday rider of Caltrain and user of this app. Do not buy the app solely for a feature listed here.

Station Alert Notifications

Monthly/Daily tag on/off notifications

Scrollable or PDF of the full schedule

Map on Real Time page and subpages

Widgets

Apple Watch Interface

About Caltrain information

Live Events (iOS)

Donate

Want to help support continued development, or just say “thank you for making such an awesome app”?

Recommended donation amounts:

  • $10: Domain for one year
  • $15: Web hosting for one month
  • $30: Web hosting for two months
  • $100: Apple Developer account for one year
  • Custom: I appreciate all support, no matter how much!