Articoli, insight e aggiornamenti dal progetto Radar Benzina.
📌
Articolo
Perché è nato questo progetto
Il bisogno di monitorare i prezzi della benzina era reale, ma le alternative erano lente, piene di pubblicità e richiedevano un login obbligatorio. Così è nato Radar Benzina: da una semplice newsletter automatica a una piattaforma web completa.
Ottimizzazione dei costi: Bilanciamento chirurgico di API e task
Come Radar Benzina gestisce migliaia di visite al mese scaricando mappe gratuite, eseguendo geocoding in cache e azzerando le chiamate API costose tramite ricerca lato client.
Gestione utenti: Double opt-in stateless senza database
La sfida di implementare iscrizioni e disiscrizioni sicure alla newsletter garantendo l'integrità dei dati tramite firme crittografiche HMAC-SHA256, senza l'uso di un database.
Architettura Serverless: Pipeline su GitHub Actions, frontend su Vercel, zero costi
Scopri come ho costruito Radar Benzina senza database o server a pagamento, sfruttando l'efficienza chirurgica di GitHub Actions come cronjob e Vercel come Edge CDN.
La sfida tecnica dietro la SEO: farsi trovare a costo zero
Dal JSON-LD alla sitemap generata dinamicamente con Python: come ho ottimizzato Radar Benzina per i motori di ricerca mantenendo architettura serverless e costi a zero.
Perfezionata l'esperienza di ricerca fullscreen su mobile e desktop: navigazione nativa con tasto indietro, animazioni ottimizzate per il risparmio energetico e massima accessibilità da tastiera.
Leggi tutto
La modalità Focus, cuore pulsante della ricerca su Radar Benzina, ha ricevuto un aggiornamento strutturale dedicato interamente all'usabilità e alle performance. L'intervento più atteso riguarda il supporto nativo alla history del browser: su dispositivi Android, la pressione del tasto fisico 'Indietro' ora chiude fluidamente la ricerca in sovrimpressione, riportando l'utente al punto esatto in cui aveva interrotto la navigazione in home page.
Sotto il cofano, l'interazione con l'overlay è stata ottimizzata per dispositivi meno performanti aggregando gli eventi di trascinamento, e sono state introdotte rigorose trap per il focus da tastiera (a11y) per impedire l'accesso accidentale a elementi invisibili. Infine, l'engine ora rispetta appieno le preferenze di sistema per la riduzione del movimento, disattivando animazioni superflue per gli utenti sensibili.
feature Tasto back del browser e di Android ora chiude la focus mode senza abbandonare la pagina
feature Supporto completo a prefers-reduced-motion per disabilitare transizioni superflue
fix Accessibilità: focus trap rinforzato per ignorare elementi resi invisibili dal CSS
fix Performance: layout thrash azzerato durante il trascinamento del pannello (coalescing via rAF)
fix Robustezza: l'invalidazione della mappa ora ascolta il completamento reale della transizione
Patch
v6.19.0 — SEO Brand Dominance e Ottimizzazione Open Graph
Aggiunto lo schema Organization, la favicon SVG e compresso l'asset Open Graph per migliorare la presenza del brand nei risultati di ricerca Google.
Leggi tutto
Per garantire che 'Radar Benzina' appaia come un'entità riconosciuta da Google con il proprio logo accanto ai risultati di ricerca, è stata effettuata una completa revisione degli asset SEO.
È stato introdotto un nuovo logo vettoriale SVG perfettamente scalabile per la favicon e lo schema Organization JSON-LD è stato integrato nell'HTML per dichiarare il brand ai motori di ricerca. Infine, l'immagine di anteprima Open Graph è stata ottimizzata e ridotta drasticamente per velocizzare la condivisione sui social.
feature Implementato lo schema Organization per il riconoscimento del brand in SERP
feature Aggiunto asset logo SVG scalabile e referenziato nel manifest
fix Compressione drastica dell'immagine Open Graph (da 451KB a 109KB)
Patch
v6.18.0 — Audit di Robustezza: 13 Fix Preventivi
Il sito funzionava, ma un'analisi statica approfondita ha portato alla luce fragilità latenti distribuite su tutta la codebase — dal parser dati MIMIT al frontend, fino al loop di invio email. Nessun crash visibile, ma condizioni specifiche potevano innescarli. Li ho risolti preventivamente.
Leggi tutto
Un audit sistematico del codice — senza aspettare i problemi — ha identificato 11 bug e 5 miglioramenti da applicare preventivamente. La categoria più interessante riguardava la resilienza silenziosa: punti in cui il sistema continuava a funzionare in condizioni normali, ma avrebbe potuto produrre dati inconsistenti o perdere informazioni in scenari di errore reali. Ad esempio, il parser CSV MIMIT inizializzava silenziosamente la variabile dell'header alla riga 0 se il campo idimpianto non veniva trovato: anziché fermarsi con un messaggio chiaro, avrebbe elaborato righe sbagliate propagando dati corrotti a valle. Il file storico delle medie poteva accumulare date duplicate in caso di run interrotti e ripresi. E due percorsi di errore nell'invio email loggavano ancora l'indirizzo del destinatario in chiaro, vanificando parzialmente un fix di privacy precedente.
Sul frontend, i listener agli eventi sui widget del run hash e delle schede carburante venivano re-aggiunti ad ogni render senza guardie di idempotenza — irrilevante oggi, ma un bug garantito appena si fosse introdotto il refresh automatico. Il caricamento del file dati principale ora ritenta automaticamente due volte con backoff progressivo prima di mostrare l'errore, migliorando la tolleranza ai momenti di latenza del CDN Vercel. Il cambiamento più rilevante riguarda però la policy di atomicità email-sito: se più del 50% degli invii fallisce in una singola esecuzione, la pipeline si interrompe prima di aggiornare il sito — garantendo che chi non ha ricevuto l'email non trovi dati più recenti online. Sotto quella soglia, un fallimento parziale viene tracciato nell'audit trail ma non blocca l'aggiornamento.
fix Parser CSV MIMIT: errore immediato e diagnostico chiaro se il formato header non viene riconosciuto
fix Policy email-sito: fallimento parziale oltre il 50% interrompe la pipeline per garantire coerenza tra email ricevuta e dati visualizzati
feature Frontend: 2 retry automatici con backoff sul caricamento dati prima di mostrare l'errore
fix Privacy completata: nessun indirizzo email esposto nei log nemmeno in caso di errore SMTP
Patch
v6.17.0 — Rilevamento Anomalie su Tutta la Sicilia
Il check sui prezzi anomali confrontava la storia solo per le stazioni nei comuni monitorati. Un errore di battitura su un qualsiasi altro impianto siciliano passava invisibile. Ora il controllo copre ogni stazione dell'isola.
Leggi tutto
Il check di consistenza temporale — confrontare il prezzo di oggi con la mediana storica della stessa stazione — è il filtro più efficace contro gli errori di data-entry al MIMIT che sfuggono ai controlli di range e agli outlier IQR. Fino a questa versione, però, lo storico veniva aggiornato solo per le stazioni nei comuni della newsletter e per le prime tre più economiche dell'isola: le altre non avevano storia, e senza storia nessun confronto era possibile.
Il modulo di storicizzazione è stato esteso a coprire ogni stazione presente nel dataset siciliano post-filtro. Il file storico_stazioni.json cresce di conseguenza, ma il check di anomalia opera ora sull'intera regione. Ogni deviazione superiore al 15% viene in più registrata in un log dedicato, utile per identificare nel tempo gli impianti con comportamento cronicamente anomalo.
fix Storicizzazione prezzi estesa a tutte le stazioni siciliane, non solo ai comuni monitorati
feature Nuovo log quarantena_temporale.jsonl per audit degli impianti con anomalie di prezzo ricorrenti
fix Hash di run esteso con medie nazionali e conteggio stazioni per una verifica di coerenza più completa
fix Controllo drift aggiunto sui timestamp MIMIT per rilevare date future o sfasamenti di fuso orario
Patch
v6.13.0 — Ottimizzazione SEO tecnica e Cross-Linking
Dopo aver completato il prodotto, il problema era renderlo 'scopribile'. Rilascio di tutta l'infrastruttura di indicizzazione automatizzata e ottimizzazione della navigazione interna.
Leggi tutto
Per permettere a Google di comprendere la mole di dati elaborata quotidianamente, sono stati implementati i dati strutturati (JSON-LD) direttamente nei template Jinja2, senza plugin o appesantimenti.
È stata inoltre sviluppata una funzione in Python che genera dinamicamente la sitemap.xml ad ogni build, azzerando i costi di crawling esterni.
feature Sitemap auto-generata in Python durante la build
fix Accessibilità migliorata sul grafico storico (fallback canvas)
feature Riorganizzazione totale dei link interni per SEO
Patch
v6.12.0 — Sistema di Intelligent Cross-Linking
Un restyling profondo dell'architettura di navigazione per abbattere le barriere tra le diverse anime del sito, rendendolo esplorabile come una vera e propria app.
Leggi tutto
Fino ad ora, le sezioni Ricerca, Classifica e Blog vivevano in compartimenti stagni. È stato implementato un sistema di ancore intelligenti gestito in JavaScript che traccia l'intento dell'utente.
Se arrivi al sito tramite un link diretto a una FAQ o a un grafico, il layout si anima, espande le sezioni necessarie ed evidenzia visivamente l'elemento cercato con transizioni fluide.
feature Navigazione 'pill' dinamica per interconnettere Homepage e FAQ
feature Deep-linking JavaScript per il caricamento contestuale dei widget
fix Risolto il problema dell'overflow orizzontale su device mobile
Patch
v6.10.0 — Motore Statistico e Anomalie
I gestori a volte sbagliano a digitare i prezzi al MIMIT (es. 0,18€ invece di 1,80€). È stata implementata una pipeline a 14 step per intercettare gli errori senza nascondere i dati.
Leggi tutto
Invece della classica 'media aritmetica' che veniva sballata dal minimo errore di data-entry, ora il motore calcola la Mediana Robusta e l'Intervallo Interquartile (IQR).
I dati fuori scala non vengono cancellati, ma marcati visivamente con il badge 'INCERTO' a fini di trasparenza, permettendo all'utente di fare le proprie valutazioni.
feature Aggiunta della sezione 'Come Calcoliamo i Prezzi' con timeline interattiva
feature Algoritmo IQR per l'identificazione degli outlier
fix Risolto crash delle tabelle in presenza di dati MIMIT incompleti
Patch
v6.8.0 — Gestione Iscrizioni e Sicurezza Anti-Bot
Riscritto da zero il sistema di acquisizione iscritti alla newsletter per proteggermi dagli attacchi automatizzati e garantire la massima privacy (stateless double opt-in).
Leggi tutto
Gestire le email degli utenti comporta enormi responsabilità. Piuttosto che utilizzare un database esposto per memorizzare le iscrizioni in attesa di conferma, ho implementato un sistema di Double Opt-in firmato crittograficamente con HMAC.
Questa infrastruttura blocca lo spam alla radice, integrando rate-limiting e verifiche CAPTCHA senza intaccare l'esperienza d'uso legittima e senza gravare sui costi server.
feature Implementazione crittografia HMAC per conferme via email
feature Nuovo livello di rate-limiting e difesa anti-spam
fix Eliminato il rischio di data-leak grazie all'architettura senza database
Patch
v6.5.0 — Ricerca Spaziale e GPS
Spulciare elenchi statici era diventato un collo di bottiglia. Ho riscritto la logica client-side per gestire migliaia di coordinate in tempo reale su mappa.
Leggi tutto
Il 'Radar Locale' ora utilizza le API di geolocalizzazione del browser per calcolare le distanze con la formula dell'Haversine, senza alcuna chiamata server-side.
L'intero database di stazioni siciliane viene caricato in un payload compresso, rendendo la ricerca istantanea.
feature Attivazione GPS e rilevamento prossimità
feature Motore di ricerca testuale per Comune e Bandiera
fix Ottimizzazione rendering DOM per liste lunghe
Patch
v6.3.0 — Motore Grafico Trend 90 Giorni
Per comprendere davvero le variazioni del mercato serviva un impatto visivo netto. Rilascio della dashboard 'Andamento' con storicizzazione e confronto dati.
Leggi tutto
È stato ingegnerizzato un sistema basato su Canvas e Chart.js capace di plottare istantaneamente 90 giorni di mediane, paragonando in real-time l'andamento del prezzo siciliano con la media nazionale italiana.
L'interfaccia include crosshair mobili e un tool-tip dinamico che permette all'utente di esaminare i differenziali di costo per ogni singolo giorno del trimestre passato.
feature Rendering grafico ad alte prestazioni (Canvas)
feature Aggregazione storica a 14, 30, 60 e 90 giorni
fix Calibrato il responsive design dei grafici per dispositivi molto piccoli
Patch
v6.0.0 — Lancio della piattaforma web
Radar Benzina non è più solo una newsletter. L'intera infrastruttura è stata migrata per servire i dati MIMIT su una vera e propria web-app serverless.
Leggi tutto
Dopo mesi di invii email, il progetto fa il salto di qualità. La nuova architettura è costruita al 100% su GitHub Actions per l'estrazione dati e Vercel per l'hosting statico.
Zero database, zero costi server, velocità massima garantita dalla pre-generazione HTML (SSG) tramite Jinja2.
feature Rilascio dashboard principale e classifica stazioni
feature Automazione build Python + Jinja2 (sotto i 10 secondi)
feature Integrazione API MIMIT
🔍
Nessun articolo in questa categoria.
📰
Notizie in arrivo
Aggiornamenti dal mondo del carburante in Sicilia. Torna presto.