inmobiliaria-analytics/docs/97-adr/ADR-001-stack-tecnologico.md
rckrdmrd f570727617 feat: Documentation and orchestration updates
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 05:35:40 -06:00

5.1 KiB

id title type status date deciders tags
ADR-001 Seleccion de Stack Tecnologico Architecture Decision Record Accepted 2026-01-04
Tech Lead
Backend Team
Frontend Team
stack
nestjs
react
postgresql

ADR-001: Seleccion de Stack Tecnologico

Status: Accepted Date: 2026-01-04 Deciders: Tech Lead, Backend Team, Frontend Team Tags: stack, nestjs, react, postgresql


Context

El proyecto Inmobiliaria Analytics requiere un stack tecnologico que soporte:

  1. Alto rendimiento en analytics: Procesamiento eficiente de grandes volumenes de datos inmobiliarios
  2. Escalabilidad horizontal: Crecimiento de usuarios y datos sin rediseno
  3. Time-to-market rapido: MVP en Q1 2026
  4. Mantenibilidad a largo plazo: Codigo limpio y documentado
  5. Ecosistema maduro: Librerias y comunidad activa

Restricciones

  • Equipo con experiencia en TypeScript/JavaScript
  • Infraestructura existente basada en Docker
  • Base de datos relacional requerida para transacciones
  • Compatibilidad con sistema NEXUS existente

Decision

Seleccionamos el siguiente stack tecnologico:

Backend: NestJS 10.x + TypeORM

Razon: Framework TypeScript-first con arquitectura modular que facilita el desarrollo de APIs escalables. TypeORM proporciona un ORM robusto con soporte para migraciones.

Frontend: React 18.x + TypeScript + Vite

Razon: Ecosistema maduro con excelente soporte para aplicaciones de datos. Vite proporciona DX rapida. TypeScript asegura type-safety end-to-end.

Base de Datos: PostgreSQL 16 + Redis 7

Razon: PostgreSQL ofrece:

  • Extensiones geograficas (PostGIS) para datos inmobiliarios
  • JSONB para datos semi-estructurados
  • Excelente rendimiento en queries analiticas
  • ACID compliance

Redis para:

  • Caching de queries frecuentes
  • Sesiones de usuario
  • Rate limiting

Autenticacion: Passport + JWT

Razon: Estrategia stateless que facilita escalabilidad horizontal. JWT permite validacion sin consulta a BD.


Alternatives Considered

Alternative 1: Python + FastAPI + SQLAlchemy

Pros:

  • Excelente para ML/Analytics
  • Librerias de data science maduras
  • FastAPI es muy rapido

Cons:

  • Equipo tiene menos experiencia
  • Dos stacks de lenguaje (Python + JS/TS para frontend)
  • Menor integracion con ecosistema existente

Decision: Rechazada - curva de aprendizaje y fragmentacion de stack

Alternative 2: Next.js Full-Stack

Pros:

  • Un solo framework
  • SSR built-in
  • Vercel deployment simple

Cons:

  • Menos flexible para APIs complejas
  • Acoplamiento frontend-backend
  • Escalabilidad de API limitada

Decision: Rechazada - requerimos separacion clara para escalabilidad independiente

Alternative 3: Go + Fiber + React

Pros:

  • Alto rendimiento
  • Compilacion a binarios
  • Excelente para microservicios

Cons:

  • Cambio significativo de paradigma
  • Menos ecosistema para web apps
  • Curva de aprendizaje alta

Decision: Rechazada - time-to-market afectado significativamente

Alternative 4: MongoDB en lugar de PostgreSQL

Pros:

  • Flexibilidad de schema
  • JSON nativo
  • Facil escalabilidad horizontal

Cons:

  • Sin transacciones ACID robustas (hasta recientemente)
  • Datos inmobiliarios son relacionales por naturaleza
  • PostGIS superior para geo-datos

Decision: Rechazada - PostgreSQL mejor para dominio inmobiliario


Consequences

Positivas

  1. Consistencia de lenguaje: TypeScript end-to-end
  2. Reutilizacion: DTOs y tipos compartidos
  3. Productividad: Equipo productivo desde dia 1
  4. Escalabilidad: Cada componente escala independientemente
  5. Comunidad: Amplio soporte y recursos

Negativas

  1. Node.js single-threaded: Puede ser limitante para CPU-intensive
    • Mitigacion: Worker threads o microservicio Python para ML
  2. ORM overhead: TypeORM puede ser lento para queries complejas
    • Mitigacion: Raw queries para analytics criticos
  3. Bundle size React: Apps grandes pueden ser pesadas
    • Mitigacion: Code splitting, lazy loading

Neutrales

  1. Requiere setup inicial de TypeORM migrations
  2. Configuracion de Swagger para documentacion API
  3. Setup de testing con Jest

Implementation Notes

Dependencias Clave

{
  "backend": {
    "@nestjs/core": "^10.3.0",
    "@nestjs/typeorm": "^10.0.1",
    "typeorm": "^0.3.19",
    "pg": "^8.11.3"
  },
  "frontend": {
    "react": "^18.x",
    "typescript": "^5.3.x",
    "vite": "^5.x"
  }
}

Configuracion Inicial

  1. Monorepo con apps separadas
  2. Docker Compose para desarrollo local
  3. GitHub Actions para CI/CD
  4. PostgreSQL con schemas por dominio

References


Status History

Date Status Notes
2026-01-04 Proposed ADR creado
2026-01-04 Accepted Aprobado por equipo tecnico

Document: ADR-001 Status: Accepted Date Created: 2026-01-04 Supersedes: N/A