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