La sfida
Una PMI produttrice nel settore arredamento aveva un problema ricorrente: ogni mese, il reparto amministrativo dedicava 15-20 ore all'estrazione di report commerciali. L'ERP aziendale (basato su SQL Server) conteneva tutti i dati, ma non aveva un modulo di reportistica decente. Il risultato? Export in Excel, pivot table manuali, invio via email. E quando il direttore commerciale chiedeva un dato aggiornato a metà mese, doveva aspettare.
La direzione voleva una cosa semplice: vedere il fatturato in tempo reale, con filtri per periodo, cliente e agente. Senza chiedere all'ufficio ogni volta.
La soluzione
Ho progettato SalesInsight come una dashboard web leggera, collegata direttamente al database dell'ERP aziendale. L'idea era chiara: non duplicare i dati, ma leggerli dove sono.
Architettura zero-trust con Tailscale
Il database SQL Server dell'azienda è on-premise, dietro un firewall. La cosa tradizionale sarebbe stata aprire una porta, configurare un reverse proxy, gestire certificati SSL... e introdurre un rischio di sicurezza significativo.
Ho scelto un approccio diverso: Tailscale VPN. Ogni nodo della rete (il server della dashboard, il server aziendale) si registra sulla rete Tailscale e comunica attraverso un tunnel crittografato punto-punto. Zero porte aperte, zero configurazione firewall, zero rischi.
Il server della dashboard gira su un VPS e si connette al SQL Server aziendale come se fosse sulla rete locale. Nessun dato transita in chiaro, nessuna porta esposta su Internet.
Backend Express/TypeScript
Il backend è un'API REST costruita con Express e TypeScript. Le query al SQL Server sono ottimizzate con viste materializzate e indici dedicati, per garantire tempi di risposta sotto il secondo anche con query complesse su anni di dati.
I risultati delle query più pesanti vengono cachati in MongoDB (su Docker), con un sistema di invalidazione intelligente che refresha solo i dati modificati dall'ultimo aggiornamento.
Frontend Vue.js 3
La dashboard è costruita con Vue.js 3 e Composition API. Le visualizzazioni principali includono:
- Andamento fatturato nel tempo (giorno, settimana, mese, trimestre, anno)
- Performance clienti: classifica, confronto anno su anno, trend di crescita o calo
- Performance agenti: venduto per agente con target e scostamento
- Confronto YoY: ogni dato è sempre affiancato dal valore dell'anno precedente
L'interfaccia è progettata per essere usata dal direttore commerciale non da un analista dati. Pochi filtri, visualizzazioni chiare, drill-down dove serve.
Deploy e infrastruttura
- Nginx come reverse proxy
- PM2 per il process management del backend Node.js
- GitHub Actions per la CI/CD automatizzata
- Docker per MongoDB e per l'ambiente di staging
Risultati
- Azzeramento tempi di estrazione report: quelle 15-20 ore mensili di lavoro manuale non esistono più
- ROI in 12 mesi: il costo dello sviluppo è stato ripagato in un anno solo dal risparmio di tempo del reparto amministrativo
- Autonomia completa: la direzione commerciale accede ai dati in autonomia, senza dipendere dall'ufficio amministrativo
- Dati sempre aggiornati: il dashboard mostra i dati in near-real-time, non più report settimanali
Lezioni apprese
SalesInsight mi ha insegnato il valore di Tailscale come soluzione per l'accesso remoto ai dati aziendali. In molte PMI, i dati critici sono su server on-premise e non possono essere migrati al cloud per motivi normativi o di costi. Tailscale risolve questo problema in modo elegante e sicuro.
Un'altra lezione importante: non servono dashboard complesse per creare valore. SalesInsight ha pochi schermi, pochi filtri, pochi grafici. Ma sono esattamente quelli che servono. La tentazione di aggiungere funzionalità è forte resistere è la scelta giusta.
Questo progetto ha anche gettato le basi per AgentHub, il CRM per la rete agenti della stessa azienda. Il valore dimostrato da SalesInsight ha convinto la direzione a investire in una soluzione più ampia.