Goccia

#android #kotlin #jetpack compose #open data
Description
Overview

Goccia is a free Android app that finds the cheapest fuel station near you in Italy. It shows the official prices that every station reports to the Italian Ministry of Enterprises and Made in Italy, on a map and in a list, and tells you where it is worth stopping during a trip. For electric cars it shows charging stations, how many points are free right now and how much a charge costs. No account, no ads, no subscriptions.

Motivation

Fuel prices in Italy can differ by several cents per litre between stations a few hundred metres apart, and the official prices are public open data. They are published, however, as large daily CSV files and on a ministry website that is hard to use from a phone. Goccia turns that data into a fast and simple app: open it and see at a glance which station is worth the stop.

Key Features
  • Map and list — Every station with its brand and price: green when it is convenient, blue when it is average or above, white when the price is old. Search near you, around a saved place or anywhere on the map, and sort by price, distance or real convenience, which also counts the fuel needed to get there.
  • Real-time prices — The prices in force right now, read from the Ministry’s public service, with the time of each station’s last update. Stations that have not reported prices for over a month are hidden.
  • Trips — Calculates the route and suggests where and how much to refuel (or recharge) based on the car and the starting level, comparing motorway service areas with stations a few minutes off the motorway.
  • Highway mode — Follows the trip with a persistent notification, updates distance, range and recommended stop, warns 10 km before it and asks whether you refuelled when you stop at a station.
  • Favourites and price alerts — Notifications when a favourite station lowers its price or when the area drops below your threshold.
  • Your car — A refuelling log that estimates the tank level, consumption and how much you saved compared to the area average.
  • Electric cars — Charging points from the National Single Platform (PUN) with plugs, power, free points in real time and the operator’s price, plus your home tariff to compare the cost of each charge.
  • Widgets — The cheapest station nearby and the range of your car, right on the home screen.
Privacy by Design

Goccia has no account, no analytics and no advertising. Cars, favourites, alerts and refuels stay on the phone, and the app works offline with the areas it has already downloaded. The details are in the Privacy Policy below.

Data Sources

Fuel prices and stations: Ministry of Enterprises and Made in Italy – Osservaprezzi carburanti, IODL 2.0 licence. Charging points and their status: GSE – Piattaforma Unica Nazionale (CC BY 4.0); when the platform does not respond, © OpenStreetMap contributors (ODbL). Maps © OpenStreetMap contributors, OpenMapTiles, served by OpenFreeMap. Routes: OSRM on the FOSSGIS public service. Goccia is an independent project and is not affiliated with the Ministry or with any public body.

How I made it
Introduction

Goccia is a solo project, built with the help of Claude Code. It runs entirely on free services, with no server to maintain: GitHub Actions processes the data, GitHub Pages distributes it and OpenFreeMap serves the maps. The source code is open on GitHub.

Architecture

Every morning the Ministry publishes two CSV files: the registry of about 24,000 stations and the prices in force at 8 a.m. A pipeline turns them into small JSON files, one per province, published as a static site. The app downloads only the provinces it needs, keeps them for offline use and does every calculation on the phone: distances, area averages, real convenience, range and savings.

Data Pipeline

The pipeline is written in Node.js with no dependencies and runs twice a day on GitHub Actions. It discards malformed rows and wrong coordinates, drops prices that are far from the national median of the same fuel (typos), computes the averages and keeps the history of the averages for 400 days and of each station for 35 days and 12 months. On its first run it rebuilds the last month from a public archive of the CSV files. Every day it also downloads the charging points from the PUN and splits them into half-degree tiles, falling back to OpenStreetMap or to the previous day’s tiles when the platform does not respond.

Android App

The app is written in Kotlin with Jetpack Compose and Material 3. Maps are drawn with MapLibre on OpenFreeMap vector tiles, data is downloaded with OkHttp and kotlinx.serialization, price alerts run in the background with WorkManager, the home-screen widgets are built with Glance and highway mode uses a location foreground service with a persistent notification.

Real-time Data

The morning files contain the prices of the day before at 8 a.m., so when it is online the app also reads the prices in force right now from the Ministry’s public Osservaprezzi API. For electric cars it asks the PUN which points are free: like the platform’s website, it obtains temporary guest credentials from Amazon Cognito and signs each request with AWS Signature Version 4.

Trips & Routing

Routes come from OSRM on the public FOSSGIS server. Along the route the app looks for motorway service areas on your side of the carriageway and for stations a few minutes away from the exits, then suggests where it is cheapest to stop, taking into account the car’s consumption, the fuel left and the detour.

Testing

The pipeline and the app have unit tests. A GitHub Actions workflow also installs the app on an Android emulator, goes through the main screens, including a simulated highway trip, and saves screenshots and logs, so every change can be checked on a real device image.

Terms & Conditions
Acceptance of Terms

By downloading, installing, or using Goccia (“the App”), you agree to be bound by these Terms and Conditions (“Terms”). If you do not agree to these Terms, please do not use the App. The App is published by Gabriele Orlando (“the Developer”).

Description of the App

Goccia is a free Android app that shows fuel prices and charging points in Italy, based on public data. The App contains no advertising and requires no account. It offers optional one-time donations that do not unlock any feature.

Accuracy of Information

Prices, station details and the status of charging points come from public sources (the Ministry of Enterprises and Made in Italy, GSE and OpenStreetMap) and are shown as they are provided. They may be incomplete, out of date or wrong: the price displayed at the station is always the one that applies. Routes, distances, consumption, range, costs and savings are estimates.

No Affiliation

Goccia is an independent project. It is not affiliated with, endorsed by, or connected to the Ministry of Enterprises and Made in Italy, GSE, or any other public body, fuel brand or charging operator.

Safe Use While Driving

Do not interact with the App while driving. Highway mode is designed to be followed through its notifications; always respect the road rules and keep your attention on the road.

Donations

In the Google Play version, donations are consumable in-app purchases processed by Google Play and subject to Google’s terms of service and refund policies. They are voluntary and do not unlock any feature. The Developer does not handle payment information directly.

Open Source

The source code of the App is released under the MIT License and is available on GitHub. Prices, charging points and maps remain subject to their own licences (IODL 2.0, CC BY 4.0 and ODbL).

Disclaimer of Warranties

The App is provided “as is” and “as available” without warranties of any kind, either express or implied. The Developer does not guarantee that the App or the data it shows will be accurate, error-free, uninterrupted, or compatible with all devices. Use of the App is at your own risk.

Limitation of Liability

To the maximum extent permitted by applicable law, the Developer shall not be liable for any indirect, incidental, special, consequential, or punitive damages arising out of or related to your use of the App, including but not limited to costs resulting from prices or routes shown by the App, loss of data, or device damage.

Changes to These Terms

The Developer reserves the right to update or modify these Terms at any time. Changes will be reflected by an updated “Last updated” date at the bottom of this section. Continued use of the App after changes are posted constitutes acceptance of the revised Terms.

Governing Law

These Terms shall be governed by and construed in accordance with the laws of Italy, without regard to its conflict of law provisions.

Contact Information

If you have any questions or concerns about these Terms, please contact the Developer at:

Gabriele Orlando

info@orlandogabriele.com

Last updated: October 8, 2026

Privacy Policy
1. Introduction

This Privacy Policy describes how Goccia (“the App”), published by Gabriele Orlando (“the Developer”), handles information. The App has no account, no advertising and no analytics: it is designed to know as little as possible about you.

By downloading and using the App, you acknowledge that you have read and understood this Privacy Policy. An Italian version is available in the “Informativa privacy” section below.

2. Data Controller

Gabriele Orlando — Email: info@orlandogabriele.com

For any questions or requests regarding this Privacy Policy, please contact the Developer at the email address above.

3. Data Stored on Your Device
  • The cars you set up, your favourite stations, your price alerts and the refuels you record.
  • Your location, used only while the App is open to show nearby stations and calculate distances. You can choose a municipality instead of sharing your location.
  • During highway mode, which you start yourself from a trip, the location is followed also when the App is in the background, always with a visible notification, to know where you are along the route. It stops on arrival or when you tap “Termina” (End), and positions are neither saved nor sent.

This data is not sent to the Developer or to third parties. If you use Android backup, the system may save it to your Google account, as it does for other apps. The location is provided by Android’s location services (Google Play services), according to your device settings and Google’s privacy policy.

4. Services the App Connects To

The Developer runs no servers and receives no data from the App. To work, the App downloads data from the following services, each of which receives your device’s IP address, as with any website, and handles it under its own privacy policy:

  • Goccia data — The prices of your area, from the Goccia data site hosted on GitHub Pages (0thinker0.github.io/goccia).
  • Maps — OpenFreeMap, which receives the area of the map you are viewing.
  • Routes — Only when you calculate a trip: the FOSSGIS public routing service (routing.openstreetmap.de), which receives the coordinates of the start and of the destination.
  • Real-time prices — The Osservaprezzi public service of the Ministry of Enterprises and Made in Italy (carburanti.mise.gov.it), which receives the centre of the area you are viewing with the search radius and, when you open a station, its code. No data about you.
  • Charging points — When you open a charging station: the Piattaforma Unica Nazionale of GSE, which receives the codes of that station’s points. To access it as a guest, like the platform’s own website, the phone requests temporary credentials from Amazon Cognito (AWS), tied to a random and anonymous identifier stored only on the phone.
5. Price Alerts

Price alerts are checked by the phone itself, about every three hours, by downloading the prices from the Goccia data site and the current prices from Osservaprezzi, which receives the centre of the place chosen for the alert and the codes of the favourite stations with a price drop alert. Your location is not followed in the background for alerts.

6. Donations

If you decide to make a donation, the payment takes place on the website of the payment service, or on Google Play if the App was installed from there. The App neither sees nor stores your payment details.

7. No Analytics, Advertising or Tracking

The App contains no analytics, advertising, tracking or profiling tools and does not use the advertising ID.

8. Children's Privacy

The App is intended for drivers and is not directed at children. Since the Developer does not collect personal data, no data from children is stored or processed by the Developer.

9. Data Retention & Deletion

The data described in Section 3 stays on your device until you delete it in the App, clear the App’s data or uninstall the App. The Developer holds no data about you.

10. Your Rights Under GDPR

If you are located in the European Economic Area (EEA), you have the following rights under the GDPR: right of access, right to rectification, right to erasure, right to restriction, right to data portability, and right to object. You also have the right to lodge a complaint with a supervisory authority (in Italy, the Garante per la protezione dei dati personali).

Since the Developer does not collect personal data, these rights mainly concern the third-party services described in Section 4. For any question, contact the Developer at info@orlandogabriele.com.

11. Device Permissions
  • Location (approximate and precise) — To show nearby stations, calculate distances and follow highway mode. It is optional: you can choose a municipality.
  • Foreground service with location — Only during highway mode, with a notification that is always visible.
  • Notifications — For price alerts and highway mode.
  • Internet access — To download prices, maps, routes and the status of charging points.

The App does not request access to your camera, microphone, contacts, photos or files.

12. Changes to This Privacy Policy

The Developer reserves the right to update this Privacy Policy at any time. Changes will be reflected by an updated “Last updated” date at the bottom of this section. Continued use of the App after changes are posted constitutes acceptance of the revised Privacy Policy.

13. Contact

If you have any questions about this Privacy Policy or wish to exercise any of your data rights, please contact:

Gabriele Orlando

info@orlandogabriele.com

Last updated: October 8, 2026

Informativa privacy
1. Introduzione

Questa informativa descrive come Goccia (“l’app”), pubblicata da Gabriele Orlando (“lo sviluppatore”), tratta le informazioni. Goccia è gratuita, senza pubblicità, senza account e senza strumenti di analisi: è pensata per sapere il meno possibile di te.

2. Titolare del trattamento

Gabriele Orlando — Email: info@orlandogabriele.com

Per domande o richieste su questa informativa scrivi all’indirizzo qui sopra.

3. Cosa resta sul tuo telefono
  • Le auto che configuri, i distributori preferiti, gli avvisi di prezzo e i rifornimenti che registri.
  • La tua posizione, usata solo mentre l’app è aperta per mostrarti i distributori vicini e calcolare le distanze. Puoi scegliere un comune invece di condividere la posizione.
  • Durante la modalità autostrada, che avvii tu da un viaggio, la posizione viene seguita anche con l’app in secondo piano, sempre con una notifica visibile, per sapere a che punto del percorso sei. Si ferma all’arrivo o quando tocchi “Termina”, e le posizioni non vengono salvate né inviate.

Questi dati non vengono inviati allo sviluppatore né a terzi. Se usi il backup di Android, il sistema può salvarli nel tuo account Google, come per le altre app. La posizione è fornita dai servizi di localizzazione di Android (Google Play services), secondo le impostazioni del telefono e l’informativa di Google.

4. I servizi a cui si collega l’app

Lo sviluppatore non ha server e non riceve dati dall’app. Per funzionare, l’app scarica dati dai servizi elencati qui sotto: ognuno riceve l’indirizzo IP del telefono, come per qualsiasi sito, e lo tratta secondo la propria informativa.

  • Dati di Goccia — I prezzi della tua zona, dal sito dei dati di Goccia ospitato da GitHub Pages (0thinker0.github.io/goccia).
  • Mappe — Il servizio gratuito OpenFreeMap, che riceve l’area della mappa che stai guardando.
  • Percorsi — Solo quando calcoli un viaggio: il servizio pubblico di FOSSGIS (routing.openstreetmap.de), che riceve le coordinate di partenza e di arrivo.
  • Prezzi in tempo reale — Il servizio pubblico Osservaprezzi del Ministero delle Imprese e del Made in Italy (carburanti.mise.gov.it), che riceve il centro della zona che stai guardando con il raggio della ricerca e, quando apri un distributore, il suo codice. Nessun dato su di te.
  • Colonnine di ricarica — Quando apri una colonnina: la Piattaforma Unica Nazionale del GSE, che riceve i codici dei punti di quella colonnina. Per entrare come ospite, come fa il sito della piattaforma, il telefono chiede ad Amazon Cognito (AWS) credenziali temporanee legate a un identificativo casuale e anonimo, salvato solo sul telefono.
5. Avvisi di prezzo

Gli avvisi di prezzo vengono controllati dal telefono stesso, circa ogni tre ore, scaricando i prezzi dal sito dei dati di Goccia e quelli in vigore da Osservaprezzi, che riceve il centro del luogo scelto per l’avviso e i codici dei distributori preferiti con l’avviso di calo. Per gli avvisi la posizione non viene seguita in background.

6. Donazioni

Se decidi di fare una donazione, il pagamento avviene sul sito del servizio di pagamento, o su Google Play se l’app è installata da lì: l’app non vede né conserva i tuoi dati di pagamento.

7. Niente analisi, pubblicità o tracciamento

L’app non contiene strumenti di analisi, pubblicità, tracciamento o profilazione e non usa l’ID pubblicità.

8. Minori

L’app è pensata per chi guida e non è rivolta ai minori. Dato che lo sviluppatore non raccoglie dati personali, non conserva né tratta dati di minori.

9. Conservazione e cancellazione

I dati descritti al punto 3 restano sul telefono finché non li cancelli dall’app, cancelli i dati dell’app o la disinstalli. Lo sviluppatore non conserva dati su di te.

10. I tuoi diritti (GDPR)

Hai diritto di accesso, rettifica, cancellazione, limitazione, portabilità e opposizione, e puoi presentare reclamo al Garante per la protezione dei dati personali. Dato che lo sviluppatore non raccoglie dati personali, questi diritti riguardano soprattutto i servizi del punto 4. Per qualsiasi domanda scrivi a info@orlandogabriele.com.

11. Autorizzazioni
  • Posizione (approssimativa e precisa) — Per i distributori vicini, le distanze e la modalità autostrada. È facoltativa: puoi scegliere un comune.
  • Servizio in primo piano con la posizione — Solo durante la modalità autostrada, con una notifica sempre visibile.
  • Notifiche — Per gli avvisi di prezzo e la modalità autostrada.
  • Internet — Per scaricare prezzi, mappe, percorsi e lo stato delle colonnine.

L’app non chiede l’accesso a fotocamera, microfono, contatti, foto o file.

12. Fonti dei dati

Prezzi e anagrafica dei distributori: Ministero delle Imprese e del Made in Italy – Osservaprezzi carburanti, licenza IODL 2.0. Colonnine di ricarica, stato dei punti e prezzi dichiarati dai gestori: GSE – Piattaforma Unica Nazionale dei punti di ricarica (CC BY 4.0); se la piattaforma non risponde, © OpenStreetMap contributors, licenza ODbL. Mappe © OpenStreetMap contributors, OpenMapTiles, OpenFreeMap. Percorsi: OSRM su dati OpenStreetMap, servizio FOSSGIS. Le tariffe di ricarica mostrate sono quelle che inserisci tu; altrimenti il prezzo dichiarato dal gestore e, dove manca, stime pubbliche (media nazionale dell’energia per le famiglie, prezzi medi delle colonnine rilevati dall’Osservatorio Adiconsum).

13. Modifiche e contatti

Lo sviluppatore può aggiornare questa informativa: le modifiche sono indicate dalla data qui sotto. Per domande o per esercitare i tuoi diritti:

Gabriele Orlando

info@orlandogabriele.com

Ultimo aggiornamento: 8 ottobre 2026

Goccia: il pieno più conveniente, vicino a te
Prices of every station on the map
Trip with the recommended stop
Charging point with free points in real time