Inspiration
[One real moment, e.g. "I kept watching my bus pull away just as I reached the stop."] Every transit app tells you how to get somewhere. None tells you whether you'll catch the bus you're walking toward, or when you should have left. For the "Projects for Daily Life" theme, I wanted to answer that question.
What it does
Just-In-Time is a Singapore bus and MRT assistant.
- Pick a destination (or a saved place) and an arrive-by time
- Plans multi-leg journeys across bus, MRT and LRT, ranked by your priority: fastest, fewest transfers, least walking, bus only or MRT only
- Shows a catch probability for your first bus or train, updated as you walk
- Gives a leave-by time based on your own measured walking speed
- Shows live bus arrivals with seat availability, and scheduled MRT times (clearly labelled, not live)
- If you miss it, offers instant alternatives; late at night, links to ride apps
- Get-off alert as you near your stop (works while the page is open)
- Train service alerts, light and dark themes
How I built it
- Backend: Python and FastAPI
- Frontend: a single HTML and vanilla JS page with Leaflet maps
- Data: LTA DataMall (live bus arrivals, bus routes, train timetable) and OneMap (search and public transport routing)
- Catch probability: a transparent heuristic from bus ETA, walking distance, GPS accuracy and measured walking speed; the explanation text is written by code from the same numbers, not by a model
- Service hours: every bus and train leg is checked against first and last service times, including public holidays
- Tooling: built with Claude Code, with Claude Design for the UI, and Remotion for the demo video
- Hosting: Render
Challenges
- Estimating walking speed reliably from phone GPS and motion sensors
- OneMap routing has no arrive-by mode, and sometimes returns buses that have stopped running, so I filter every leg myself
- MRT has no live arrival feed, so I stayed honest and labelled it scheduled
- Keeping privacy: no location is stored, logs strip coordinates, and motion data stays on the phone
- Keeping hundreds of UI details consistent across screens
What I learned
Small details decide trust: a 30 m difference at the stop, a bus that already finished its last trip, a label that says "scheduled" instead of pretending to be live.
What's next
Custom start locations, exact MRT timetables, and learning from user feedback on train timings.
Data and attribution
Contains information from LTA DataMall and OneMap, used under their licences.
Built With
- claude
- cursor
Log in or sign up for Devpost to join the conversation.