ClivoCRM
An AI CRM that asks before it acts
A multi-tenant sales CRM for small and mid-size teams. The web app is live; the Expo mobile app on the same Supabase backend is built and in pre-launch. I'm the primary engineer on the web app and backend, and the sole developer of the mobile app.
- 76edge functions
- ~80Postgres tables
- 85AI tools
- 23mobile screens
Mobile app: pre-launch
The problem
Small sales teams were running their pipeline on spreadsheets, WhatsApp and scattered email threads. The CRMs on the market were either too expensive or too complex for a team that size, and none of them offered an AI assistant the team could trust with its customer data. The bet behind ClivoCRM was a CRM where the AI does the admin work but never changes a record without the user's approval.
What I built
ClivoCRM has three parts: a web app that is live at crm.clivo.io, an Expo mobile app that is built and in pre-launch, and one Supabase backend that both of them share.
I'm the primary engineer on the web app and backend, and the sole developer of the mobile app.
The AI assistant
The assistant works through 85 tools. It never writes SQL: it calls a typed query layer, so every request for data goes through code that already knows the shape of that data.
For questions about documents, it uses retrieval over the files a team uploads, with embeddings stored in pgvector behind an HNSW index.
Reading is immediate. Changing is not: every action that would change data waits for the user's approval. The approval is hash-checked, single-use and expires after 15 minutes.
- 1
User asks
A question or a request, in plain language.
- 2
Model proposes
The assistant picks a tool and prepares the change.
- 3
User approves
Hash-checked, single-use, expires after 15 minutes.
- 4
Action runs
Only the approved action, only once.
Security between companies
Every company works in its own workspace. Isolation between workspaces, and the role scopes inside each one, are enforced by row-level security in Postgres itself rather than in application code.
A live check tests that two workspaces can't see each other's data.
The mobile app (pre-launch)
The Expo app runs on the same backend across 23 screens.
Edits made offline are queued and replayed when the phone reconnects, with conflict detection so an older edit can't silently overwrite a newer one. The deal board updates live, new versions ship as over-the-air updates, and Android native modules provide caller ID.
Integrations and billing
- Gmail inbox
- Google Calendar and Meet
- Zoom
- Slack
- Notion
- Meta Lead Ads
- AI voice calls
- Razorpay subscriptions with GST
Architecture
Both apps talk to one Supabase project. Postgres holds the data and enforces row-level security, Realtime pushes changes to the clients, and edge functions connect to outside services.