How to build a booking app for iOS
What a booking app needs
- A service or resource catalog with duration and price
- A real availability model that prevents double booking
- A calendar and time-slot picker that respects time zones
- Confirmation, reminders, and cancellation or reschedule
- Accounts so a booking is tied to a person (Supabase auth)
- A backend so availability is shared, not stuck on one phone
This is a medium build. The MVP slice is one service type, a single provider, and a confirmed booking with a reminder. Add multiple providers, deposits, and recurring slots after that works.
Core screens and data
A booking app needs a small set of screens: a service catalog, an availability calendar, a booking form, a confirmation, a client's booking history, and a provider day view. Here is what each screen does and the data behind it.
| Screen | What it does | What it stores |
|---|---|---|
| Service catalog | Lists services a client can book | Service name, duration, price, description |
| Availability calendar | Shows open slots for a chosen day | Provider working hours, breaks, blocked times |
| Booking form | Collects details and confirms a slot | Selected slot, client name, contact info |
| Confirmation | Confirms the booking to the client | Booking id, status, created and updated times |
| My bookings | Lets a client view, reschedule, or cancel | Booking history tied to the client account |
| Provider day view | Shows staff the day's schedule | Per-provider bookings and slot assignments |
| Reminders | Sends a reminder before the appointment | Reminder time, notification token, sent status |
Starter prompt
This is the plain-English prompt you paste into AppFlight to build the first version. AppFlight reads it, plans the screens, and generates native Swift you can run in the live simulator and then refine in plain language.
Build a booking app for a small service business. Clients open the app, browse a list of services with a duration and price, then see the open time slots for a chosen day. When a client picks a slot they enter their name and contact, confirm the booking, and get a confirmation screen plus a reminder notification before the appointment. Clients can view their upcoming bookings and cancel or reschedule. Store services, availability, and bookings in Supabase so two people cannot take the same slot and the provider can see the day's schedule from any device. Because clients are paying for a real-world service, add a Stripe payment step for an optional deposit at booking. Sell the app to providers as a monthly subscription that lifts the booking limit, and put that upgrade behind a RevenueCat paywall using in-app purchase.
How to build it with AppFlight
Describe it, for example: "An appointments app where a client picks a service, sees open time slots for this week, books a slot, gets a confirmation and a reminder notification, and can cancel. Providers see the day's bookings." AppFlight plans the screens, generates native SwiftUI, and runs it in a live simulator so you can try the flow immediately. Use the one-click Supabase connector for the database and auth so availability lives server-side. You iterate by asking for changes in plain language.
Monetization for a booking app
Two models are common. If you charge clients for a real-world service or a deposit, Apple allows Stripe or another payment processor, because the service is delivered in the real world. If you sell the app itself as a subscription to providers, more calendars, reminders, no booking limit, that digital upgrade goes through in-app purchase, which RevenueCat manages. Pick based on who pays: clients paying for a service use Stripe, providers paying for software use in-app purchase.
Shipping it to the App Store
When it works in the simulator, AppFlight signs the build, uploads to TestFlight so you can test real bookings on your device, then submits to the App Store with metadata and screenshots. If Apple rejects the build, AppFlight reads the reason, fixes it, and resubmits. Apple reviews every app, so a submission is not the same as an approval, but the pipeline runs without you opening Xcode.
FAQ
Do I need a backend for a booking app?
Yes, for anything beyond a single device. Availability has to be shared so two people cannot book the same slot. AppFlight connects Supabase with one click for the database and accounts.
Can a booking app take payments?
Yes. For a real-world service or a deposit, Apple allows Stripe or another processor. If you sell the app as a subscription to providers, that digital upgrade uses in-app purchase.
How long does a booking app take to build?
It is a medium build. A focused first version with one service, real availability, and reminders is realistic. Multiple providers, deposits, and recurring slots come after.