--- id: "ADR-001" title: "Seleccion de Stack Tecnologico" type: "ADR" status: "Accepted" date: "2025-12-08" deciders: ["Architecture Team"] tags: ["backend", "frontend", "database", "stack"] project: "platform_marketing_content" created_date: "2025-12-08" updated_date: "2026-01-04" --- # 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