Skip to content
← All projects
/ Case study · WhatsApp agent · booking tools

MAVE AI Customer Service

A WhatsApp chat that books the slot for you.

An AI agent on the studio’s WhatsApp that answers availability and price questions and books a slot by calling the real booking tools, with a human handover whenever it is unsure.

5 booking tools, with human handover built in

MAVE AI Customer ServiceFrom a question to a booked slotFrom a question to a booked slot01 / 01
For developers
Web
Next.jsTypeScriptDrizzleTursoWeb Push
What I did & the proof ↓
Web
MAVE AI Customer ServiceProduct tour

A recreation of one conversation: the chat on the left, the tool calls the agent makes on the right.

MAVE AI Customer Service: From a question to a booked slot
Screen by screen

From a question to a booked slot

A customer asks about tomorrow on WhatsApp. The agent looks them up, checks availability and price, then creates the booking with a deposit link. Tool names come from the agent’s registry; the chat itself is an example.

Rebuilt from the agent’s code; the chat is an example

1 / 1
MAVE AI Customer Service · From a question to a booked slot
Real product screenshots. Everything you click stays inside this portfolio.
Feature highlights
  • Real booking tools, not free text
  • Swap the AI model, keep the tools
  • Flag-gated, with human handover
Built with

Next.js / TypeScript / Drizzle / Turso

Designed and built by Alexanders Schwartzmann · start to finish

  • Messaging gateway architecture
  • Typed tool runner & API ports
  • Provider adapters & handover
  • Execution guards & observability
See what I did and the proof ↗
Want something like MAVE AI Customer Service?

I can build one around how your business works.

Talk about a similar project
Agent
Tool-calling
Adapter
Provider-agnostic
Safety
Execution modes
Handover
Human-in-the-loop
What I did

I designed and built this project from start to finish.

Project creator

Alexanders Schwartzmann

From the product idea and design to the code behind the features below.

My implementation scope
  • Messaging gateway architecture
  • Typed tool runner & API ports
  • Provider adapters & handover
  • Execution guards & observability

How the main flow works

  1. 01

    Provider verifies & normalizes input

  2. 02

    Gateway checks execution mode

  3. 03

    Validated tool runner & business ports

  4. 04

    Formatted result or human handover

Proof of the work

What was built, how it works, and why it was built that way.

gateway.ts
const mode = AGENT_MODE();
if (mode === "off") return { ok: false, tool: call.tool, error: "agent disabled" };
01 / From the code

Execution is gated before a tool runs

The preserved agent gateway checks AGENT_MODE before dispatching a tool. Off, passive, shadow, and live modes have different execution paths.

Technical decision

Validation and simulated mutations can be separated from live execution before activating the agent.

registry.ts · selected entries
"Availability": "checkAvailability",
"Booking": "createBooking",
"Human Handover": "handoverToHuman",
"Reschedule": "rescheduleBooking",
02 / From the code

Business tools map to real implementations

The registry resolves public tool names to existing internal tools. The runner validates inputs and outputs around the API-backed execution.

Technical decision

Provider vocabulary is kept in the adapter and registry, leaving the domain tools independent of the messaging provider.

About these screens

The proof is the agent’s own code and rules, not a customer chat. No real customer was messaged and no live tool was run.

Rebuilt from the agent’s code; the chat is an example ·

Implementation reviewed · October 2026

This case study presents the preserved MAVE agent module: a messaging gateway, provider adapters, and typed business tools. The evidence documents the implementation and its execution contracts; current production activation is not established by this review.

Problem

A booking assistant needs to connect a customer request to availability, booking, or rescheduling. Generating a reply alone cannot perform those operations. The gateway separates message handling from the business APIs.

Implementation

  • Provider adapters verify and normalize incoming requests before invoking the gateway.
  • The registry resolves public tool names such as Availability and Reschedule to internal implementations.
  • The tool runner validates inputs and outputs and applies bounded retries, timeouts, and audit reporting around execution.
  • API ports connect tools to booking operations; human handover has a separate tool.

Execution design

The gateway checks AGENT_MODE before dispatch. Off disables execution; passive simulates tools; shadow separates reads from simulated mutations; live uses the production ports. These paths let validation and review happen separately from customer-facing execution.

Provider verification and parsing
  → Gateway execution mode
    → Registry and validated tool runner
      → Booking API ports or human handover
  → Formatted result

Evidence

The implementation evidence above contains selected excerpts from the actual gateway and registry. It demonstrates execution guards and business-tool mappings without using customer conversations or claiming a currently active production agent.