Back to Blog
Mobile Development

BookIt KE: Building a Booking App with Flutter

View Repository on GitHub

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.

View on GitHub →