AI booking assistant · Prime Coworking
Aria
An AI booking assistant that owns none of the booking logic.
- Role
- Product engineering at Prime Coworking
- Context
- Built on the company’s e-Booking system, a multi-tenant SaaS booking & scheduling product
- Focus
- AI · Web
Internal product at Prime Coworking — source is not public.
- 15
- tool-calling functions
- 40
- message bounded history
- 4×
- retry with backoff
- 1
- public endpoint
Overview
A conversational booking layer on top of Prime Coworking’s e-Booking product. Customers chat in any language — “need an appointment tomorrow after 5” — and Aria resolves the service and staff, offers real open slots, and books, reschedules or cancels. Aria owns no availability or booking logic: the booking engine stays the single source of truth and Aria is a pure orchestration layer, so the assistant and the product’s own booking widget can never drift apart.
What it does
- Multilingual chat that resolves service, staff and real open slots
- Books, reschedules and cancels through the product’s own domain services
- Every booking change gated behind an emailed OTP, with a name-and-phone-match fallback
- React 19 iframe chat widget — focus-trap accessibility, abort-on-unmount, server-owned state
- MongoDB conversation memory with orphan-turn protection
Engineering decisions
The model orchestrates; it never owns the truth
Each of the 15 tools wraps the exact domain service the e-Booking widget already calls, so there is no second copy of the availability logic for the AI to disagree with.
A public endpoint still needs teeth
The booking API is unauthenticated by design, so mutations are OTP-gated, rate-limited per IP, locked after repeated bad attempts and written to an audit log — and the prompt’s integrity block means a customer can’t talk their way past any of it.
Provider-neutral LLM layer
Gemini 2.5 Flash today, swappable tomorrow — the tool loop never imports a vendor SDK directly.
Stack
- Backend
- NestJSTypeScriptMongoDB
- AI
- Gemini 2.5 FlashTool callingProvider-neutral layer
- Client
- React 19Iframe widget