Problem
A travel agency wanted its customers to search, compare and book tours themselves, from both its own catalogue and a large tour aggregator.
What I built
The Flutter app for Android and iOS, from search to booking, live on Google Play and the App Store.
Front · Flutter
- Twelve feature modules with BLoC, freezed and go_router.
- Search with filters for resort, number of nights (on a calendar), hotel stars and meals, plus sorting.
- Tour pages with flight, hotel and transfer details; booking behind a guest sign-in gate.
- My trips with travel documents, a gallery by country, hot deals and push notifications.
Behind · Integrations
- One query builder produces every search request, so the filters behave the same everywhere.
- The agency’s backend returned the same field in different shapes, so every response goes through defensive parsers.
- dio with a Hive cache interceptor, so repeat requests are fast.
Hard problems
- A backend that changes shape — parsers that accept every variant the API actually sends, instead of crashing on the unexpected one.
- Whole-party pricing — I measured how the live API priced groups and fixed the app so the price shown is the price paid.
Results
Live on Google Play and the App Store, at version 2.0.





