Work · 2026
Omnichannel CRM with AI agents
A multi-tenant sales CRM that brings every messaging channel into one inbox, with AI agents and customer journeys that run themselves.

The problem
Sales teams talk to customers on WhatsApp, email, Telegram and Instagram at once, and most CRMs treat those conversations as an afterthought. This one is built around them: every channel in one shared inbox, follow-ups that run on their own, and AI that answers from what the business knows. Each customer company gets its own workspace.
What I built
I’m one of eight engineers on the product. These are the main pieces I designed and built.
A database schema per customer. I moved the CRM from tables shared by every customer to a separate PostgreSQL schema for each one, created automatically at sign-up. That meant migrating the existing data and a schema-aware service layer that every feature now builds on.
AI agents. A workspace builds an agent from three parts: the agent, the tools it may use, and the knowledge bases it may search. Agents run on LangGraph and AWS Bedrock, every run has a hard budget on model calls, and only internal tools may run without a person watching.
A WhatsApp service in Go. The old integration ran a headless browser for every connected number. The new service speaks WhatsApp’s protocol directly and runs across several machines: each session is owned by one machine through a lease it keeps renewing, so when a machine goes down, another picks its sessions up.
Customer journeys. Automated follow-ups built as a graph of steps: send a message, wait, assign to a teammate, hand over to an AI agent. Workers claim each step with a lease, so no step runs twice, and loops are caught before a journey starts.
I also built the AI onboarding assistant, which sets up a new workspace through a chat; the Outlook, Telegram and Instagram channels; and the original role-based access control.
Outcome
- Every customer’s data is kept apart by the database, not by each query.
- WhatsApp numbers no longer need a browser each, and the service survives a machine going down.
- The backend test suite went from 348 failures to 3.