An AI agent that takes car rental bookings over WhatsApp, an operations desk with an Android app for the staff who handle escalations, and a white-label fleet platform built out of the same work.
The problem
The client rents cars from airport and city branches. Most enquiries arrive on WhatsApp, in more than one language, at all hours. Every one needed a person to check branches, dates and car classes in the reservation system, quote a price, collect the driver's details and create the booking. Staff time went into typing, and slow replies lost bookings.
What I built
A WhatsApp booking agent that customers talk to in plain language. It finds the pickup branch, searches available cars, lists extras, quotes, creates the reservation, looks up an existing booking and cancels one. When it hits something it should not handle, it escalates to a human.
An operations dashboard in Next.js. Staff read live conversations, follow each booking's progress, audit every LLM and tool call, and work an escalation queue.
An Android app for the ops team. It wraps the dashboard and adds push alerts. A critical escalation raises a full-screen, call-style takeover that wakes the phone and shows over the lock screen, and it re-pages on an SLA cadence until someone picks it up.
A customer-facing Flutter app with OTP login and the same chat agent.
FleetDecks, the product. It generalises this work into a multi-tenant, white-label fleet desk for small rental operators: fleet calendar, bookings, handover and return checklists with photos, customer records, roles and audit logs.
How it works
The agent is a Go service behind Cloudflare. Meta's webhook is verified with HMAC-SHA256, deduplicated on message ID, and acknowledged immediately. The agent turn then runs on a goroutine under a per-customer lock, so a burst of follow-up messages is handled in order and Meta's delivery timeout never waits on the model.
Each turn is a tool-calling loop over OpenRouter with a hard iteration cap. Booking state lives in MongoDB as slots (branch, dates, car class, extras, driver details), so a conversation can pause and resume. Every prompt, tool call and result is logged for audit.
The third-party reservation system was the hard part. Its API behaved in ways the documentation did not cover, around authentication, pricing and booking lookups. I wrapped the client with retry classification and typed errors, and worked through each issue with the vendor.
The backend started in Python. I ported it to Go mid-project behind parity tests, then deleted the Python code. The FleetDecks platform is FastAPI and MongoDB with a Next.js admin, tenant-scoped access, and Cloudflare R2 for images.
Outcome
The WhatsApp agent is in production and creates live reservations in the operator's system. The ops dashboard and the Android app shipped to the operations team. FleetDecks runs at fleetdecks.com.
Need something like this built? contact@akhilsingh.in