Inspiration

In Ho Chi Minh City, booking a car wash or detailing service still means calling a shop, waiting on hold, and going back and forth on availability. We wanted to see if we could replace that entire phone call with an AI voice agent that feels just as natural — one that can actually search shops, check slots, and confirm bookings in real-time, all through a simple conversation. The idea was simple: what if you could just talk to your phone and say "book me a ceramic coating near District 1 this Saturday" and it just… works?

What it does

Washly is a real-time voice AI booking agent for car wash and detailing services. Users open a web app, tap a button, and start talking. The AI agent ("Valet") can:

  • Find nearby shops — search by district, service type, or date availability
  • Look up your profile — retrieve customer details, car info, and booking history by phone number
  • Book appointments — create bookings with full confirmation (shop, service, date, time, car, customer)
  • Reschedule or cancel — modify existing bookings by reference number
  • Answer naturally — responds conversationally, reads back details, and handles interruptions gracefully

Everything happens in real-time over WebRTC — no typing, no forms, just voice.

How we built it

We built Washly as a streaming voice pipeline using Pipecat:

  1. Browser → WebRTC — The user's microphone audio streams to our FastAPI server via SmallWebRTC transport
  2. Deepgram STT — Real-time speech-to-text transcription using the large-v3-turbo model
  3. OpenAI GPT-4o-mini (via OpenRouter) — The LLM processes conversation context and decides when to invoke tools via function calling
  4. 7 AI Toolsget_available_shops, get_user_details, create_booking, get_booking_details, cancel_booking, reschedule_booking, get_today_date — each wired to our backend
  5. ElevenLabs TTS — Synthesizes the AI response into natural-sounding speech using eleven_flash_v2_5
  6. WebRTC → Browser — Audio streams back to the user in real-time

Challenges we ran into

  • Impulsive When collect research for the project one key point we find is usually when user want to book a car wash they do it impulsively and not pre-plan, so we have to try different method to reduce the barrier to allow us to capture this.
  • Voice latency is unforgiving. In text chat, 2 seconds feels fine. In voice, it feels broken. We chose GPT-4o-mini over GPT-4o specifically for faster time-to-first-token, and tuned Silero VAD to stop_secs=0.4 for responsive turn-taking.
  • Interruption handling. Users naturally interrupt ("actually, make that 3pm instead"). Getting the pipeline to cancel in-flight TTS and re-process gracefully took real effort.
  • Double-booking prevention. With async concurrent requests, we needed slot-level conflict detection in both the mock (in-memory dict with (shop, date, time) tuple keys) and MongoDB backends.
  • Prompt engineering for voice. Prompts that read well on screen sound terrible spoken aloud. We rewrote the system prompt multiple times to be concise, conversational, and never overwhelming — max 2-3 options at a time, short sentences, natural confirmations.

Accomplishments that we're proud of

  • End-to-end voice booking in under 3 seconds per turn — from user speech to AI spoken response
  • 7 fully functional AI tools with real backend integration — not just demos, actual booking logic with conflict detection and reference tracking
  • Swappable backend architecture — Protocol-based design lets us go from zero-config mock data to production MongoDB with one env var change
  • Comprehensive test suite — async tests with proper fixture isolation, covering tool handlers, config, LLM setup, and prompt validation
  • It actually feels like calling a real receptionist — natural turn-taking, interruptions, and conversational flow

What we learned

  • Real-time voice AI is fundamentally a pipeline engineering problem. Every millisecond matters across STT → LLM → TTS, and the framework you choose (Pipecat) determines your ceiling.
  • Function calling transforms voice agents from chatbots into useful tools. Structured tool schemas ground the AI in real actions instead of hallucinated answers.
  • Voice-first prompt design is its own discipline. Short sentences. Read back details. Don't list more than 3 things. Confirm before acting. These rules make or break the experience.
  • The mock/production backend split is worth the upfront investment. Being able to iterate on voice UX without touching a database saved us hours.

What's next for Washly

  • Partner Onboarding — To find more Car wash shop/ Partner to onboard with our project
  • Multi-language support — Vietnamese and English, with automatic language detection
  • SMS confirmations — Send booking details via text after voice confirmation
  • Shop dashboard — Real-time admin panel for shop owners to manage incoming bookings
  • Mobile app — Native iOS/Android client with push notifications for booking reminders
  • Voice analytics — Track conversation quality, completion rates, and common user intents to continuously improve the AI
  • Multi-agent handoff — Escalate complex requests (complaints, custom quotes) to human operators seamlessly

Built With

Share this project:

Updates