Skip to content

User en Privacy Profiles Sync

Florian DITTGEN edited this page Jun 1, 2026 · 3 revisions

Privacy, Profiles & Sync

Privacy by default

Privacy Dashboard — your data belongs to you: see, export or delete everything the app stores

Sparkilo is privacy-first. Concrete meaning:

  • No Google Play Services. No Firebase. No Google Analytics.
  • No third-party tracking SDKs. Check pubspec.yaml in the source — zero analytics dependencies.
  • No account required. The app works fully without sign-up.
  • No data collection. Nothing leaves your phone unless you explicitly enable sync or tap "Report issue".
  • GDPR consent on first launch. A dedicated screen explains every permission before the app proceeds.
  • Open source. MIT license. Verify the privacy claim yourself.

What data is on your phone

Everything the app uses is stored locally in encrypted Hive databases:

Box Contents Encrypted?
settings App configuration, country, language, units Yes (AES)
profiles Your search profiles Yes
favorites Saved stations + their data Yes
cache Cached API responses, itineraries Yes
priceHistory 30-day local price records Yes
alerts Your price alert rules Yes
obd2Baselines Per-vehicle consumption baselines No (non-PII)
obd2TripHistory OBD2 + GPS trip logs No (non-PII)

API keys (Germany, OpenChargeMap, Supabase) are stored in the Android Keystore (hardware-backed) on Android or the iOS Keychain, not in Hive.

Permissions explained

Permission Why Can I refuse?
Location (while in use) Nearby search, route start, trajet recording Yes — use postal code instead
Bluetooth Scan + Connect OBD2 adapter pairing Yes — OBD2 is optional
Notifications Price alerts Yes — alerts won't fire
Camera OCR pump display scan Yes — type manually
Internet API calls for prices Required

The app never requests background location.

Profiles

A profile is a bundle of preferences: country, default fuel type, radius, landing screen, units, preferred amenities, vehicle, approach radius. Use profiles if you switch contexts often:

  • "Home" — Germany, E10, 10 km radius, favorites as landing
  • "Work commute" — France, Diesel, 25 km radius, cheapest as landing
  • "Holiday" — Spain, E10, map landing, Apple Pay filter on

Switch profiles from Settings → Profiles or via the profile chip in the top-right.

You always have at least one profile — the app creates a default one on first launch.

Profiles also carry the approach overlay preferences (radius in km + nearest vs cheapest-in-radius). See Consumption & OBD2 → Approach overlay.

Privacy Dashboard

Settings → Privacy Dashboard is the one place where you see everything the app holds about you, and where the diagnostics surfaces live.

Save error log

The error-log button is labelled Save (it used to say "Copy"). When tapped, the app writes the recent error traces — sanitised, no PII, no GPS, no API keys — to a single file in your public Downloads folder via the system share / save sheet. From there you can attach it to a GitHub issue when reporting a bug.

A clipboard fallback is used on platforms where the save fails, so the action never silently does nothing.

Test approach overlay

A button labelled Test approach overlay pushes a synthetic in-radius state for 30 seconds. If a trajet is being recorded (or you start one), the PiP tile flips to the price layout for that test station, lets you verify it renders, and clears automatically.

Use this to confirm the approach overlay works on your device — no need to actually drive past a real station to test it.

Error-log export to Downloads

Beyond the Save button, all data exports (full backup JSON, price-history CSV, trip GPX) now write to the public Downloads folder so any file manager can pick them up. The on-screen snackbar confirms the save and shows the filename.

TankSync (optional cloud sync)

TankSync is an optional Supabase backend that mirrors selected data between your devices. It is opt-in. Disabled = nothing leaves your phone. The entire UI is translated across all 23 supported locales.

Two ways to use it

  1. Community instance — a shared Supabase project maintained by the community. Anonymous auth. Simple setup.
  2. Self-hosted — deploy your own Supabase instance (the SQL schema + Edge Functions are in the repo). You keep full ownership of the data and there's no third-party at all.

Setup

Settings → TankSync → Enable. Then:

  • Community: scan the QR code from the wiki or paste the URL + anon key manually.
  • Self-hosted: paste your project URL + anon key.

Anon key is stored in the Android Keystore.

What syncs

  • Favorites (stations)
  • Price alerts
  • Ignored stations
  • Ratings (with per-rating privacy flag: local / private-synced / shared publicly)
  • Trajets — OBD2 + GPS trips. Trajet sync is opt-in even after TankSync is enabled — flip the toggle in Settings → TankSync → Sync trajets if you want them mirrored. Off by default; if you turn it on later, only future trips sync until you also tap Backfill.

Conflict resolution

Local always wins. If you change a favorite on two phones simultaneously, the last write to each phone is canonical for that phone. Sync adds/changes but never silently deletes — only your explicit delete action triggers a server delete.

Data export & reset

Settings → Data:

  • Export all data → single JSON saved to Downloads
  • Export price history → CSV saved to Downloads
  • Reset app → wipes every local box and clears secure storage. Irreversible.

Rights under GDPR

Since no personal data leaves the app by default, the GDPR right-to-erasure is satisfied by uninstalling or by Reset app. If you use TankSync, go to Settings → TankSync → Delete account to wipe your server-side data before uninstalling. There's also a Forget all synced trajets action that scrubs only the trajet rows while leaving the rest intact.

See PRIVACY.md for the full privacy policy.


See also: Getting Started (GDPR consent on first launch) · Consumption & OBD2 (approach overlay) Next: Troubleshooting & FAQ →

Clone this wiki locally