Flutter Booking App Boilerplate
Accounts, appointment and scheduling data models, FCM reminder plumbing, and a RevenueCat paywall — the booking-MVP essentials wired in BLoC across iOS, Android, and Web.
This Flutter booking app template is a $69 one-time Flutter (Dart) boilerplate for appointment and reservation apps. It ships Firebase Auth accounts, scheduling and appointment data models behind a clean repository, FCM and local-notification plumbing for reminders, and a RevenueCat paywall for any premium booking tier. You own the full source, ship to iOS, Android, and Web from one codebase, and get lifetime updates. It is the foundation — your availability rules, calendar sync, and any double-booking guards specific to your business are built on top.
Booking apps fail at the boring details, not the calendar UI
Anyone can render a calendar grid. What sinks a booking MVP is the state around it: an appointment that gets confirmed twice, a reminder that fires after the slot has passed, a cancellation that doesn't free the slot, an account that loses its bookings on a new phone. The Flutter Kit gives you that reliable substrate. Accounts, an appointment lifecycle (requested → confirmed → completed → cancelled), and reminder scheduling all live in BLoC/Cubit with get_it, so the logic is testable and separate from your UI. You build the availability rules for your business; the kit makes sure the booking that results survives the real world.
- Firebase Auth accounts so a booking belongs to a real, recoverable user
- Appointment lifecycle modeled as Firestore documents you can stream
- Reminder scheduling through FCM and local notifications
- State survives login, logout, cancellation, and reinstall
Scheduling models and reminders, concretely
Appointments and time slots are plain Dart models behind a Firestore repository registered in get_it. Because the lifecycle is explicit, a reminder is just a scheduled notification keyed to the appointment's start time, and a cancellation transitions the document's status so the slot can be reopened by your rules. FCM and local notifications are already wired with a diagnostics screen that surfaces a copyable device token, so 'your appointment is tomorrow' nudges are about deciding when to fire them, not about plumbing the notification permission flow.
class BookingCubit extends Cubit<BookingState> {
BookingCubit(this._repo, this._reminders) : super(const BookingInitial());
final BookingRepository _repo;
final ReminderService _reminders;
Future<void> confirm(Appointment appt) async {
emit(const BookingSubmitting());
final saved = await _repo.confirm(appt); // status -> confirmed
await _reminders.scheduleAt(
id: saved.id.hashCode,
when: saved.startsAt.subtract(const Duration(hours: 24)),
title: 'Appointment tomorrow',
body: 'Your booking with ${saved.providerName} is in 24h.',
);
emit(BookingConfirmed(saved));
}
}Monetizing with a paywall that already works
The kit wires RevenueCat so a booking app can charge the way booking apps usually do: a subscription for unlimited bookings, a pro tier for providers, or gating premium time slots — all digital purchases that must go through StoreKit 2 and Play Billing on mobile. Free trials, restore purchases, and entitlement gating are pre-built, and the paywall screens theme from your centralized Material 3 design tokens. If you also need to take a real-world payment for the service itself (a deposit, say), that is an external-processor transaction the platforms allow; the kit's entitlement and appointment structure gives you a clean place to attach it.
- RevenueCat paywall: trials, restore, entitlement gating pre-built
- Gate unlimited bookings or a provider 'pro' tier behind a subscription
- Paywall and booking screens theme from one design-token file
- GA4 with consent management to watch trial-to-paid conversion
When a different starting point is the honest choice
If your core value is a deep scheduling engine — multi-resource availability, complex recurrence, real-time team calendars synced to Google and Outlook — much of that is backend and calendar-API work that no front-end starter shortcuts. If you run a single-location business and just need clients to book online, an off-the-shelf SaaS like Calendly or a no-code builder may be cheaper than building anything. And if your reservations are web-first with Stripe deposits and no app-store presence, a web stack fits better than a mobile-first RevenueCat kit. The Flutter Kit is the right call when you want a code-first booking app you fully own, with accounts, scheduling models, reminders, and a paywall already wired so you can focus on your booking rules and your customers.
The Flutter Kit vs a generic Flutter template for booking
| Feature | The Flutter Kit | Generic free template |
|---|---|---|
| Price | $69 one-time, unlimited projects | $0–$30, quality varies |
| Accounts | Firebase Auth, multiple providers | Often login UI only |
| Appointment models | Lifecycle + Firestore repository | Hard-coded sample data |
| Reminders | FCM + local notifications wired | Rarely included |
| Paywall | RevenueCat trials + restore | |
| Architecture | BLoC/Cubit + get_it, testable | Often setState in widgets |
| Updates & support | Lifetime updates + docs |
Frequently Asked Questions
Does the booking app template send appointment reminders automatically?
How does the booking boilerplate prevent an appointment from being double-confirmed?
Can I charge a subscription for unlimited bookings in this appointment app?
Does the booking boilerplate sync with Google Calendar or Outlook?
Can a booking app built on this kit run on the web as well as mobile?
Is the booking boilerplate tied to Firebase for storing appointments?
Keep exploring
Ship the booking app, not the reminder plumbing
Start with accounts, appointment models, FCM reminders, and a RevenueCat paywall already wired in BLoC. $69 one-time, full source, lifetime updates, iOS + Android + Web from one Dart codebase. See /features.
Get The Flutter Kit — $69One-time purchase · Lifetime updates · Unlimited projects