A shared inbox, smart conversation routing, agent permissions, campaigns, and five live reporting views — built to replace a paid third-party WhatsApp tool with something the team owns end-to-end.
The team was paying a lot every month for a third-party WhatsApp tool with hard limits I kept hitting: agent count, campaign volume, and almost no useful reporting. The reports we did get were shallow — no SLA visibility, no per-agent breakdown, no way to see the peak hours or the response-time trend.
Every workaround was another spreadsheet. Every question from management was another manual pull. We were paying for less than half of what we needed.
A complete WhatsApp support platform, owned end-to-end. Shared inbox with real-time routing to available agents, five live reporting views (operations, chat volume, agent performance, delivery, and activity), a central agent permissions matrix, and a campaign runner — all sitting on our own database with no per-seat billing and no artificial limits.
Live counts, response and handling averages, and instant filters for today / yesterday / last 7 or 30 days. Everything auto-refreshes so shift leads don't have to keep hitting reload.
Multiple agents watching the same inbox in real time. Assignment is atomic — two agents can't accidentally grab the same conversation. Every conversation is tagged with priority, log category, team, and internal notes so the next agent doesn't restart from zero.
Five live reporting views, each answering a specific management question: When are our peak hours? Who's fastest to first response? Which teams are hitting SLA? What's the resolution rate this week vs last? All exportable to CSV.
The hardest problem wasn't the WhatsApp integration or the reporting engine — it was making sure that when five agents watch the same inbox in real time, exactly one of them ends up owning each conversation. Naive implementations either double-assign (bad) or need a coordinator process (heavy).
The platform solves this with atomic upserts at the database level. Assignment is a single Postgres query with row-level locking; the losing agents' UIs get pushed the new state through Supabase Realtime within a second. No coordinator, no polling loop, no chance of duplicate work.
Permissions run through the same discipline. Every capability — read this inbox, reassign this conversation, close without resolution, run this report — is one row in a Terms & Roles matrix. Adding a new role is one insert, not a hunt through fifteen files.