Il problema
TopSec esiste per aggregare, sincronizzare e visualizzare dati in tempo reale senza appoggiarsi a infrastrutture giganti o stack troppo pesanti per il prodotto. Il brief era semplice a dirsi e duro a consegnarsi: tenere i dati vivi, veloci e coerenti mentre più servizi si parlano contemporaneamente.
La decisione più dura
Tracciare una linea netta tra ciò che vive nel backend .NET 8 e ciò che si risolve da Next.js. Un caso sottile ha reso la linea ovvia: le rotte /api più il middleware next-intl producevano redirect 307 verso /es/api/*. Tecnicamente validi, in pratica rotti. Endpoint in tempo reale e di stat fallivano in silenzio sotto certi locale.
La patch che nessuno ti chiede di scrivere è quella che giustifica la tariffa dell'ingegnere: invece di sistemare le regole di redirect una per una, ho riscritto il matcher del middleware per escludere /api per intero. Cambio visivo piccolo, architettonico enorme.
Ottimizzare troppo presto è male. Ignorare la performance dal primo giorno è peggio.
Principio di lavoro
L'altra decisione è stata tenere PostgreSQL come unica fonte di verità. Per questo prodotto, coerenza e capacità di scrivere query complesse valevano più di qualsiasi guadagno di velocità che potessi spremere da un NoSQL. Noioso va bene quando noioso è corretto.
Cosa ho rotto
La produzione è caduta una volta perché ho dato per scontato che un'immagine Docker fosse davvero stata ricostruita. Il codice «nuovo» continuava a comportarsi come quello vecchio. Il vero colpevole: npm ci falliva in silenzio perché mancava package-lock, lasciando la build inconsistente. Ho passato ore a fare debug della logica applicativa per quello che era un problema di pipeline.
Lezione
Diffida di ogni deploy finché non hai verificato, con i tuoi occhi, quale artefatto sta davvero girando. SHA dell'immagine, hash del container, log del commit di build al boot. Il minuto più economico che tu abbia mai speso.
Risultato
- Architettura multi-servizio stabile su VPS: backend, frontend, Redis, PostgreSQL, nginx, tutto coordinato.
- Grande calo di errori di routing e tempo reale dopo la riscrittura del middleware.
- Tempi di risposta migliorati con cache mirata e separazione pulita delle responsabilità.
- Architettura pronta a crescere nuovi moduli senza riscrivere il nucleo.
- Superficie pubblica: mkir.es. Walkthrough tecnici più approfonditi disponibili su richiesta.