A progressive web application that gives you real-time updates of weather and train status at any MTA station in NYC.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.



A PWA that gives you real-time updates of weather and train status at any MTA station in NYC.


In my final project for the CIS2200 class I was TA'ing for I knew I wanted to make something that the students might find useful. I thought about the painpoints in my day, and being a New Yorker, the MTA instantly came to mind.

Any New Yorker could attest to the frustration of arriving at the station just for the train to be leaving, forcing you to wait tens of minutes for the next train, potentially making you late. Being someone who is obsessed with optimizing processes I came up with Choochoo, an app to display arrival times with a simple and pleasant interface while also providing the extra value of showing the weather conditions.

My biggest project yet, I wanted to get as much as I could out of the opportunity. I used it as an excuse to learn a litany of new tools and techniques, including React Hooks, Adobe XD, CSS Modules, and a bunch of asynchronous stuff. I also wrote a Node and Express backend to parse and serve the data from the MTA (boy they don't make it easy), and I set up continuous integration with Heroku.

The goal with this project, like with all my personal projects, was to learn as much as I could about best-practice front-end programming. As such, I wrote this project with zero external libraries or dependencies (outside of next-gen React with Hooks and Suspense). I wrote my own error handling input component, a debouncing hook, an auto-retrying network issue handler, and more.

I'd recommend checking out the source of the backend server to see how I battled against the MTA API to get workable data, and the entrypoint to my React frontend to see the cool tricks I used to make a lightweight and optimized PWA.

Check it out here!