Inspiration

No-shows cost salons, clinics and tutors 10–20% of their revenue. The usual fix, a deposit for every booking, loses clients: nobody wants to prepay a stylist they have never met. Charging nobody loses money. We wanted a deposit that only exists when a booking is actually risky, and never costs a client who shows up.

What it does

HoldSlot is an AI front desk for appointment businesses, built on PayPal's authorize-and-capture flow.

  1. Book by chat. A Claude receptionist books the slot in plain English or Arabic, offering only times the calendar really has free. Tap-to-send choices make it quick on a phone.
  2. Score the risk. A transparent points score (first visit, past no-shows, late cancels, far-ahead or Friday-evening slots) decides whether this booking needs a deposit at all. Regulars never see one.
  3. Approve once, pay nothing. A risky client approves PayPal once (PayPal Vault), capped at the no-show fee. Nothing is charged.
  4. Hold only when it matters. 48 hours before the slot, HoldSlot places a PayPal authorization from the vaulted account. The studio sees the hold on its calendar.
  5. Settle at the slot. The client checks in: the authorization is voided. No-show after the grace period: the fee is captured. Late cancel: a partial capture under the policy, the rest released.
  6. Policy in plain English. The owner writes the cancellation policy in their own words; Claude turns it into rules the owner checks. Every money decision after that is deterministic code, never the model.

The client always sees where their money stands: a booking page with a timeline (booked, PayPal approved, held, released or charged) and a one-tap cancel that shows the exact fee first.

How we built it

  • PayPal: Vault v3 (setup token → payment token, approval capped at the fee), Orders v2 with intent: AUTHORIZE from the vaulted account, Payments v2 void, full capture and partial capture, and verified webhooks (authorization created/voided, capture completed/denied/refunded).
  • Claude (Sonnet): the receptionist runs a tool loop (list_services, find_slots, book). It can only offer slots the calendar returns and can never set a price or fee. A second Claude call reads the owner's policy into schema-validated rules.
  • Deterministic core: risk scoring, hold timing (48–72 hours before, inside PayPal's 3-day honor period so no reauthorization is needed), and a once-a-minute sweep that places holds and settles slots, guarded by a lease so it never runs twice.
  • Bryntum Scheduler for the front-desk calendar: one column per stylist, each booking coloured by what happened to its money (held, released, charged).
  • Next.js on Cloudflare Workers (OpenNext), Cloudflare D1, and a Cloudflare cron trigger for the sweep.

Challenges we ran into

  • Timing the hold. A PayPal authorization is guaranteed for 3 days; place it too early and you need a reauthorization that may fail. Holding 48 hours before keeps every hold inside the honor period.
  • Keeping the AI away from money. The model books and explains; it never decides an amount. Fees come from rules the owner approved, applied by code.
  • Demoing a week in two minutes. A demo clock lets judges jump ahead; it advances in 3-hour steps so a long jump still places each hold before it settles the slot.
  • Edge cases with real money. A client could have "cancelled" during the grace period to pay the smaller late-cancel fee instead of the no-show fee; cancelling is blocked once the slot has started.

Accomplishments that we're proud of

Every hold, release and charge in the demo is a real PayPal sandbox call. Regulars are never asked for a deposit, and an honest client is never charged. The owner can change the policy in one sentence and see exactly how HoldSlot read it before it applies.

What we learned

Authorize-and-capture is underused for services. The useful AI here is narrow: talk to the client and read the policy, then hand every money decision to code people can audit.

What's next

Onboarding real businesses as PayPal partners (multiparty), SMS reminders before the hold, more industries (clinics, tutors, fitness), and a fully Arabic client experience.

Built With

  • anthropic
  • bryntum
  • bryntum-scheduler
  • claude
  • cloudflare-d1
  • cloudflare-workers
  • next.js
  • paypal
  • paypal-orders-api
  • paypal-payments-api
  • paypal-vault
  • react
  • tailwindcss
  • typescript
Share this project:

Updates

Submission history