JomCloud
A real-estate CRM that answers WhatsApp itself and routes leads to whoever is on duty.
I build and maintain JomCloud, a SaaS for real-estate brokerages. I designed the multi-tenant core, the WhatsApp conversation engine and the mobile app advisors carry in the field. It ships continuously.
- My role
- Multi-tenant architecture, WhatsApp bot engine and mobile app
- Sector
- Producto propio · SaaS inmobiliario
- Scope
- Bot de WhatsApp + CRM + App web + App móvil
- 4
- Apps in the product
- 6
- Modules per agency account
- 4
- External integrations
- Web + mobile
- Platforms
Stack
- React
- Vite
- Tailwind CSS
- Astro
- ReactFlow
- Socket.IO
- Node.js
- Express
- TypeScript
- Mongoose
- MongoDB
- WhatsApp Cloud API
- OpenAI
- Cloudflare R2
- Resend
Screens
Screenshots from the live system.
App móvil
App móvil para asesores
El CRM en el bolsillo del asesor, que trabaja en la calle y no frente a una computadora. Trae el resumen de la inmobiliaria con sus leads por estatus y el desempeño de cada asesor, la cartera completa con búsqueda por nombre o teléfono, la agenda de visitas del mes, el inventario de propiedades con su precio y disponibilidad, y un simulador de Infonavit que calcula la capacidad de compra del cliente ahí mismo, durante la visita.
CRM
CRM y gestión de leads
Lista y tablero de clientes con la etapa en la que va cada uno, panel de números, reportes por asesor y por anuncio, inventario por ubicación y expedientes de crédito con su lista de documentos.
Bot de WhatsApp
Bot de WhatsApp y automatización
Respuesta automática a los mensajes que llegan de anuncios, bandeja de chats donde el asesor puede tomarle el control al bot, y conversaciones que se arman distinto según el anuncio.
App web
Operación y herramientas
Agenda de citas, rol de guardias, simulador de cuánto puede comprar un cliente con su Infonavit y administración de usuarios con permisos por puesto.
The problem
A brokerage lives on the messages its ads bring in. Whoever replies first keeps the customer, and the advisors who should be replying are out showing houses, not sitting at a desk. With no system in place, inbound messages pile up with no owner, nobody knows which ad a lead came from, and follow-up disappears into personal chat threads. On top of that, every brokerage runs differently: some need credit files, others just a calendar and a pipeline.
What I built
I built a multi-tenant platform where each brokerage gets its own account and switches on only the modules it uses: leads, calendar, WhatsApp bots, credit files, duty rosters and reports. Messages coming off an ad are picked up by a bot on the WhatsApp Cloud API that asks the right qualifying questions and branches the script based on which ad the lead came from. Once the lead is ready to talk to a person, the system checks the duty roster, assigns an advisor and gives them a window; miss it and the lead is released for someone else to take. Around that sits the full CRM: a pipeline board, an appointment calendar, a borrowing-capacity simulator for Infonavit (Mexico's public housing fund), credit files with their document checklist, and reporting per advisor and per ad, all scoped by job role. Advisors carry the whole thing with them in a mobile app.
Technical decisions
- 01
Per-ad flows, edited without a deploy
Every ad needs its own script, so bot flows are assembled by dragging blocks on ReactFlow and the brokerage edits them itself. If each script tweak needed a deploy from me, the product would never scale.
- 02
On-duty routing with automatic release
I turned "whoever gets to it first" into a rule the system enforces. Leads go to the advisor on shift with a time window attached; if it lapses, the lead is released back to the pool so no customer sits waiting for a reply.
- 03
Every lead carries the ad it came from
The bot records which ad each customer arrived through, and that stays with the lead all the way into the per-ad and per-advisor reports. The brokerage stops guessing which ad spend actually brings buyers.
- 04
Multi-tenant, with modules and roles per account
One codebase serves very different operations. Each account enables only the modules it needs, and permissions resolve by job role so every user sees exactly their slice of the data.
- 05
The bot hands the thread to a human
I built the chat inbox on Socket.IO so an advisor can take over from the bot inside the same conversation, without breaking the thread or losing the context already collected.
Next project
CoperachApp
Snap the receipt. The app works out who owes whom.