platform-marketing-content/docs/97-adr/ADR-001-stack-tecnologico.md

125 lines
3.0 KiB
Markdown

# ADR-001: Selección de Stack Tecnológico
**Fecha:** 2025-12-08
**Estado:** Aceptado
---
## Contexto
Se requiere definir el stack tecnológico para construir la plataforma SaaS de generación de contenido y CRM creativo. El stack debe:
1. Soportar desarrollo rápido de MVP
2. Escalar para múltiples tenants
3. Integrarse con motores de IA (imagen y texto)
4. Ser mantenible por un equipo pequeño
5. Tener ecosistema maduro y documentación
---
## Decisión
### Backend: NestJS + TypeScript
**Framework:** NestJS v10+
**Lenguaje:** TypeScript
**ORM:** TypeORM
**Razones:**
- Arquitectura modular similar a Angular
- Soporte nativo para TypeScript
- Decoradores para validación, documentación, guards
- Ecosistema rico: Bull queues, WebSockets, GraphQL
- Fácil testing con DI
- Swagger auto-generado
### Frontend: React + Vite + TailwindCSS
**Framework:** React 18
**Bundler:** Vite
**Styling:** TailwindCSS + Shadcn/UI
**Estado:** Zustand o TanStack Query
**Razones:**
- React es el estándar de la industria
- Vite ofrece desarrollo rápido (HMR instantáneo)
- TailwindCSS permite UI consistente sin escribir CSS custom
- Shadcn/UI provee componentes accesibles y personalizables
- Zustand es simple para estado global mínimo
### Base de Datos: PostgreSQL
**Motor:** PostgreSQL 15+
**Features usados:** RLS, JSONB, Full-text search
**Razones:**
- Row-Level Security nativo para multi-tenancy
- JSONB para datos semi-estructurados (briefs, config)
- Búsqueda full-text integrada
- Maduro, confiable, excelente performance
- Soporte en todos los cloud providers
### Cache y Cola: Redis + Bull
**Cache:** Redis
**Cola:** Bull/BullMQ
**Razones:**
- Redis es estándar para cache y pub/sub
- Bull usa Redis, no requiere infraestructura adicional
- Bull tiene UI de admin (Bull Board)
- Soporte para prioridades y reintentos
### Storage: S3/MinIO
**Razones:**
- API compatible con S3
- MinIO permite desarrollo local sin costos
- Escalable a cualquier cloud con S3
---
## Consecuencias
### Positivas
- Stack cohesivo con TypeScript end-to-end
- Productividad alta con frameworks maduros
- Buena documentación y comunidad
- Fácil encontrar desarrolladores
- Sin vendor lock-in significativo
### Negativas
- TypeORM tiene limitaciones vs Prisma
- Bundle size de React puede crecer
- Curva de aprendizaje para decoradores de NestJS
- PostgreSQL requiere gestión de schemas
---
## Alternativas Consideradas
### Backend
1. **Express.js** - Muy bajo nivel, requiere mucha configuración manual
2. **Fastify** - Rápido pero menos ecosistema que NestJS
3. **Go/Gin** - Performance pero equipo no tiene experiencia
### Frontend
1. **Next.js** - Overkill para SPA, SSR no necesario inicialmente
2. **Vue 3** - Válido pero React tiene mayor ecosistema
3. **Svelte** - Ecosistema más pequeño, menos componentes UI
### Base de Datos
1. **MySQL** - Sin RLS nativo, menos features
2. **MongoDB** - No relacional, complicaría queries complejos
3. **Supabase** - Dependencia de servicio externo
---
**Documento generado por:** Requirements-Analyst
**Fecha:** 2025-12-08