El problema
TopSec nació para resolver agregación, sincronización y visualización de datos en tiempo real sin depender de infraestructuras gigantes ni stacks excesivamente pesados. El reto era mantener datos vivos, rápidos y consistentes mientras múltiples servicios interactuaban a la vez.
La decisión más dura
Separar claramente qué debía vivir en backend .NET y qué debía resolverse desde Next.js. Un caso sutil hizo obvia la línea: las rutas /api más el middleware de next-intl generaban redirects 307 hacia /es/api/*. Técnicamente válido, prácticamente roto. Endpoints realtime y de stats fallaban en silencio bajo ciertos locales.
El parche que nadie te pide escribir es el que justifica la tarifa del ingeniero: en lugar de seguir parcheando rutas individuales, rehice el matcher del middleware para excluir /api por completo. Cambio visual pequeño, arquitectónico enorme.
Optimizar demasiado pronto es malo. Ignorar el rendimiento desde el diseño es peor.
Principio de trabajo
La otra decisión fue mantener PostgreSQL como núcleo principal en vez de mover partes a NoSQL «porque sí». Para este tipo de sistema, consistencia y capacidad de queries complejas valían más que las décimas que pudieras arañar. Lo aburrido está bien cuando lo aburrido es correcto.
Lo que rompí
Producción se cayó una vez porque asumí que una imagen Docker realmente se había reconstruido. El código «nuevo» seguía comportándose igual que el viejo. El culpable real era npm ci fallando silenciosamente porque faltaba package-lock, dejando una build inconsistente. Perdí horas debuggeando lógica de aplicación cuando el problema era el pipeline.
Lección
Desconfía de cada deploy hasta que hayas verificado, con tus propios ojos, qué artefacto está corriendo de verdad. Saca SHA de la imagen, comprueba el hash del contenedor, loguea el commit de build al arrancar. El minuto más barato que vas a gastar nunca.
Resultado
- Arquitectura multi-servicio estable sobre VPS: backend, frontend, Redis, PostgreSQL, nginx, todo coordinado.
- Caída grande de errores de routing y realtime tras la reescritura del middleware.
- Tiempos de respuesta mejorados con caché bien colocada y separación limpia de responsabilidades.
- Arquitectura preparada para crecer nuevos módulos sin reescribir el núcleo.
- Superficie pública: mkir.es. Walkthroughs técnicos más profundos disponibles bajo petición.