Gazetteer ◆ Island the first
TicketBus365
bus tickets across Europe
- Year
- 2026
- Role
- Flutter Developer
- Platforms
- iOS, Android
- Stack
- Flutter, Dart, Riverpod, go_router, REST API
Log of the voyage
The brief
The app had to carry a traveler from a search to a paid ticket in one sitting: one-way or round trip, a comparison of departures, every stop on the route, a seat for each passenger, and a choice between paying now and reserving. A guest had to manage all of it without an account.
The course we set
One Flutter codebase serves iOS and Android. Riverpod holds the booking state, go_router keeps the steps of a booking in one flow, and a REST API supplies departures, bus layouts and prices. Language and currency are settings of the interface, not separate builds: six languages and four currencies (EUR, PLN, CZK and UAH) share the same screens.
The landing
The finished app covers the whole journey, from a search with city autocomplete to a QR or PDF e-ticket, and shows where the bus is on a live map. Guests can skip the account entirely; everyone else signs in with a one-time code.
Plates
TicketBus365, in its own colours
The Seat-Map Kraken
Buses differ: single and double-deckers, different numbers of rows, seats already taken, and a rule that choosing a seat is offered only with full or partial payment. A seat map drawn by hand for one bus would break on the next route.
How it was tamed
The map is not drawn by hand. It is rendered from the bus schema the booking API sends for each trip, so a double-decker or a new carrier needs no new screen. Taken seats are locked, every passenger gets a seat, and the selection can be edited or cleared. It feeds straight into the live total at checkout.
Soundings, counted in the finished app
- 6languages in one app
- 4currencies at checkout: EUR, PLN, CZK and UAH
- 1Flutter codebase for iOS and Android
- 2ways to pay: online, or reserve and pay on boarding