---
id: "ADR-001-stack-tecnologico"
title: "Stack Tecnologico"
type: "Documentation"
project: "trading-platform"
version: "1.0.0"
updated_date: "2026-01-04"
---

# ADR-001: Stack Tecnologico

**Fecha:** 2025-12-05
**Estado:** ✅ Aceptado
**Deciders:** Tech Lead, CTO

---

## Contexto

Trading Platform necesita un stack tecnologico que permita:
1. Desarrollo rapido del MVP (8 semanas)
2. Escalabilidad para crecimiento futuro
3. Integracion con APIs de trading y ML
4. Experiencia de usuario fluida en web y movil
5. Mantenibilidad a largo plazo

El equipo tiene experiencia previa con proyectos similares (Gamilit, TradingAgent) usando TypeScript y Python.

---

## Decision

### Frontend
- **React 18** + **TypeScript 5** como framework principal
- **Vite** como build tool (HMR rapido, ESM nativo)
- **Tailwind CSS** para estilos (utility-first, dark mode)
- **Zustand** para state management (simple, sin boilerplate)
- **TanStack Query** para data fetching (cache, refetch, optimistic updates)
- **Lightweight Charts** para graficos de trading (TradingView quality)

### Backend API
- **Express.js 4.18** + **TypeScript** para API REST
- **Zod** para validacion de schemas
- **JWT** + **Passport.js** para autenticacion
- **PostgreSQL 15** como base de datos principal
- **Redis 7** para cache y sesiones

### ML Engine
- **Python 3.11** + **FastAPI** para API de predicciones
- **XGBoost** para modelos de ML
- **Pandas/NumPy** para procesamiento de datos

### Servicios Externos
- **Stripe** para pagos
- **Twilio** para SMS/WhatsApp
- **Nodemailer** para emails

---

## Alternativas Consideradas

### Frontend Framework

| Opcion | Pros | Contras | Decision |
|--------|------|---------|----------|
| **React** | Ecosistema maduro, equipo experimentado | Mas boilerplate que alternativas | ✅ Elegido |
| Next.js | SSR, routing integrado | Complejidad innecesaria para SPA | ❌ |
| Vue.js | Curva de aprendizaje suave | Menos experiencia del equipo | ❌ |
| Svelte | Performance, menos codigo | Ecosistema menos maduro | ❌ |

### Backend Framework

| Opcion | Pros | Contras | Decision |
|--------|------|---------|----------|
| **Express.js** | Flexible, probado, conocido | Sin estructura opinionada | ✅ Elegido |
| NestJS | Estructura, decoradores | Overhead para MVP | ❌ |
| Fastify | Mas rapido que Express | Menos plugins | ❌ |
| Hono | Ultra ligero | Muy nuevo | ❌ |

### Base de Datos

| Opcion | Pros | Contras | Decision |
|--------|------|---------|----------|
| **PostgreSQL** | ACID, JSONB, extensiones | Mas complejo que NoSQL | ✅ Elegido |
| MongoDB | Flexible schema | No ACID por defecto | ❌ |
| MySQL | Popular, simple | Menos features que Postgres | ❌ |

### State Management

| Opcion | Pros | Contras | Decision |
|--------|------|---------|----------|
| **Zustand** | Simple, TypeScript, sin boilerplate | Menos features que Redux | ✅ Elegido |
| Redux Toolkit | Feature completo, devtools | Boilerplate, complejidad | ❌ |
| Jotai | Atomico, simple | Menos popular | ❌ |
| Recoil | De Facebook | Futuro incierto | ❌ |

---

## Consecuencias

### Positivas

1. **Velocidad de desarrollo**: El equipo ya conoce el stack
2. **Type safety**: TypeScript en frontend y backend reduce errores
3. **Reutilizacion**: Codigo de Gamilit y TradingAgent reutilizable
4. **Contratacion**: Stack popular, facil encontrar desarrolladores
5. **Comunidad**: Amplia documentacion y soporte

### Negativas

1. **JavaScript fatigue**: Muchas dependencias npm a mantener
2. **Dos lenguajes**: TypeScript para API, Python para ML
3. **Express flexibility**: Requiere mas disciplina en estructura

### Riesgos

1. **Dependencias desactualizadas**: Mitigacion con Renovate/Dependabot
2. **Breaking changes en React 19**: Mantenerse en v18 hasta estabilizar

---

## Referencias

- [React 18 Release Notes](https://react.dev/blog/2022/03/29/react-v18)
- [Zustand Documentation](https://zustand-demo.pmnd.rs/)
- [TanStack Query](https://tanstack.com/query)
- [Express.js Best Practices](https://expressjs.com/en/advanced/best-practice-security.html)
- [PostgreSQL vs MySQL](https://www.postgresql.org/about/)
