Volver a proyectos
SaaS Full Stack IA

PurplyBot

Plataforma SaaS conversacional multi-tenant con IA, handoff humano en tiempo real y arquitectura extensible por adapters.

No es solo "una app con IA" — es una plataforma operable y defendible técnicamente.

Problema

Negocios pierden leads por respuestas lentas. No hay continuidad entre canales y falta trazabilidad de conversaciones.

Solución

IA 24/7 con RAG + handoff humano inteligente. Widget embebible, dashboard operativo y soporte WhatsApp. Todo multi-tenant con control por planes.

Arquitectura

3 aplicaciones desacopladas que se comunican por REST + WebSocket.

Backend

API REST, WebSocket realtime, orquestación IA con RAG, function calling y persistencia Supabase.

Express 5 Socket.io TypeScript Gemini

Dashboard

Panel operativo para agentes con chats en tiempo real, RBAC, knowledge base y configuración de integraciones.

Next.js 16 React 19 Supabase SSR Zustand

Widget

Chat embebible en sitios de terceros vía loader.js + iframe. Streaming de respuestas y transición a humano.

Preact Vite Socket.io

Diagrama Interactivo

Navega, haz zoom y arrastra los nodos para explorar cómo se conectan los componentes del sistema.

Las flechas animadas representan flujo de datos en tiempo real
Mini Map

Flujo End-to-End

Desde que un visitante envía un mensaje hasta que recibe respuesta de la IA o un agente humano.

1

Carga del Widget

El sitio cliente carga loader.js que inserta un iframe con la configuración del tenant.

2

Conexión WebSocket

El widget se conecta al namespace /widget con sessionId y datos del visitante.

3

RAG + IA Streaming

El backend busca contexto relevante (embeddings), lo inyecta a Gemini junto con el historial y responde en streaming en tiempo real.

4

Function Calling

Si Gemini detecta que necesita una herramienta (ej. calendario), emite un function call → Factory enruta al Adapter activo → resultado se inyecta de vuelta.

5

Handoff Humano

Trigger explícito o por heurística de frustración. Se valida horario, cambia status a human, notifica dashboard con push y un agente toma el chat.

Patrones de Diseño

Decisiones arquitectónicas que hacen la plataforma extensible y mantenible.

Factory + Adapter

Agregar integraciones (Calendar, WhatsApp) sin tocar el core de IA. Contrato común para APIs heterogéneas.

Event-Driven / Pub-Sub

Realtime desacoplado con Socket.io: namespaces /widget y /dashboard, rooms por tenant y chat.

Middleware Chain

Auth, CORS, rate-limit y tenant context aplicados transversalmente antes de cada request.

Graceful Degradation

Si falla push, calendar o un subsistema externo, la conversación continúa. Reintentos con backoff en errores 429/503.

Escalabilidad y Seguridad

Decisiones de operación que permiten crecer sin reescribir.

Escalabilidad

  • Multi-tenancy por tenant_id en datos y auth contextual
  • Rate limiting: 100 req / 15 min por IP
  • Rooms por tenant y chat para fanout selectivo
  • Hard limits por plan en conversaciones

Seguridad

  • Helmet + CORS con patrones permitidos
  • Bearer token auth + RBAC por rol
  • Verificación de webhook (HMAC + timingSafeEqual)
  • Cron de autocierre de chats inactivos cada 5 min

¿Quieres verlo en acción?

El widget está corriendo en vivo en este mismo portafolio.

Probar el chat