Inspiration

Small service businesses — barbershops, salons, clinics — lose real money to no-shows. And their online booking flows are clunky forms that customers abandon halfway. I wanted to prove that a whole booking + deposit flow can happen in a single natural conversation, no forms, no calendars.

What it does

Vidal Booking AI Agent is a conversational AI that handles the entire appointment booking flow in natural language — in English or Spanish — and collects a deposit via PayPal to lock the booking in. No forms, no calendars: customers just chat, tap quick replies for services, days and time slots, and pay the deposit on PayPal's secure checkout.

How we built it

OpenAI gpt-4o-mini with function calling (5 tools: list_services, check_availability, create_booking, create_paypal_order, show_quick_replies), PayPal Orders API v2 sandbox with OAuth 2.0 client-credentials and token caching, vanilla JS chat frontend with tappable quick replies, Node.js + Express backend deployed as Vercel serverless functions.

Challenges we ran into

Stateless serverless: bookings live in memory, which doesn't persist across Vercel instances. The model sometimes skipped the quick-reply tool call, so we added deterministic safety nets that guarantee buttons always render. Making quick replies feel natural in both Spanish and English. PayPal sandbox testing: the seller can't pay themselves — a separate Personal sandbox buyer account is required.

Accomplishments that we're proud of

A fully working demo where a real PayPal sandbox order is created in-chat and the customer completes payment on PayPal's hosted checkout. Bilingual conversation, mobile-friendly quick replies, and a 48-second demo video showing the complete flow.

What we learned

An agent that acts (creates orders, checks availability) is very different from one that just chats. Function calling plus deterministic fallbacks is the combo that makes it feel magical yet reliable.

What's next for Vidal Booking AI Agent

Persistent booking database, payment capture confirmation via webhooks, email/SMS notifications for the business owner, full bilingual button labels, and a WordPress plugin version.

Built With

Share this project:

Updates

Submission history