Prompt Kits

Build a Booking & Appointments App

A booking app has one job that matters: never give the same time to two people. Everything else — the pretty calendar, the reminder emails, the deposit — is worthless if that fails once in front of a customer. This kit builds a real appointment system in five sequenced prompts, and it deliberately proves the double-booking guard before it touches money.

Project type: Booking & appointments app Difficulty: Intermediate Time: 1-2 days Works with: Base44 / Lovable / v0

What you'll have at the end

  • A public page listing what you offer, how long each thing takes and what it costs
  • A calendar showing only times you are genuinely free, in the visitor's own time zone
  • Bookings that cannot collide — including two people trying for the same slot at the same moment
  • Automatic confirmation to the customer and to you, plus a reminder before the appointment
  • Links that let a customer reschedule or cancel themselves, under rules you set
  • Optional deposits that hold the slot, so no-shows cost the customer something
  • An owner view of your day, your week, your time off, and everyone who has booked

Before you start

  • Your real availability, written down. Working hours per day, how long each service takes, how much gap you need between appointments, how far ahead people may book, and how late a booking may be made. Guessing these means rebuilding step 2.
  • Your service list — names, durations, prices, and whether each is in person, by phone or online.
  • Your cancellation rules. How late someone may cancel or move an appointment, and what happens after that point. Decide this before step 3, because it changes what the confirmation email has to say.
  • An email address for notifications, and — if you want deposits — a payment account you can run in test mode (Stripe is the common choice).
  • Your own calendar, if you want bookings to appear in it. Know which account it lives in.

Which platform suits this

Base44 is the strongest fit: accounts, stored data and scheduled actions live in the same managed app, with supported payment integrations available when the provider and your region are eligible. Lovable also fits well through Lovable Cloud or optional Supabase and gives you code ownership; scheduled jobs and the chosen message channel still need explicit testing. v0 can build the full-stack booking workflow, including availability rules and server logic, then deploy it to Vercel. Database, authentication, scheduled reminders and payments use selected providers or Vercel services, so configuration and production testing are more deliberate. On any platform, if you need many staff across multiple locations with shared resources and complex rules, compare this against a dedicated scheduling product before building.

Start with the first prompt on a free plan. Extra usage and some connected services may cost more as you build out the project.

Build it on

How we make money

The steps

1

Build the public site and your service list

When to use this

Start here, in a brand-new project.

Everything a customer sees before they pick a time — with no calendar and no accounts yet.

The prompt

Build a website for [BUSINESS NAME], which offers [WHAT YOU DO, e.g. private physiotherapy sessions]. The purpose of the site is to get the right person to book an appointment.

Pages: a home page explaining what you offer, who it is for and what happens at a first appointment, with a clear button to book; a services page listing everything bookable; a page for one single service; an about page; and a contact page with a form that emails me at [EMAIL] and also stores every submission.

Store the services as editable data with a private owner screen where I can add and edit them. Each service has a name, a short description, a longer description, how many minutes it takes, its price, whether it happens in person or online, and whether it is currently offered. Only services marked as currently offered appear to visitors.

On the services page show each one as a card with its name, duration, price and a button that says [BOOK BUTTON WORDING]. The button should not do anything yet — I am adding the calendar in the next step.

Include a section answering the questions customers actually ask before booking: [YOUR THREE MOST COMMON QUESTIONS].

Design: [THREE ADJECTIVES, e.g. calm, professional, uncluttered]. Colors: [YOUR COLORS]. It must be comfortable on a phone, because most people book from one. Use labelled image placeholders saying [REAL PHOTO NEEDED] — do not use stock photography and do not generate photos of people, treatments, results or premises from scratch. Editing my own real photos is fine; only invented or generated scenes are the problem.

Add three example services clearly labelled as examples for me to replace.

When finished, tell me where I edit my services and what text and images are still examples.

Check it worked

  • Every page opens and the menu works
  • The services page shows your services with the right durations and prices
  • Editing a service on the owner screen changes what the public page shows
  • A service marked as not currently offered disappears from the public list
  • The contact form sends you an email and the submission is stored
  • It reads and taps comfortably on your phone

You'll know it worked when:

A site where a stranger understands what you offer and what it costs, with services you can edit yourself.

Watch out for

Do not ask for the booking calendar in this prompt. The calendar is the hard part of this build, and it goes wrong far more often when it arrives tangled with page design in a single instruction.

2

Build availability and bookings that cannot collide

When to use this

Once the services are right. This is the step the whole kit stands on.

Customers can book real times, and the same slot can never be given twice.

The prompt

Add appointment booking to this site.

I define my availability on a private owner screen: my working hours for each day of the week, specific dates I am unavailable, how many minutes of gap I need between appointments, how far in advance someone may book, and how close to the start time a booking may still be made. Each service already has its own duration and must use it.

A visitor picks a service, then sees a calendar showing only times that are genuinely available — inside my working hours, long enough for that service, respecting my gap, not on a blocked date, and not already taken. Times already taken must not be shown as choosable at all.

Show every time in the visitor's own time zone with the time zone named on screen, and store every appointment in a way that stays correct across time zones and daylight saving changes.

To book, the customer gives [FIELDS YOU NEED, e.g. name, email, phone] plus anything specific to the service: [SERVICE-SPECIFIC QUESTIONS]. After booking they see a confirmation page with the service, date, time, duration, price and location or joining method.

The critical requirement: two people must never end up with the same slot. Check availability again at the moment of saving, not only when the calendar was displayed. If two people submit the same slot at nearly the same moment, exactly one booking is created and the other person is told clearly that the time was just taken and is shown the next available times.

Add an owner screen listing all bookings with the customer's details, sortable by date, where I can cancel a booking.

Do not add payments, emails or reminders yet.

Check it worked

  • Picking a service shows a calendar with plausible times, and the time zone is named on screen
  • A booked time disappears from the calendar for the next visitor
  • Booking a 60-minute service does not offer a slot with only 30 minutes before your next appointment
  • A date you blocked shows no times at all
  • The booking appears in your owner list with the right details
  • Opening the site with your phone set to another time zone shows the same appointment at the correct local time

You'll know it worked when:

You tried to double-book the same slot from two browser windows at once, and exactly one booking was created while the other was refused with a clear message.

Watch out for

Run that double-booking test yourself — it is the single test that decides whether this is a booking system or a form. Checking availability only when the page loads is the classic failure: two people open the same calendar, both see 10:00 free, and both get it. Also test one appointment either side of a daylight saving change if your country has one; times that quietly shift by an hour are a real and common bug.

3

Confirmations, reminders and your own calendar

When to use this

After the double-booking test passes.

Nobody forgets the appointment, and nobody has to phone you to change it.

The prompt

Add automatic messages and calendar handling to this booking system.

When someone books, immediately email them a confirmation with the service, date, time in their own time zone, duration, price, location or joining link, my cancellation rules, and a calendar file they can add to their own calendar. Email me a copy with their contact details and any answers they gave.

Send the customer a reminder [HOW LONG BEFORE, e.g. 24 hours] before the appointment, and only if the appointment is still active. Never send a reminder for a cancelled appointment and never send the same reminder twice.

Every confirmation and reminder includes a private link that lets the customer reschedule or cancel by themselves. Rescheduling shows the same availability rules as normal booking and frees their old slot only once the new one is confirmed. Allow changes up to [YOUR CUTOFF, e.g. 24 hours] before the appointment; after that, the link explains my policy and tells them how to reach me.

Notify me when a customer cancels or reschedules, and show cancellations clearly in my owner screen rather than deleting them.

Also connect confirmed bookings to my own [CALENDAR SERVICE, e.g. Google Calendar] so they appear in the calendar I actually use, and update or remove the entry when a booking changes or is cancelled. Tell me exactly what I need to do to authorize that connection.

Use a proper email delivery service so these messages reliably arrive rather than landing in spam, and tell me what I need to set up for that.

Check it worked

  • Booking a test appointment sends you and the customer an email within a minute or two
  • The customer's email shows the time in their time zone and includes an addable calendar file
  • The booking appears in your own calendar
  • The reschedule link offers real available times and frees the old slot only after the new one is confirmed
  • Cancelling through the link frees the slot, notifies you, and removes the entry from your calendar
  • No reminder arrives for an appointment you cancelled

You'll know it worked when:

A test appointment booked, confirmed by email, moved by the customer link, and cancelled — with your own calendar correct at every stage.

Watch out for

Test the reminder by booking something just far enough ahead to trigger one, and check the spam folder of an address that is not on your own email provider. A reminder that arrives after the appointment usually means times are being stored without a time zone; fix that in step 2 rather than patching the email.

4

Take deposits so no-shows cost something

When to use this

After confirmations and rescheduling work. Skip this step entirely if you do not want deposits.

Money changes behaviour, without making booking feel like a checkout.

The prompt

Add optional deposits to this booking system using [PAYMENT PROVIDER, e.g. Stripe] in test mode.

I decide per service whether it requires a deposit and how much: [WHICH SERVICES AND HOW MUCH]. Services without a deposit keep booking exactly as they do now, with no payment step.

When a service requires a deposit, the customer chooses their time and then pays on the provider's own secure payment page. Never handle or store card details on my site.

The slot must only be confirmed once the payment is confirmed. If the customer abandons payment, the slot is released for other people within [HOLD TIME, e.g. 15 minutes] rather than staying blocked. The booking must be created by the payment confirmation itself, never by anything the customer's browser can trigger.

The confirmation email states clearly what was paid, what remains to pay, and my refund rule: [YOUR DEPOSIT AND REFUND POLICY]. Show the same rule on the booking page before payment, not only afterwards.

Add a simple owner view of deposits taken, and tell me what I must do myself in the payment provider's dashboard, including where to put my secret key in the platform's secure settings.

Check it worked

  • A service without a deposit still books in one step, with no payment
  • A service with a deposit opens the provider's payment page with the correct amount
  • Paying with the provider's test card confirms the booking and sends the confirmation email
  • Abandoning payment leaves the slot bookable again shortly afterwards, rather than blocked
  • Your deposit policy is visible before payment, not just in the confirmation
  • The owner view shows the deposit against the right appointment

You'll know it worked when:

A test booking with a deposit paid end to end, and a second attempt abandoned mid-payment that released the slot.

Watch out for

Test mode and live mode look identical on screen. Before you take a real booking, switch to live keys and book yourself once with a real card, then refund it. Also decide your refund rule before launch and write it in plain words — deposit disputes come from vague policies far more often than from the amount.

5

Owner tools, time off and more than one of you

When to use this

Once the customer-facing flow is complete and tested.

A system you can actually run day to day, not just demonstrate.

The prompt

Improve my owner tools for this booking system.

Give me a dashboard showing today's appointments in order with customer names and contact details, this week at a glance, how many bookings and cancellations happened this month, and which services are booked most.

Let me block time off — a single afternoon, a full day or a holiday range — and have those times disappear from public availability immediately without touching existing bookings. Warn me if I block a period that already contains a booking, and show me which ones.

Let me add an appointment manually for someone who booked by phone, using the same availability rules so I cannot create a clash.

[IF YOU HAVE STAFF, KEEP THIS PARAGRAPH:] Support more than one person taking appointments. Each has their own working hours, their own time off and their own services. Customers either choose who they want or take the first available person, and each staff member sees only their own day.

Keep everything already working exactly as it is — especially the double-booking protection, the confirmation and reminder emails, and the payment flow.

Check it worked

  • The dashboard shows today correctly, and matches what you see in your own calendar
  • Blocking tomorrow afternoon removes those times from the public calendar straight away
  • Blocking a period containing a booking warns you and names the booking rather than silently hiding it
  • A manually added appointment blocks that time for the public
  • Everything from steps 2 to 4 still behaves exactly as before, including the double-booking test

You'll know it worked when:

You ran your actual next working day from this dashboard — including blocking time off — without opening anything else.

Watch out for

Re-run the double-booking test after this step. Adding manual appointments and staff is the change most likely to reopen the hole you closed in step 2, because it introduces a second way for an appointment to be created.

Going live

  • Replace every example service and image placeholder with your real services, durations, prices and photos
  • Set your real working hours, gap between appointments and booking window — the defaults are almost certainly not yours
  • Re-run the double-booking test on the live site, from two windows at once
  • Book yourself one real appointment end to end on the live site: confirmation email, calendar entry, reminder, reschedule link, cancellation
  • If you take deposits, switch to live payment keys and make one real payment to yourself, then refund it
  • Put your cancellation and deposit policy in plain words on the booking page, not only in the confirmation email
  • Add your privacy policy and terms — you are storing people's contact details and appointment history (see the legal pages prompt)
  • Connect your custom domain and confirm the padlock appears

Spend fewer credits

Every builder charges you for the work its AI does — so the cheapest habit is thinking before you build. These six rules cut most of the waste, whichever platform you choose.

  1. Plan in a free chat first. Sketch the whole thing in ChatGPT, Claude or Gemini — pages, features, what each form collects, what it should look like. Thinking there is free; thinking inside a builder is billed.
  2. Start from a written prompt, not a sentence. "Make me a website" is the most expensive sentence in AI building. A complete first prompt — like the ones on this site — saves dozens of correction rounds.
  3. Don't be lazy with the details. Every detail you leave out comes back as a correction you pay for. Business name, colors, every page, every form field, what happens after someone submits — put it all in the first prompt.
  4. One change per message afterwards. "Fix the header, and the form, and the colors" produces a tangle that costs more to unpick than it saved.
  5. Stuck? Stop patching. If the same fix fails about three times, don't send a fourth correction — describe the whole section's desired end state in one fresh message instead.
  6. Start free. Upgrade when you need more. Use the free allowance to build and explore your first version. Upgrade when you need more usage or paid features, and check any connected service costs before launch.

The prompts on this page are written to do most of this work for you — that's the point of them.

Read the full guide

Last reviewed: 2026-08-27

FAQ

We use cookies to analyze traffic and track affiliate clicks. By continuing, you agree to our Privacy Policy.