
Ragboost
Plataforma SaaS Multi-Tenant de Chatbots IA
Visão Geral
Contexto
O mercado de chatbots IA está em crescimento, mas soluções enterprise são caras para PMEs. Empresas enfrentam custos elevados por mensagem e armazenamento, complexidade técnica para integrar RAG, widgets genéricos que não representam a marca, falta de colaboração em equipe, e dados isolados que não são aproveitados. A oportunidade: criar uma alternativa acessível com recursos avançados para empresas de todos os tamanhos.
Solução
Desenvolvimento de uma plataforma SaaS completa que democratiza o acesso a chatbots IA com preços acessíveis, simplifica a criação de assistentes sem código, escala com arquitetura multi-tenant robusta, e monetiza com planos flexíveis via Stripe. A plataforma permite que empresas criem assistentes virtuais contextualizados com base em seus próprios documentos usando tecnologia RAG (Retrieval-Augmented Generation), com sistema de colaboração em equipe com RBAC completo e suporte a 4 idiomas.
Meu Papel
Como fundador e desenvolvedor full stack, projetei e implementei toda a arquitetura do sistema. No backend, desenvolvi Clean Architecture com Either Monad, Use Case Pattern, e Domain Events. No frontend, implementei TanStack Query com Optimistic Updates, sistema de autenticação cross-subdomain, e roteamento file-based com TanStack Router. Também fiz todo o design UI/UX e as integrações com Stripe, serviço RAG open source, e sistema de emails.
Stack Técnica
Frontend
Backend
Projetos
Backend API
API REST Multi-Tenant com Clean Architecture
API REST robusta com arquitetura limpa, 10 módulos de domínio, sistema de permissões granular (RBAC) com 50+ permissões, integração com Stripe para billing, e Domain Events para comunicação entre módulos.
Features
Clean Architecture
Separação em camadas: routes → controllers → use-cases → repositories → entities
Either Monad
Tratamento funcional de erros com Either<Error, Success> em todos os use cases
Multi-Tenancy
Isolamento total de dados por tenant via subdomain com middleware de contexto
RBAC Granular
50+ permissões em 4 níveis de roles (owner, admin, curator, user)
Domain Events
Comunicação assíncrona entre módulos para desacoplamento
Webhook Service
Handlers para eventos Stripe (checkout, subscription, invoice) com verificação de assinatura
Factory Pattern
Injeção de dependências manual sem container, fácil de testar e debugar
Zod + OpenAPI
Validação de schemas com geração automática de documentação Swagger
JWT Duplo
Access token (15min) + refresh token (7d) em cookie httpOnly
Rate Limiting
Proteção de endpoints com limites por IP e usuário
Integração RAG
Conexão com serviço open source para processamento de documentos e busca semântica
Sistema de Convites
Envio de convites por email com tracking, expiração e roles atribuíveis
Subscription com Addons
Sistema flexível de planos Stripe com addons modulares (extra seats, storage, API calls)
Billing Completo
Checkout sessions, customer portal, invoices, proration, trial periods, cancellation
Design Patterns
Estratégia de Testes
Unit Tests
Use cases completos60+ arquivos testando use cases e domain logic com 18+ In-Memory Repositories e 7 In-Memory Providers (hash, token, email, ragflow, stripe, etc.)
Ferramentas: Node.js Test Runner, In-Memory Repositories/Providers
E2E Tests
Todas as rotas40+ arquivos testando controllers com Prisma Test Environment (banco isolado), seed automático de planos, helpers para dados únicos (generateUniqueEmail, generateUniqueSlug)
Ferramentas: Node.js Test Runner, Prisma Test Environment, Supertest
Decisões Técnicas
Fastify vs Express vs NestJS
2x mais rápido que Express, schema validation nativo, plugin system modular
Either Monad vs throw/catch
Erros type-safe, fluxo explícito, controller sabe exatamente que erros esperar
Factory Pattern vs DI Container
Zero magic, tree-shakeable, TypeScript puro sem decorators, fácil de testar
PostgreSQL + Prisma vs MongoDB
ACID compliance, relações complexas, type-safety, migrations, RLS nativo
Desafios & Soluções
Isolamento Multi-Tenant
Middleware injeta contexto do tenant em todas as queries via header X-Tenant-Subdomain
50+ Permissões Granulares
Matriz de roles → permissions, CheckPermissionUseCase reutilizado em todos os use cases
Webhook Stripe com Raw Body
Middleware customizado para preservar raw body antes do bodyParser do Fastify
Testes E2E Isolados
Prisma test environment com banco isolado, helpers para gerar dados únicos
Frontend Dashboard
SPA React 19 com Multi-Tenant via Subdomain
Dashboard administrativo SPA com React 19 e TanStack Router. Sistema de autenticação cross-subdomain via cookies, cache sofisticado com TanStack Query, internacionalização em 4 idiomas, e 31 componentes shadcn/ui.
Features
Multi-Tenant via Subdomain
Detecção automática de tenant via hostname (tenant1.ragboost.app)
Auth Cross-Subdomain
Cookies compartilhados entre subdomains via Domain=.ragboost.app
TanStack Query Cache
staleTime, gcTime, refetchOnMount/WindowFocus configurados por query
Optimistic Updates
onMutate → snapshot → rollback com feedback instantâneo
File-Based Routing
TanStack Router com type-safety completo e beforeLoad para guards
Axios Interceptors
Refresh token automático, retry com exponential backoff, error handling i18n
RBAC no Frontend
useCurrentUserRole() com canManageTeam, canEditChatbots, etc.
Formulários Validados
React Hook Form + Zod com schemas compartilhados frontend/backend
Design System
31 componentes shadcn/ui + Radix UI com Tailwind CSS 4
i18n Completo
4 idiomas (PT, EN, FR, ES) com namespaces lazy-loaded
Dashboard Analytics
Gráficos com Recharts para métricas de uso
Team Management
Convites, roles, remoção de membros com optimistic updates
Subscription Management
Visualização de plano atual, addons, usage, upgrade/downgrade com Stripe Customer Portal
Addon Selector
Interface para adicionar/remover addons (seats, storage, API calls) com preview de preço
Design Patterns
Decisões Técnicas
React 19 SPA vs Next.js
Dashboard não precisa de SSR, Vite HMR instantâneo, builds 10x mais rápidos
TanStack Query vs Redux
Cache automático, mutations com optimistic updates, menos boilerplate
TanStack Router vs React Router
Type-safety completo, file-based routing, beforeLoad para guards
Cookie Auth vs localStorage
Compartilhamento cross-subdomain impossível com localStorage
Desafios & Soluções
Auth Cross-Subdomain
Cookie com Domain=.localhost (dev) / .ragboost.app (prod) compartilhado entre tenants
Refresh Token Transparente
Interceptor detecta 401, chama /refresh-token, retenta request original
State Management Complexo
TanStack Query para server state, useCurrentTenant() para contexto, zero Redux
Subdomain Detection Multi-Ambiente
Suporte a lvh.me (dev), localhost, e multisaas.app (prod) com mesma lógica