
Ragboost
Plataforma SaaS Multi-Tenant de Chatbots IA
Visión General
Contexto
El mercado de chatbots IA está creciendo, pero las soluciones empresariales son caras para las PyMEs. Las empresas enfrentan altos costos por mensaje y almacenamiento, complejidad técnica para integrar RAG, widgets genéricos que no representan la marca, falta de colaboración en equipo, y datos aislados que no se aprovechan. La oportunidad: crear una alternativa accesible con características avanzadas para empresas de todos los tamaños.
Solución
Desarrollo de una plataforma SaaS completa que democratiza el acceso a chatbots IA con precios accesibles, simplifica la creación de asistentes sin código, escala con arquitectura multi-tenant robusta, y monetiza con planes flexibles vía Stripe. La plataforma permite que empresas creen asistentes virtuales contextualizados con sus propios documentos usando tecnología RAG (Retrieval-Augmented Generation), con sistema de colaboración en equipo con RBAC completo y soporte para 4 idiomas.
Mi Rol
Como fundador y desarrollador full stack, diseñé e implementé toda la arquitectura del sistema. En el backend, desarrollé Clean Architecture con Either Monad, Use Case Pattern y Domain Events. En el frontend, implementé TanStack Query con Optimistic Updates, sistema de autenticación cross-subdomain, y enrutamiento file-based con TanStack Router. También hice todo el diseño UI/UX y las integraciones con Stripe, servicio RAG open source, y sistema de emails.
Stack Técnico
Frontend
Backend
Proyectos
Backend API
API REST Multi-Tenant con Clean Architecture
API REST robusta con arquitectura limpia, 10 módulos de dominio, sistema de permisos granular (RBAC) con 50+ permisos, integración con Stripe para billing, y Domain Events para comunicación entre módulos.
Funcionalidades
Clean Architecture
Separación en capas: routes → controllers → use-cases → repositories → entities
Either Monad
Tratamiento funcional de errores con Either<Error, Success> en todos los use cases
Multi-Tenancy
Aislamiento total de datos por tenant vía subdomain con middleware de contexto
RBAC Granular
50+ permisos en 4 niveles de roles (owner, admin, curator, user)
Domain Events
Comunicación asíncrona entre módulos para desacoplamiento
Webhook Service
Handlers para eventos Stripe (checkout, subscription, invoice) con verificación de firma
Factory Pattern
Inyección de dependencias manual sin container, fácil de testear y depurar
Zod + OpenAPI
Validación de schemas con generación automática de documentación Swagger
JWT Doble
Access token (15min) + refresh token (7d) en cookie httpOnly
Rate Limiting
Protección de endpoints con límites por IP y usuario
Integración RAG
Conexión con servicio open source para procesamiento de documentos y búsqueda semántica
Sistema de Invitaciones
Envío de invitaciones por email con tracking, expiración y roles asignables
Suscripción con Addons
Sistema flexible de planes Stripe con addons modulares (asientos extra, almacenamiento, llamadas API)
Billing Completo
Checkout sessions, portal de cliente, facturas, proration, períodos de prueba, cancelación
Design Patterns
Estrategia de Testing
Tests Unitarios
Use cases completos60+ archivos testeando use cases y domain logic con 18+ In-Memory Repositories y 7 In-Memory Providers (hash, token, email, ragflow, stripe, etc.)
Herramientas: Node.js Test Runner, In-Memory Repositories/Providers
Tests E2E
Todas las rutas40+ archivos testeando controllers con Prisma Test Environment (base aislada), seed automático de planes, helpers para datos únicos (generateUniqueEmail, generateUniqueSlug)
Herramientas: Node.js Test Runner, Prisma Test Environment, Supertest
Decisiones Técnicas
Fastify vs Express vs NestJS
2x más rápido que Express, validación de schema nativa, sistema de plugins modular
Either Monad vs throw/catch
Errores type-safe, flujo explícito, controller sabe exactamente qué errores esperar
Factory Pattern vs DI Container
Cero magia, tree-shakeable, TypeScript puro sin decorators, fácil de testear
PostgreSQL + Prisma vs MongoDB
Cumplimiento ACID, relaciones complejas, type-safety, migrations, RLS nativo
Desafíos & Soluciones
Aislamiento Multi-Tenant
Middleware inyecta contexto del tenant en todas las queries vía header X-Tenant-Subdomain
50+ Permisos Granulares
Matriz roles → permissions, CheckPermissionUseCase reutilizado en todos los use cases
Webhook Stripe con Raw Body
Middleware customizado para preservar raw body antes del bodyParser de Fastify
Tests E2E Aislados
Prisma test environment con base aislada, helpers para generar datos únicos
Frontend Dashboard
SPA React 19 con Multi-Tenant vía Subdomain
Dashboard administrativo SPA con React 19 y TanStack Router. Sistema de autenticación cross-subdomain vía cookies, cache sofisticado con TanStack Query, internacionalización en 4 idiomas, y 31 componentes shadcn/ui.
Funcionalidades
Multi-Tenant vía Subdomain
Detección automática de tenant vía hostname (tenant1.ragboost.app)
Auth Cross-Subdomain
Cookies compartidas entre subdomains vía Domain=.ragboost.app
TanStack Query Cache
staleTime, gcTime, refetchOnMount/WindowFocus configurados por query
Optimistic Updates
onMutate → snapshot → rollback con feedback instantáneo
File-Based Routing
TanStack Router con type-safety completo y beforeLoad para guards
Axios Interceptors
Refresh token automático, retry con exponential backoff, error handling i18n
RBAC en Frontend
useCurrentUserRole() con canManageTeam, canEditChatbots, etc.
Formularios Validados
React Hook Form + Zod con schemas compartidos frontend/backend
Design System
31 componentes shadcn/ui + Radix UI con Tailwind CSS 4
i18n Completo
4 idiomas (PT, EN, FR, ES) con namespaces lazy-loaded
Dashboard Analytics
Gráficos con Recharts para métricas de uso
Team Management
Invitaciones, roles, eliminación de miembros con optimistic updates
Gestión de Suscripción
Vista del plan actual, addons, uso, upgrade/downgrade con Stripe Customer Portal
Selector de Addons
Interfaz para agregar/quitar addons (asientos, almacenamiento, llamadas API) con preview de precio
Design Patterns
Decisiones Técnicas
React 19 SPA vs Next.js
Dashboard no necesita SSR, Vite HMR instantáneo, builds 10x más rápidos
TanStack Query vs Redux
Cache automático, mutations con optimistic updates, menos boilerplate
TanStack Router vs React Router
Type-safety completo, file-based routing, beforeLoad para guards
Cookie Auth vs localStorage
Compartir cross-subdomain imposible con localStorage
Desafíos & Soluciones
Auth Cross-Subdomain
Cookie con Domain=.localhost (dev) / .ragboost.app (prod) compartida entre tenants
Refresh Token Transparente
Interceptor detecta 401, llama /refresh-token, reintenta request original
State Management Complejo
TanStack Query para server state, useCurrentTenant() para contexto, cero Redux
Detección Subdomain Multi-Ambiente
Soporte para lvh.me (dev), localhost, y multisaas.app (prod) con misma lógica