Stack tecnológico
Zentto utiliza un stack moderno y homogéneo basado en TypeScript tanto en frontend como en backend. Cada tecnología fue elegida por estabilidad, rendimiento y facilidad de mantenimiento a largo plazo.
Frontend
| Tecnología | Versión | Uso |
|---|---|---|
| Next.js | 15.x | Framework principal de cada micro-app |
| React | 19.x | Librería de UI, componentes funcionales con hooks |
| TypeScript | 5.x | Tipado estático en todo el monorepo |
| Tailwind CSS | 3.x | Estilos utilitarios, dark mode |
| Material UI | 5.x | Componentes de formulario, tablas, diálogos |
| NextAuth.js | 4.x | Autenticación y sesiones |
Backend
| Tecnología | Versión | Uso |
|---|---|---|
| Node.js | 20 LTS | Runtime del servidor |
| Express | 4.x | Framework HTTP, routing, middleware |
| TypeScript | 5.x | Tipado estático en todo el código API |
| mssql | 10.x | Driver SQL Server (tedious) |
| pg | 8.x | Driver PostgreSQL (node-postgres) |
| bcrypt | 5.x | Hash de contraseñas (verificación en Node, no SQL) |
| jsonwebtoken | 9.x | Generación y verificación de JWT |
Base de datos
| Motor | Versión | Entorno |
|---|---|---|
| SQL Server | 2019+ | Desarrollo local (Windows), clientes on-premise |
| PostgreSQL | 16+ | Producción (Hetzner), nuevos despliegues cloud |
Infraestructura y DevOps
| Herramienta | Uso |
|---|---|
| Docker | Contenedores para API y frontend en producción |
| PM2 | Process manager para las 13 micro-apps dentro del contenedor Docker |
| Nginx | Reverse proxy, SSL termination, enrutamiento por subdominio |
| GitHub Actions | CI/CD: build Docker, push a ghcr.io, deploy via SSH |
| Cloudflare | DNS, CDN, protección DDoS, email routing |
| ghcr.io | Container registry (GitHub Container Registry) |
Monorepo y paquetes npm
El monorepo utiliza npm workspaces para gestionar dependencias compartidas.
Todos los paquetes internos se publican bajo el scope @zentto/*.
# Estructura de workspaces
web/modular-frontend/
├── package.json # workspace root
├── apps/
│ ├── shell/ # @zentto/shell
│ ├── contabilidad/ # @zentto/contabilidad
│ ├── pos/ # @zentto/pos
│ └── ...
└── packages/
├── shared-ui/ # @zentto/shared-ui — componentes reutilizables
├── shared-auth/ # @zentto/shared-auth — NextAuth config + hooks
└── shared-api/ # @zentto/shared-api — fetch helpers + tipos
Decisiones de arquitectura relevantes
- Sin ORM — toda interacción con BD es via stored procedures, no Prisma/TypeORM
- bcrypt en Node — la verificación de contraseñas ocurre en la API, no en SQL
- UTC-0 obligatorio — middleware convierte automáticamente request/response
- Next.js standalone — cada app se compila en modo standalone para Docker
- Tailwind + MUI — Tailwind para layout y utilidades, MUI para componentes complejos