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

3.0 KiB

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