Carta Operum
Survey chart of the island of TicketBus365. Its places are the app's features.

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

Kyiv to Warsaw: four departures to compare by price, time or duration
Plate I. Kyiv to Warsaw: four departures to compare by price, time or duration
Choosing seats on the bus layout
Plate II. Choosing seats on the bus layout
Two seats, one live total, and the choice to buy or reserve
Plate III. Two seats, one live total, and the choice to buy or reserve
Engraving: a kraken wraps its arms around a lighthouse at sea
Plate IV. The Seat-Map Kraken assails the Search Lighthouse

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