Dashboard 2.0: la mia piattaforma self-hosted per monitorare le performance retail

Progetto personale · Python · Flask · Open Source

Dashboard 2.0: da progetto interno a piattaforma self-hosted per le performance retail

Dashboard 2.0 è l’evoluzione completa del progetto che avevo presentato nella prima versione della mia Dashboard Performance. L’obiettivo è rimasto lo stesso: trasformare dati operativi come fatturato, ticket e Service/Ticket in informazioni leggibili e realmente utili. L’architettura, invece, è cambiata profondamente.

Python
Flask
SQLite / SQLAlchemy
Plotly
Multi-Branch
Self-Hosted
MIT License

Nel marzo 2025 avevo pubblicato la prima versione della Dashboard: un’applicazione web sviluppata per sostituire fogli Excel e rendere più semplice l’analisi delle performance di uno shop. In quell’articolo avevo già anticipato una futura Dashboard 2.0.

La nuova versione non è un semplice restyling. Ho rivisto il progetto pensando meno a una singola installazione e più a una piattaforma configurabile: più filiali, identità aziendale personalizzabile, utenti e ruoli, impostazioni indipendenti, audit delle operazioni, backup e un setup iniziale guidato.

Una precisazione sulla roadmap originale.

Nella prima versione avevo previsto anche l’eliminazione completa dell’inserimento manuale tramite integrazione automatica dei dati. Nella release pubblica della 2.0 ho preferito consolidare prima l’architettura, la gestione multi-filiale, la sicurezza, la configurazione e il reporting. L’inserimento manuale delle metriche rimane quindi disponibile e l’automazione dei dati rappresenta un possibile sviluppo successivo.

Cos’è Dashboard 2.0?

Dashboard 2.0 è una web application self-hosted sviluppata con Python e Flask per raccogliere, organizzare e analizzare KPI operativi relativi a uno o più punti vendita.

Il sistema utilizza tre metriche principali: fatturato generato, numero di ticket e rapporto Service/Ticket. I dati possono essere visualizzati su base settimanale, mensile e annuale, oltre che confrontati attraverso grafici e viste dedicate.

Essendo self-hosted, l’applicazione può essere installata su una macchina locale, un server Linux, una VM o su hardware compatibile come un Raspberry Pi, mantenendo il controllo dell’ambiente e dei dati.


Dashboard 2.0: vista principale settimanale della dashboard retail
Dashboard 2.0 – vista principale settimanale dell’applicazione.

Le principali funzioni della nuova versione

01

Dashboard settimanale

Visualizzazione giornaliera delle metriche con riepilogo della settimana, selezione della settimana e navigazione tra periodi.

02

Vista mensile

Aggregazione dei dati del mese con totali, medie e struttura pensata per una lettura rapida delle performance.

03

Analisi annuale

Totali mensili e riepilogo annuale di fatturato, ticket e Service/Ticket, con selezione dell’anno.

04

Grafici interattivi

Plotly viene utilizzato per trasformare le metriche in grafici dinamici e facilitare l’identificazione dei trend.

05

Confronto periodi

Mesi e anni possono essere messi a confronto per evidenziare variazioni e differenze tra periodi.

06

Report PDF

Le principali viste possono essere trasformate in report PDF attraverso WeasyPrint e grafici esportati tramite Kaleido.

07

Multi-filiale

Una singola installazione può gestire più punti vendita, mantenendo separate le metriche associate a ogni filiale.

08

Utenti e ruoli

L’applicazione distingue utenti normali e amministratori e protegge le operazioni amministrative.

09

Backup e Audit Log

Backup locali esportabili, ripristino controllato e tracciamento delle principali operazioni amministrative.

Da singolo shop a piattaforma multi-filiale

Una delle modifiche architetturali più importanti riguarda la gestione delle filiali. Nella 2.0 ogni record delle metriche è collegato alla propria filiale e l’amministratore può passare da un punto vendita all’altro tramite il selettore della filiale attiva.

Ogni filiale dispone inoltre di configurazioni proprie, come lingua, tema grafico, visualizzazione della domenica, nome mostrato e logo. A livello di organizzazione è possibile definire anche il nome dell’azienda e la valuta utilizzata.

Questo rende il progetto white-label: non è legato nel codice a una specifica azienda e può essere configurato durante il primo avvio.

Dai dati giornalieri all’analisi delle performance

Il principio alla base della Dashboard è semplice: un dato operativo è utile solo quando può essere letto nel suo contesto. Per questo la 2.0 mette a disposizione diversi livelli di analisi.

Vista Obiettivo Metriche
Settimanale Controllo operativo quotidiano Fatturato, Ticket, Service/Ticket
Mensile Analisi aggregata del mese Totali e medie
Trend mensile Visualizzare l’andamento giornaliero Grafici Plotly
Confronto mensile Confrontare più periodi Fatturato, Ticket, Service/Ticket
Annuale Visione strategica dei 12 mesi Totali mensili e annuali
Confronto annuale Confrontare due anni Grafici e riepilogo KPI

Amministrazione, ruoli e tracciabilità

La sezione amministrativa è uno degli aspetti che differenziano maggiormente Dashboard 2.0 dal prototipo iniziale.

Gli amministratori possono creare e modificare utenti, assegnare ruoli, configurare le filiali, modificare le impostazioni dell’organizzazione e gestire il database. L’account proprietario creato durante il setup è protetto da alcune operazioni critiche.

Le password non vengono memorizzate in chiaro: l’applicazione utilizza le funzioni di hashing messe a disposizione da Werkzeug.

Audit Log

Le principali operazioni amministrative vengono registrate in un Audit Log. È quindi possibile ricostruire chi ha effettuato una determinata modifica e quale tipo di operazione è stata eseguita. Il log può inoltre essere filtrato ed esportato.

Backup e ripristino

Il database e i file caricati possono essere esportati all’interno di un archivio ZIP. Durante un ripristino viene richiesta nuovamente la password dell’amministratore e il sistema crea anche un backup di sicurezza prima di sostituire il database esistente.

Privacy by design del repository pubblico

Il repository GitHub contiene esclusivamente il codice dell’applicazione. Database locali, backup, file di configurazione con segreti, loghi caricati e dati operativi non fanno parte del repository pubblico.

Architettura tecnica

Anche dal punto di vista del codice la 2.0 è stata organizzata in modo più modulare. L’applicazione separa modelli, servizi, autenticazione, setup iniziale, dashboard e amministrazione utilizzando una struttura Flask basata su Blueprint.

PythonBackend
FlaskWeb framework
SQLAlchemyORM / Database
SQLiteDatabase predefinito
Flask-LoginAutenticazione
Flask-BabelInternazionalizzazione
PlotlyGrafici
WeasyPrintReport PDF

Modello dati

Entità Responsabilità
Organization Nome dell’organizzazione e valuta
Branch Filiali, codice, nome visualizzato e logo
Settings Lingua, tema e preferenze della filiale
MetricEntry Metriche giornaliere associate alla filiale
User Account, password hash, ruolo e stato
AuditLog Tracciamento delle operazioni amministrative

Interfaccia multilingua

L’applicazione utilizza Flask-Babel e include attualmente le interfacce inglese, tedesca e francese. La lingua viene configurata a livello di filiale insieme al tema chiaro o scuro.

Installazione e utilizzo self-hosted

Il progetto richiede Python 3.11 o superiore. Per una prova locale è sufficiente creare un ambiente virtuale, installare le dipendenze e avviare l’applicazione.

git clone https://github.com/ITALIANJOB97/Dashboard-2.0.git
cd Dashboard-2.0

python3 -m venv .venv
source .venv/bin/activate

python -m pip install --upgrade pip
python -m pip install -r requirements.txt

python run.py

Al primo avvio viene mostrato un setup guidato dove vengono richiesti nome dell’azienda, valuta, credenziali dell’amministratore e le filiali da configurare.


Dashboard 2.0: procedura guidata di configurazione iniziale
Il setup iniziale per configurare azienda, amministratore e filiali.

Il repository contiene inoltre un file requirements-raspberry.txt con indicazioni specifiche per un’installazione su Raspberry Pi OS.

Nota per l’utilizzo in produzione.

Il server di sviluppo integrato in Flask è adatto allo sviluppo locale. Per pubblicare l’applicazione in rete è opportuno utilizzare un server WSGI adatto alla produzione, una SECRET_KEY privata e stabile e una connessione HTTPS.

Cosa è cambiato rispetto alla Dashboard originale?

Area Prima versione Dashboard 2.0
Struttura Progetto focalizzato su uno shop Architettura multi-filiale
Configurazione Più legata all’installazione Setup iniziale guidato
Branding Limitato Nome azienda, valuta e logo filiale
Lingue Interfaccia più statica EN / DE / FR tramite Flask-Babel
Design Singola impostazione grafica Tema Dark e Light
Amministrazione Funzioni essenziali Utenti, filiali, impostazioni, database e audit
Backup Non centrale Esportazione e ripristino integrati
Distribuzione Progetto personale interno Repository pubblico e licenza MIT

Il prossimo passo

Dashboard 2.0 è una base molto più solida rispetto alla prima versione, ma non considero il progetto concluso. L’architettura attuale permette di continuare a evolvere l’applicazione senza dover ripartire da zero.

Completato nella 2.0Multi-filiale, setup guidato, dashboard, confronti, PDF, ruoli, temi, lingue, backup e Audit Log.

Per me questo progetto rappresenta soprattutto il passaggio da un’applicazione sviluppata per risolvere un problema specifico a un software progettato con una struttura più generale, configurabile e riutilizzabile.

Dashboard 2.0 è disponibile su GitHub

Ho pubblicato il codice sorgente del progetto su GitHub. Il repository include l’applicazione, le dipendenze, le istruzioni di installazione e la licenza MIT.

Gli screenshot presenti in questa pagina utilizzano dati dimostrativi e non rappresentano dati aziendali reali.