Joan Comadran

Claient

Multi-tenant SaaS that answers and qualifies WhatsApp leads with Claude: instant replies 24/7 in the business's own voice, delivered qualified to a dashboard.

Visit site →
Stack

Next.js + Supabase

Year

2026

Role

Founder & Engineer

Field notes

I — III

Discovery

What we found before writing a line of code — three observations that defined what this project would, and wouldn’t, become.

01

What it is

Overview

Claient is a multi-tenant SaaS that automatically answers and qualifies the leads a business gets over WhatsApp.

When a prospect messages, Claude replies in seconds, holds the conversation in the business's own voice, collects the lead's details, and hands it over qualified, all tracked in a per-tenant dashboard. Born from a real need (a services business losing leads it couldn't answer fast enough), built as a product any business can subscribe to.

02

Why it matters

Challenge

Leads go to whoever replies first; wait hours and they're gone.

Nobody answers WhatsApp out of hours or on weekends, and qualifying by hand (name, reason, availability) eats the team's time. Solving it for one client is easy; building it so any tenant can self-serve, with isolated data and near-zero cost per customer, is the real engineering problem.

03

What we built

Solution

A single full-stack Next.js + Supabase app: landing, dashboard, API and a single WhatsApp webhook that routes every message to the right tenant by phone_number_id. Claude Haiku 4.5 runs the conversation by default (BYOK optional), extracts lead data via tool use, marks it qualified, notifies the business and escalates to a human when needed. Meta Cloud API direct, no BSP, keeps cost per customer at roughly zero.

The AI engine

Conversation, qualification, and a rolling memory

The engine runs Claude as the lead qualifier: it converses following the tenant's script, extracts the lead's data with tool use (reliable JSON), and decides qualification and escalation as a pure, testable function separated from I/O. To keep per-turn cost bounded on long conversations, it doesn't resend the full history; it sends a window of the last ~16 messages plus a rolling summary of everything before, updated incrementally with hysteresis. Prompt caching re-reads the script prefix at ~0.1×, and every call logs real tokens and USD cost per account.

Multi-tenant

One webhook, isolated tenants, encrypted secrets

Multi-tenant from day one. A single webhook routes inbound messages by phone_number_id; Row Level Security on account_id keeps each customer to their own data, while the worker writes with service_role to route across tenants. Per-tenant secrets, each business's Claude key (BYOK) and WhatsApp token, live encrypted in Supabase Vault, never in plain text. The webhook is hardened with constant-time HMAC signature verification and wamid idempotency.

Product & economics

Priced from the customer, not the margin

Going direct on Meta's Cloud API instead of a BSP removes the biggest variable cost: service conversations within 24h are free, so cost per customer is roughly zero. The default Haiku key costs cents per tenant and is absorbed in the price; anyone who wants more power pays their own tokens via BYOK. Pricing is a flat 49 €/month, chosen from the customer (a time-poor micro-business), below the threshold where an owner stops to think or asks for a quote, at ~100% margin.