
BrookAI
SaaS de chatbot con IA multi-tenant: bot de atención al cliente que aprende de documentos propios, se integra en cualquier web y WhatsApp, y escala a agente humano. En producción en bklnsoftware.tech.
BrookAI nació de una necesidad concreta: empresas que querían atender a sus clientes fuera del horario laboral sin contratar más personal. El bot responde usando exclusivamente los documentos del negocio (RAG con pgvector y LangChain), no inventa ni alucina — si no sabe, lo dice y deriva a un humano.
La arquitectura es multi-tenant desde el diseño: cada cliente tiene su propio espacio aislado con sus documentos, su historial y su configuración. El mismo sistema en producción sirve a múltiples empresas sin que ninguna vea los datos de las demás.
La integración en la web del cliente es un único snippet de JavaScript — nada de instalar dependencias ni modificar el backend existente. El widget se inicializa con la API key del tenant y empieza a responder al instante. La integración con WhatsApp Business API lleva el mismo bot al canal de mensajería más usado en el mercado.
El panel de administración (React + Vite) permite gestionar documentos, ver el historial de conversaciones completo, revisar qué preguntas no supo responder (señal directa de qué documentación falta), y configurar el tono y nombre del bot — todo sin tocar código.
Stack: FastAPI · Python · Claude API (Anthropic) · LangChain · pgvector · Supabase · Vanilla JS widget · React + Vite · WhatsApp Business API. Dockerizado, con CI/CD y desplegado en Hostinger VPS (bklnsoftware.tech).

Retos técnicos
- →RAG fiable: el bot debe responder solo con información real del cliente, sin alucinar ni mezclar datos de otros tenants
- →Aislamiento total entre tenants — documentos, vectores y conversaciones deben ser invisibles entre clientes
- →Widget JS embebible sin romper los estilos ni el JS de la web huésped
- →Integración con WhatsApp Business API: validación de firma Meta, gestión de sesiones por número de teléfono
Soluciones aplicadas
- Filtro por tenant_id en todas las búsquedas pgvector — cada query de RAG solo accede a los chunks del tenant correspondiente
- Row Level Security en Supabase + API keys hasheadas por tenant — imposible acceder a datos ajenos aunque se manipule la request
- Shadow DOM para el widget: estilos y scripts completamente encapsulados, cero conflictos con el host
- Endpoint de webhook con validación X-Hub-Signature-256 y sesiones de conversación indexadas por número de teléfono