# Build a Scheduling App in Lovable

- Tool: Lovable Prompts
- Last updated: June 2026

## TL;DR

Paste the starter prompt into Lovable Build mode and get a working Calendly-style scheduler: each user defines availability windows and event types, shares a public /username/30min link, and the system prevents double-booking at the database layer with a btree_gist exclusion constraint. Full chain is ~100–150 credits on Pro $25/mo. Honest warning: just buy Calendly unless you need scheduling embedded inside your own product.

## Frequently asked questions

### Why can't I just check for conflicts in React before inserting a meeting?

Client-side conflict checks fail under concurrent load. If two guests open the same slot picker, both see the slot as available, both confirm at the same millisecond, and both checks pass before either insert lands. The only reliable solution is a database-layer constraint. The starter prompt adds a btree_gist exclusion constraint on the meetings table that makes overlapping meetings per host physically impossible to insert — the database rejects the second one with error code 23P01, which the edge function catches and returns as a 409 slot_taken response.

### Does the Google Calendar sync work in Lovable preview?

No. Google's OAuth callback requires a redirect URI that exactly matches what you registered in Google Cloud Console. The Lovable preview URL (ending in .lovable.app or similar) is not a stable URI you can register and trust for production. You must deploy your project using the Publish button, copy the production URL, add it to your Google OAuth client's Authorized redirect URIs, and test the full OAuth flow on the deployed site. The Integrations placeholder in the starter gives you a place to wire this up — it intentionally does not wire OAuth in the preview.

### Can multiple team members share a single booking link?

The starter prompt builds a personal scheduler — one host, one set of availability rules, one booking link per event type. For team scheduling (round-robin assignment, pick-your-host), you need the round-robin team scheduling follow-up prompt, which adds a host_pool array to event_types and a create-meeting edge function that picks the team member with the fewest meetings this week. This adds roughly 60 credits to the chain and requires careful multi-user RLS testing.

### How do I handle Daylight Saving Time when storing availability windows?

The availability_rules table stores weekday + start_time + end_time as plain SQL time values without timezone context. This means a rule saying '9am Monday' is stored as 09:00 regardless of DST. The get-slots edge function must apply the host's IANA timezone (from profiles.timezone) when computing slot UTC times — if the host is in America/New_York and DST shifts an hour, slots near the boundary can appear or disappear by one hour. This is a documented known edge case. The recommended mitigation is to display a 'Check your availability after every DST change' reminder in the Availability page and let the host manually re-verify slots.

### What happens if a guest's timezone is different from mine?

get-slots returns timestamps in UTC. SlotPicker.tsx detects the guest's timezone from Intl.DateTimeFormat().resolvedOptions().timeZone and formats each slot using formatInTimeZone from date-fns-tz. The booking confirmation email should state the meeting time in BOTH the host's timezone and the guest's timezone — this prevents the classic 'I thought it was 2pm your time' miscommunication. The email follow-up prompt includes this dual-timezone confirmation format.

### Can I take payment for paid sessions through this scheduler?

Not in the starter prompt. To monetize paid sessions, you would add a Stripe Checkout step between slot selection and booking confirmation: the guest pays first, the payment_intent.succeeded webhook fires, and only then does the create-meeting edge function insert the meeting row. This is a significant addition — closer to the booking platform prompt kit than the scheduling app. If you just want to take a deposit to reduce no-shows, the booking platform prompt is a better starting point.

### How do I let guests reschedule from the confirmation email?

The cancellation and reschedule follow-up prompt adds a /reschedule/[meeting-id] page and a matching edge function. The confirmation email includes a reschedule link. The reschedule flow atomically cancels the old meeting (setting status='cancelled') and creates the new one in the same transaction, so the exclusion constraint prevents the new slot from being taken mid-process. If Google Calendar sync is enabled, the old Calendar event is deleted before the new one is created.

### Should I really build this instead of just using Calendly?

Honestly, just use Calendly for 95% of use cases. Calendly is $10/mo, never breaks, handles edge cases you haven't thought of yet, and the UX is battle-tested by millions of users. Build in Lovable only if: (1) you need scheduling embedded as a feature inside your own product — not a separate /calendly.com/you link; (2) you have data residency or privacy requirements; or (3) you want to own the full meeting history and integrate it with other data in your app. If your build outgrows this prompt kit and you need custom architecture, RapidDev builds production-grade Lovable apps at $13K-$25K — book a free 30-minute consultation at rapidevelopers.com.

---

Source: https://www.rapidevelopers.com/lovable-prompts/lovable-prompts-for-building-scheduling-app
© RapidDev — https://www.rapidevelopers.com/lovable-prompts/lovable-prompts-for-building-scheduling-app
