We wanted to build an app that we would actually use on a day-to-day basis. So we decided to tackle one of the greatest inconveniences of every day life in Chicago: picking which song to play while you wait for your CTA train. Pass the AUX to DJ CTA and he'll make sure there's no music-free downtime before your train arrives!

What it does

DJ CTA sends a Spotify track recommendation while you wait for your next CTA train. Simply select your stop and route, or find the nearest stop using geolocation, and DJ CTA will try to find a Spotify track that's just as long as your wait time.

How we built it

We built DJ CTA as a progressive web app for cross-device compatibility. The backend runs in a Docker container on Google Cloud Run, making calls to the Spotify and CTA tracker APIs. The static frontend is served from a Google Cloud Storage bucket. We stored our source code in GitHub, and added CircleCI CI/CD that auto-deploys to GCP on pushes to the main branch.

Challenges we ran into

Building a full-stack web app requires a lot of steps across the entire stack. The primary blocker for backend development was setting up Google Cloud services: there are a ridiculous number of IAM policy and role changes that need to be made before a basic deploying a service on Cloud Run. We had to change billing accounts a number of times because we were blocked by organization-level IAM policies. The Spotify API was working great on Saturday, but appears to be down on Sunday unfortunately. We had a working app on Saturday, and are very sad that these API dependencies weren't functioning on the last day of the Hackathon.

Accomplishments that we're proud of

We're proud that we had a working app at midnight on Saturday, before the Spotify API stopped responding!

What we learned

Jacob learned a lot about Next.js, and Ethan used the FastAPI framework for the first time!! We put together a functional web app last night, but unfortunately had to disable the core functionality due to unavailable APIs.

What's next for dj-cta

We would like to try deploying the site live when our dependencies are back online!

Share this project: