https://drive.google.com/drive/folders/1N3DbFGEVFhDjSoczjD2pptl3fPz9GLaf?usp=drive_link Zip file for project^^

Inspiration

This project started from a simple frustration with transit apps. Most apps show schedules and maps, but they don’t answer the real question people have when they’re about to leave: “Can I still make it?”

As students relying on buses, we realized that timing decisions are what matter most. We wanted to build something that doesn’t just display information, but actually helps users decide what to do in the moment.

What it does

The Bloomington Transit Smart App shows live bus locations, route overlays, and upcoming schedules.

Its main feature, Smart Assist, helps users decide if they can catch a bus. By selecting a stop and adjusting walking time, the app tells the user whether to leave now or expect to miss it.

The app also includes a demo mode, so it works reliably even without internet access.

How I built it

I built the app using Kotlin and organized the code so everything stays clean and easy to manage. We used Jetpack Compose to design the screens, and added Google Maps to show where buses are and how routes look.

The app uses transit data for routes, stops, and schedules, along with live updates to track where buses are in real time. We used tools that let the app update automatically when new data comes in.

To make sure the app always works during demos, we also added a demo mode that simulates buses and arrival times, even without internet.

Challenges we ran into

One major challenge was combining static and realtime transit data. These data sources are structured differently, so joining them into a consistent format required careful handling.

Another challenge was rendering routes on the map. The GTFS shape data did not always align perfectly with roads, which resulted in simplified route lines.

We also had to make Smart Assist reliable. Real-time predictions can be inconsistent, so we implemented fallback logic to ensure the feature still produces meaningful results, especially in demo mode.

Accomplishments that we're proud of

We are most proud of building a fully functional app that goes beyond displaying transit data and actually helps users make decisions.

The Smart Assist feature is a key highlight, providing real-time, interactive feedback based on user input.

We also successfully integrated live map visualization with moving vehicles and route overlays, creating a complete end-to-end experience.

What we learned

We learned how to work with real-world transit data and integrate multiple data sources into a single application.

We also gained experience with modern Android development tools like Jetpack Compose, coroutines, and StateFlow.

Most importantly, we learned the importance of designing around user decisions rather than just presenting raw data.

What's next for Bloomington Transit smart app

In the future, we would improve route accuracy by better aligning routes with actual road paths.

We would also add features like notifications when a bus is approaching, automatic user location detection, and additional UI improvements.

Overall, the goal would be to make the app more precise, personalized, and production-ready.

Built With

  • android
  • compose
  • coroutines
  • data
  • google
  • gtfs
  • jetpack
  • kotlin
  • maps
  • okhttp
  • realtime
  • retrofit
  • sdk
  • stateflow
  • static
  • studio
+ 3 more
Share this project:

Updates

Submission history