Volver Volver al blog

wacrm: reconstruyendo un CRM de WhatsApp soberano para LATAM y AI-first

Estoy migrando wacrm de Node.js/Supabase a Laravel 13 + PostgreSQL: soberanía de despliegue en cualquier VPS, enfoque LATAM/Colombia, y MCP como interfaz de primera clase para agentes de IA.

·3 min read#laravel#mcp#self-hosted#latam#ai-engineering

Por qué estoy reconstruyendo wacrm

wacrm es un CRM de WhatsApp Business open source, self-hosted, construido por Arnas Donauskas en Node.js sobre Supabase. Se instala en unos 15 minutos, tiene bandeja compartida en tiempo real, pipelines y automatizaciones. No tiene nada malo — es un buen producto y su stack es una elección sensata: Vercel y Supabase resuelven despliegue, auth y realtime casi sin configuración.

Lo estoy reconstruyendo igual, en Laravel 13 + PostgreSQL, porque quiero dos cosas distintas que ese stack no me da gratis.

Soberanía de despliegue: LATAM primero, Colombia primero

Un CRM guarda las conversaciones de tus clientes. Para muchos negocios en LATAM eso vive mejor en una máquina que ellos controlan, en la jurisdicción que eligen, con un costo que no escala con el éxito del negocio.

La versión que estoy construyendo corre entera en un compose.yaml: PostgreSQL con pgvector, Redis, WebSockets propios (Reverb), colas y scheduler. Un droplet de 20 dólares, un git pull, listo. Cero servicios gestionados en la ruta crítica — nada de plan gratuito de Supabase que caduca, nada atado a Vercel. Elegís el VPS que quieras, en el país que quieras.

AI-first: MCP como núcleo, no como plugin

El mundo se está moviendo hacia “todo en un chat”. Un CRM cuyo único acceso programático es una API REST obliga a cada usuario a construirse su propio pegamento para conectar un agente. Acá el servidor MCP es parte del núcleo desde el diseño, autenticado con el mismo sistema de API keys que el resto de la plataforma, con el mismo aislamiento por cuenta (tenant).

La meta es que puedas decirle a tu agente “buscá los contactos que no responden hace dos semanas y armá una difusión” y que funcione, sin escribir integraciones.

Stack

Capa Elección
Backend Laravel 13 · PHP 8.4
Frontend Inertia v3 · React 19 · Tailwind 4 · TypeScript
Datos PostgreSQL 17 + pgvector 0.8
Realtime Reverb (WebSockets propios)
Colas y caché Redis
IA Laravel AI SDK · Laravel MCP
Entorno Laravel Sail

pgvector va incluido a propósito: el RAG va a correr en la misma Postgres que el resto del dominio, sin base vectorial aparte.

Dónde está parado esto hoy

Nada de barras de progreso infladas — esto es lo real:

Base de plataforma — completa (7/7): esquema de datos (28 migraciones, 39 modelos), auth con 2FA/passkeys, multi-tenancy fail-closed en HTTP/consola/colas, roles con protección del owner, invitaciones, API keys con scopes y rate limiting, y el servidor MCP con 18 herramientas sobre dos transportes.

MVP de producto — recién arrancando (1/7): el webhook de Meta con verificación de firma ya guarda eventos de forma durable. Lo que falta — inbox en vivo, envío saliente, contactos operativos — tiene la interfaz portada pero todavía sin backend.

La decisión de la que estoy más conforme hasta ahora es cómo el servidor MCP hereda el aislamiento por tenant sin que ninguna de las 18 herramientas tenga que reimplementarlo — eso se merece su propio post técnico, ya viene.


Repo: github.com/Andeveling/wacrm-laravel — público, con los ADRs de las decisiones de arquitectura incluidos.

Nota: este es un proyecto activo. Lo de arriba refleja el estado al 6 de agosto de 2026.


Construyo este tipo de sistemas —multi-tenancy, MCP, RAG sobre datos propios— como Full Stack / AI Engineer. Si te interesa cómo se piensan estas decisiones, o estás armando algo parecido, hablemos: LinkedIn · andeveling@gmail.com