The story
The story
In Montevideo the bus is called a bondi, and a trip on one is several steps: walk to a stop, wait, ride, get off at the right corner, walk again. The city publishes where every bus is. BondiUY plans the trip with OpenTripPlanner over the city’s schedules and streets, then follows it as it happens, one step on screen at a time.
Most of the work is in the handover between steps. Your GPS and the bus reports arrive at their own pace, sometimes late or not at all, and from those samples the app has to decide when you reached the stop, when you boarded and when to get off. The trip logic lives in plain Dart with no Flutter imports, and the interface reads it through one state contract, so the same logic runs on a phone, in the tests and in this demo.


- The wait counts down from the bus’s live position and its distance to your stop.
- Between reports the bus keeps moving along its route, but never past your stop.
- When the bus is close, the app tells you to get ready to board.