Flowcharts

Customer Booking Flow

End-to-end flow for how a customer discovers, books, pays for, and completes a service on the Booki platform.

This diagram covers the complete customer journey — from opening the booking page to the appointment being fulfilled. Both the guest path and the registered customer path are shown.


Full Flow

┌─────────────────────────────────────────────────┐
│  Customer opens the booking page                │
│  https://{slug}.booki.app/{branchSlug}          │
└──────────────────┬──────────────────────────────┘
                   │
                   ↓
┌─────────────────────────────────────────────────┐
│  First visit?                                   │
└──────┬───────────────────────┬──────────────────┘
       │                       │
   New User             Has Account / Continue as Guest
       │                       │
       ↓                       │
┌──────────────────┐           │
│  Register        │           │
│  Name · Email    │           │
│  Phone · Password│           │
└──────┬───────────┘           │
       │                       │
       ↓                       ↓
┌──────────────────────────────────────────────────┐
│  Home — Browse available packages & hours        │
│  GET /api/v1/tenant/:slug (load org context)     │
└──────────────────┬───────────────────────────────┘
                   │
                   ↓
┌─────────────────────────────────────────────────┐
│  Click "Book Now" on a package                  │
└──────────────────┬──────────────────────────────┘
                   │
                   ↓
┌─────────────────────────────────────────────────┐
│  Navigate to Schedule Page                      │
│  Select available date and time slot            │
│  GET /api/v1/bookings/fully-booked-slots        │
└──────────────────┬──────────────────────────────┘
                   │
                   ↓
┌─────────────────────────────────────────────────┐
│  Fill in contact details                        │
│  Guest: name · email · phone (required)         │
│  Registered: pre-filled from JWT profile        │
│  Optional: set password to register as customer │
└──────────────────┬──────────────────────────────┘
                   │
         ┌─────────┴──────────┐
         │                    │
       Guest            Authenticated
         │                    │
         ↓                    ↓
POST /bookings/        POST /bookings
type/:type
(header: X-Tenant-Slug
 + X-Branch-Slug)
         │                    │
         └─────────┬──────────┘
                   │
                   ↓
┌─────────────────────────────────────────────────┐
│  Booking created (status: pending)              │
│  Confirmation email sent to customer            │
└──────────────────┬──────────────────────────────┘
                   │
         ┌─────────┴──────────┐
         │                    │
       Guest             Authenticated
         │                    │
         ↓                    ↓
┌────────────────┐    ┌───────────────────────────┐
│ Verify booking │    │ Skip — already verified   │
│ via email link │    │ via registered account    │
│ PUT /:id/verify│    └──────────────┬────────────┘
└───────┬────────┘                   │
        └──────────────┬─────────────┘
                       │
                       ↓
┌──────────────────────────────────────────────────┐
│  Awaiting owner confirmation                     │
│  (see Owner Booking Management flow)             │
└──────────────────┬───────────────────────────────┘
                   │
         ┌─────────┴──────────┐
         │                    │
     Confirmed             Declined
         │                    │
         ↓                    ↓
┌─────────────────┐  ┌──────────────────────────────┐
│ Payment step    │  │ Customer notified via email  │
└────────┬────────┘  │ Decline reason included      │
         │           └──────────────────────────────┘
         │
    ┌────┴────────────────────────┐
    │                             │
  Maya                          Cash
    │                             │
    ↓                             ↓
POST /maya/bookings/:id/   Pay on arrival
checkout-session
    │
    ↓
Customer redirected to
Maya payment page
    │
    ↓
Payment completed on Maya
    │
    ↓
POST /maya/bookings/:id/
verify-session
    │
    └─────────────┬───────────────┘
                  │
                  ↓
┌─────────────────────────────────────────────────┐
│  Appointment Day                                │
└──────────────────┬──────────────────────────────┘
                   │
         ┌─────────┴──────────┐
         │                    │
  Customer shows up     Customer no-show
         │                    │
         ↓                    ↓
  Owner marks         Owner marks
  completed           no-show
  PUT /:id/complete   PUT /:id/no-show

Booking Status Lifecycle

StatusSet when
pendingBooking submitted (guest or customer)
confirmedOwner confirms the booking
declinedOwner declines; customer notified
pending-rescheduleCustomer requests a reschedule; owner must review
ongoingAppointment in progress (appointment day)
completedOwner marks appointment done
no-showOwner marks customer as no-show
cancelledCustomer cancels their booking

Customer Actions After Booking

Registered customers can manage their bookings from the dashboard:

ActionEndpointCondition
View bookingsGET /api/v1/bookingsAuthenticated customer
ReschedulePUT /api/v1/bookings/:id/rescheduleBefore appointment date
CancelPUT /api/v1/bookings/:id/cancelBefore appointment date