Quick path
Generate the calendar, time picker, and confirmation flow with ShipNative. Use Supabase for bookings + availability rules, Stripe for deposits, and expo-notifications for reminders. One hour to preview, one day to shippable.
What a booking app actually needs
- Service list with duration + price
- Calendar / time-slot picker respecting availability rules
- Customer details capture + Stripe payment
- Confirmation screen + email + calendar link
- Upcoming bookings list with reschedule / cancel
- Push reminders at -24h and -1h
- Provider view: today’s schedule + incoming bookings
The AI prompt to start with
Booking app for [niche: personal trainers / barbers / massage therapists / tutors]. Two roles: customer and provider. CUSTOMER flow: 1. Home: provider card + list of services (name, duration, price). 2. Service detail: date picker (disable dates outside availability), time slot grid. 3. Checkout: name, phone, notes, Stripe deposit payment ($25 or full price). 4. Confirmation: date/time, "Add to Calendar" link, Reschedule / Cancel. 5. My bookings: list of upcoming + past. PROVIDER flow: 1. Today: schedule with back-to-back appointments. 2. Week: 7-day calendar view, tap to see details. 3. Settings: services, availability rules, buffer times, deposit policy. DATA (Supabase + RLS): - services (id, provider_id, name, duration, price) - availability_rules (id, provider_id, day_of_week, start_time, end_time) - bookings (id, customer_id, service_id, start_time, status, stripe_payment_intent) REMINDERS: expo-notifications scheduled for -24h and -1h before start_time. Dark theme, clean typography, tab navigation.
For prompt structure, see How to Write Prompts That Produce Better React Native Code.
Availability logic without pain
Availability is the part most booking apps over-engineer. Keep it simple:
- Availability rules — one row per day-of-week with start/end times. Monday 9–5, Tuesday 9–5, Wednesday off, etc.
- Buffer time — a setting per service (e.g., 15 min) to prevent back-to-back.
- Blocked slots — a separate table for one-off holidays or vacations.
- Compute slots on the fly from the rules + bookings + blocks rather than pre-generating. Simpler math, no stale data.
Payments: deposit or full
Physical-service bookings use Stripe (no Apple tax). Pick the right model:
- Deposit at booking, balance at service. Best for high-ticket services where you want commitment without taking full payment upfront. Stripe PaymentIntent with manual capture.
- Full payment upfront. Best for low-stakes services or when no-shows are costly.
- Auth only, charge on completion. Use PaymentMethod with Stripe’s off-session charges. Card on file gets charged after the appointment.
Full Stripe setup walkthrough: Adding Stripe Payments to a React Native App.
Reminders that reduce no-shows
Reminder pushes reduce no-shows by 30–50%. Schedule two:
- -24 hours: polite confirmation with reschedule link.
- -1 hour: quick reminder with map link to the location.
Schedule both with expo-notifications when the booking is confirmed. Cancel the scheduled notifications when a booking is rescheduled or canceled.
Rescheduling and cancellations
- Allow reschedule up to X hours before (provider setting).
- Cancellation before the window: automatic full refund via Stripe.
- Cancellation inside the window: partial refund or no refund per policy.
- Clear, visible policy on the booking confirmation screen — prevents disputes.
- Always send push + email on any change. Trust is the product.
Monetization: B2B SaaS vs per-booking
- B2B SaaS (provider subscription): $19–49/month per provider. Straightforward, aligned with incumbents (Acuity, Setmore).
- Per-booking fee: 1–5% of each transaction. Attractive for providers who don’t want monthly fees. Lower upfront but less predictable revenue.
- Hybrid: free tier with 5% fee, paid tier with 0% fee. Drives adoption; upgrades become automatic at scale.
Launch: one profession, one city
Don’t build “booking for everyone.” Pick one profession and one city — barbers in Brooklyn, physical therapists in Austin, tutors in Chicago. Hand-onboard 10 providers, make the app exceptional for that niche, then expand. The generic Calendly killer has been tried 40 times; the vertical-specific booking app wins repeatedly. For launch tactics, see Pre-Launch Marketing for Mobile Apps.
Common mistakes to avoid
- Building Google Calendar sync in v1. Ship with “Add to Calendar” link instead.
- Skipping deposits in high-no-show categories. You fund no-shows with your stress.
- One reminder instead of two. -1h is the one that converts.
- Complex availability (custom per-day exceptions, per-service overrides). Keep it rule-based.
- Targeting everyone. Pick one profession, win it, expand.