Volver a proyectos
Ragboost

Ragboost

Plataforma SaaS Multi-Tenant de Chatbots IA

Rol: Full Stack Developer | Fundador
Período: Octubre 2024 - Presente
En Desarrollo (85%)
Cliente: Proyecto Propio

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

React
TypeScript
Vite
TanStack Router
TanStack Query
Tailwind CSS
shadcn/ui
Radix UI
React Hook Form
Zod
i18next
Recharts
Axios
Sonner
Lucide React

Backend

Fastify
TypeScript
Prisma
PostgreSQL
JWT
bcryptjs
Stripe
Nodemailer
Swagger
Zod

Proyectos

1

Backend API

API REST Multi-Tenant con Clean Architecture

~52.000
Líneas de Código
200+
Archivos
10
Módulos
17
Entities

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

01
Clean Architecture

Separación en capas: routes → controllers → use-cases → repositories → entities

02
Either Monad

Tratamiento funcional de errores con Either<Error, Success> en todos los use cases

03
Multi-Tenancy

Aislamiento total de datos por tenant vía subdomain con middleware de contexto

04
RBAC Granular

50+ permisos en 4 niveles de roles (owner, admin, curator, user)

05
Domain Events

Comunicación asíncrona entre módulos para desacoplamiento

06
Webhook Service

Handlers para eventos Stripe (checkout, subscription, invoice) con verificación de firma

07
Factory Pattern

Inyección de dependencias manual sin container, fácil de testear y depurar

08
Zod + OpenAPI

Validación de schemas con generación automática de documentación Swagger

09
JWT Doble

Access token (15min) + refresh token (7d) en cookie httpOnly

10
Rate Limiting

Protección de endpoints con límites por IP y usuario

11
Integración RAG

Conexión con servicio open source para procesamiento de documentos y búsqueda semántica

12
Sistema de Invitaciones

Envío de invitaciones por email con tracking, expiración y roles asignables

13
Suscripción con Addons

Sistema flexible de planes Stripe con addons modulares (asientos extra, almacenamiento, llamadas API)

14
Billing Completo

Checkout sessions, portal de cliente, facturas, proration, períodos de prueba, cancelación

Design Patterns

Either Monad Pattern
Use Case Pattern
Factory Pattern
Controller Pattern
Repository Pattern
Provider Pattern

Estrategia de Testing

Tests Unitarios
Use cases completos

60+ 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 rutas

40+ 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

2

Frontend Dashboard

SPA React 19 con Multi-Tenant vía Subdomain

~19.500
Líneas de Código
206
Archivos
88
Componentes
7+
Hooks
15+
Páginas

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

01
Multi-Tenant vía Subdomain

Detección automática de tenant vía hostname (tenant1.ragboost.app)

02
Auth Cross-Subdomain

Cookies compartidas entre subdomains vía Domain=.ragboost.app

03
TanStack Query Cache

staleTime, gcTime, refetchOnMount/WindowFocus configurados por query

04
Optimistic Updates

onMutate → snapshot → rollback con feedback instantáneo

05
File-Based Routing

TanStack Router con type-safety completo y beforeLoad para guards

06
Axios Interceptors

Refresh token automático, retry con exponential backoff, error handling i18n

07
RBAC en Frontend

useCurrentUserRole() con canManageTeam, canEditChatbots, etc.

08
Formularios Validados

React Hook Form + Zod con schemas compartidos frontend/backend

09
Design System

31 componentes shadcn/ui + Radix UI con Tailwind CSS 4

10
i18n Completo

4 idiomas (PT, EN, FR, ES) con namespaces lazy-loaded

11
Dashboard Analytics

Gráficos con Recharts para métricas de uso

12
Team Management

Invitaciones, roles, eliminación de miembros con optimistic updates

13
Gestión de Suscripción

Vista del plan actual, addons, uso, upgrade/downgrade con Stripe Customer Portal

14
Selector de Addons

Interfaz para agregar/quitar addons (asientos, almacenamiento, llamadas API) con preview de precio

Design Patterns

Custom Hooks Pattern
Optimistic Updates Pattern
Provider Pattern
API Queries Layer
Subdomain Detection
Interceptor Pattern

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

Galería

1
Image 1
2
Image 2
3
Image 3
4
Image 4
5
Image 5
6
Image 6
Gregory Praxedes | Full Stack Developer & UI/UX Specialist