Case Study · Live product
Matcha: AI Booking Platform for Appointments & Classes
Customers book by messaging the business on WhatsApp or from a hosted booking page. An AI assistant answers, finds a time and books once they confirm. Everything lands on one calendar.
Founder product, live in early-access beta. Built for fitness studios, salons, clinics and any operator whose customers already use WhatsApp. WhatsApp comes first, then Instagram, Messenger and Viber.
Discuss a similar projectCase study by Aggelos Konstantilieris
Matcha: AI Booking Platform
Matcha is a booking system for appointments and classes, live in early-access beta at my.bookmatcha.app. An AI assistant answers customer messages on WhatsApp and books once they confirm, a hosted booking page takes direct bookings, and one calendar keeps the team in sync, in Greek and English. As co-founder I designed the architecture, lead development and help decide what we build next.
At a glance
By the numbers
- turns with deterministic shortcuts
- ~40%
- regex-first bilingual routing
- lines of code
- ~529K
- 105 Nest modules
- test cases
- ~15,900
- plus ~270 agent eval scenarios
- agent tools
- 24
- Zod-validated I/O
- ports / adapters
- 263 / 273
- hexagonal architecture
What we were solving
Context & problem
Small service businesses like fitness studios, salons and clinics juggle bookings across messaging apps, calendars and payment links. As bookings grow, messages get missed, slots get double booked, and someone spends the evening chasing confirmations.
Customers want to book the way they already talk: a WhatsApp message. No app, no waiting for the front desk. The assistant has to understand Greek and English, offer only slots that are free, and never let two people take the last place. The booking page and the team calendar must agree with it at all times.
How we approached it
Solution
Matcha gives a business two ways to take bookings and one place to see them. A customer can message the business on WhatsApp, for example "any reformer pilates thursday evening?". The assistant answers, finds a free time and asks for confirmation before it books. Or the customer opens the business's own booking page and picks a slot. Both paths land on the same calendar, and confirmations and reminders go out automatically.
The assistant is a LangGraph agent. Model, tools and providers sit behind ports so each can change on its own. Its tools cover sessions, bookings, staff, locations, memberships and credit packs. Routine requests are matched by rules first, so about 40% of turns never call a model. Answers about hours, prices and availability are checked against the database before they go out. When a request is beyond it, the assistant hands over to a person.
The multi-tenant NestJS backend books with atomic MongoDB operations, so two requests cannot take the same place. When a place opens, the waitlist promotes the next person. Stripe handles payments and credit packs, and Google Calendar stays in sync. The dashboard updates live over SSE. Each tenant's data is kept apart, and every action is logged.
Impact
Outcomes
- - Live in early-access beta at my.bookmatcha.app: six months free, no card, Greek and English out of the box.
- - 50 parallel requests for a 10-place session: exactly 10 succeed.
- - Each channel has a latency budget. Timeouts, retries and circuit breakers keep every reply inside it.
- - Every agent change must pass a ~15,900-case test suite and a ~270-scenario eval harness.
- - Confirmations and reminders run on 38 scheduled jobs and an outbox, with Redis caching and MongoDB indexes behind them.

Behind the scenes
Tech & delivery
Stack
- NestJS 11
- Next.js
- MongoDB
- Redis
- LangGraph
- LangChain
- OpenAI
- WhatsApp Cloud API
- Stripe
- Google Calendar
- TypeScript
Challenges
- Putting the LangGraph agent behind ports, so model, provider and domain code stay apart.
- Making sure two parallel requests can never take the same place, using atomic MongoDB writes.
- Running agent tools in parallel with checks before each call, timeouts and recovery from errors.
- Securing the WhatsApp webhook with signature checks, rate limits and idempotent handling.
How I worked
- Worked with my co-founders on how the assistant talks. It books only after the customer confirms and hands over to a person when needed.
- Built the tests and evals, including end-to-end chat-to-booking flows and simulated multi-turn users.
- Added production monitoring with performance metrics, tracing with personal data removed, and circuit breakers.
What's next
Roadmap
Phase 1
More channels
Instagram, Messenger and Viber after WhatsApp.
Phase 2
Suggestions
Suggest sessions from what a customer has booked before.
Phase 3
Reports
Occupancy and revenue per class, per location.
Matcha: booking that happens in chat
Customers book from WhatsApp or the business's own booking link. Matcha answers in Greek or English, finds a time and books once they confirm. The whole team works from one calendar.
Conversational booking on WhatsApp
Customers write "I want yoga tomorrow at 7pm" and the assistant books it in the chat.
Matcha
online
I want yoga tomorrow at 7pm
10:30Yoga tomorrow at 19:00 with Sarah is available. Want me to book it?
10:30Yes please
10:30AI Tool Execution
A LangGraph agent with 24 Zod-typed tools for slots, bookings, staff, credits and memberships.
Atomic Booking Operations
Atomic MongoDB writes stop two people booking the same place.
// Booked successfully
// Rejected (capacity full)
Smart Session Management
Each session tracks its places and promotes the waitlist when one opens.
Yoga
Pilates
HIIT
// Waitlist queue
Flexible Payment System
Card, cash, credit or membership, with a full refund for cancels 2 hours or more before the session.
const cancellationWindowHours = 2; // per business, service or session
More work
Related case studies
Forge
Runs LLM batch and realtime jobs across OpenAI and Anthropic. Jobs survive crashes and retries are safe.
View case studyOmni AI Integration Architecture
AI that reads maritime messages and turns them into CRM records an operator can review.
View case studyApollon CRM
A CRM for a pet boarding business: clients, pets, bookings, rooms and money in one place.
View case study