BookIt KE: Building a Booking App with Flutter
Why Flutter?
When I started BookIt KE, I needed a framework that could target both Android and iOS from a single codebase without sacrificing native performance. Dart and Flutter were the clear choice — the hot reload workflow alone saved me countless hours during development.
What Is BookIt KE?
BookIt KE is a booking platform tailored for Kenyan service providers. Whether it's a salon, a tour operator, or an event space, businesses can list their availability and customers can book slots in real-time.
Architecture
lib/
├── models/ # Data models (Booking, User, Service)
├── screens/ # UI screens (Home, Booking, Profile)
├── services/ # API and Firebase services
├── widgets/ # Reusable components
└── main.dart # App entry point
I followed a clean architecture approach, separating business logic from UI concerns. State management is handled with Provider, keeping the widget tree predictable and testable.
Key Features
- Real-time availability — Calendar views update instantly when slots are booked
- Push notifications — Reminders sent 24 hours and 1 hour before appointments
- Payment integration — M-Pesa integration for seamless mobile payments (essential for Kenya)
- Offline support — Local caching so users can browse services without connectivity
Challenges
Integrating M-Pesa's API was the steepest learning curve. The documentation is dense, and handling the callback flow (STK push → confirmation → timeout handling) required careful state management. I ended up building a polling mechanism as a fallback for when callbacks fail.
Takeaways
Building for a specific market (Kenya) forced me to think deeply about UX patterns that differ from Western assumptions — M-Pesa over card payments, WhatsApp-based support over email, and offline-first design for areas with unreliable connectivity.