01Il Paradigma "Zero-Cost Serverless"

Quando ho iniziato a progettare Radar Benzina, avevo un vincolo fondamentale: doveva costare zero. Non volevo server da mantenere, istanze database da pagare mensilmente, o servizi cloud che potessero scalare improvvisamente generando fatture a sorpresa.

L'approccio tradizionale per un progetto del genere prevede solitamente un server VPS (es. DigitalOcean o AWS EC2) che esegue un cronjob, scarica i dati, li salva in un database relazionale (come PostgreSQL) e un backend API che serve quei dati al frontend. Questo approccio è solido, ma comporta costi fissi.

Ho quindi optato per un'architettura 100% serverless e statica, sfruttando strumenti gratuiti per sviluppatori con un'efficienza chirurgica. Nessun database, nessun backend sempre attivo.

02Il "Backend": GitHub Actions

Il cuore pulsante del progetto è un singolo file YAML: orologio.yml. Invece di usare GitHub Actions solo per la Continuous Integration (CI/CD), lo utilizzo come un vero e proprio cronjob schedulato.

Ogni mattina alle 08:30 (ora italiana), GitHub Actions avvia un runner Ubuntu. Questo runner installa Python 3.12 (una scelta specifica per migliorare l'efficienza rispetto alle versioni precedenti) ed esegue il mio script principale main.py.

Lo script si occupa di:

  • Scaricare i file aperti (Open Data) dal Ministero (MIMIT).
  • Calcolare la classifica dei prezzi e le statistiche regionali.
  • Estrarre le anomalie tramite calcolo statistico dell'IQR.
  • Inviare le email automatizzate agli iscritti della newsletter.

03Lo Storage: Git come Database

Se non c'è un database, dove vengono salvati i dati? La risposta è: direttamente nel repository Git.

Alla fine dell'esecuzione dello script mattutino, i dati puliti e aggregati vengono salvati in file JSON statici (es. public/data.json e public/sicilia_completa.json) e file CSV per lo storico. Lo stesso workflow di GitHub Actions fa un semplice git commit e git push di questi file nel branch principale.

Flusso Dati

MIMIT Data ➔ GitHub Actions (Python) ➔ JSON Files ➔ Git Push ➔ Vercel Deploy

04Il Frontend: Vercel e Static Generation

Ogni volta che GitHub Actions fa il push dei nuovi dati JSON, Vercel intercetta il commit. In automatico, Vercel ricostruisce il sito servendo direttamente i file statici sulla sua Edge Network globale.

L'interfaccia utente (HTML, CSS vanilla, e JavaScript) non fa altro che leggere questi file JSON statici. Non ci sono chiamate API verso un backend lento: il caricamento dei dati è istantaneo, sfruttando la cache dei CDN di Vercel.

Questo approccio ha due vantaggi enormi: una velocità di caricamento fulminea per gli utenti e nessuna superficie d'attacco sul backend, essendo composto solo da file statici pubblici.

05Considerazioni sulla sicurezza e scalabilità

Sebbene il progetto sia open, i secrets (come le password per l'invio delle email o le chiavi HMAC) sono custoditi in modo sicuro all'interno dei GitHub Secrets. Nessuna informazione sensibile è presente nel codice sorgente.

Questo paradigma Zero-Cost Serverless dimostra che per molti progetti di automazione dati non è necessario noleggiare macchine virtuali. Sfruttando creativamente l'integrazione tra GitHub Actions e l'hosting statico, è possibile creare pipeline robuste, scalabili e soprattutto completamente gratuite.

Questo è solo il primo pilastro tecnico di Radar Benzina. Nel prossimo articolo, approfondiremo una sfida ancora più intrigante: come gestire un sistema di utenti (double opt-in) senza possedere alcun database. Resta sintonizzato! 🚀