# OnTheRoad — Privacy Policy

_Ultimo aggiornamento: 2026-06-01 · Versione: v0.1.5 (nessun cambio di data flow dal v0.1.0)_

OnTheRoad è progettato attorno al principio **"i tuoi dati restano sul tuo telefono"**.

---

## 🇮🇹 Italiano

### Dati raccolti da OnTheRoad

**Nessuno.** OnTheRoad non ha un backend, non richiede account, non sincronizza con cloud. Tutti i tuoi itinerari, tappe, note, foto, preferenze restano esclusivamente sul tuo dispositivo Android in storage locale (AsyncStorage + SecureStore per token sensibili).

### Servizi esterni che OnTheRoad contatta

Quando usi alcune funzionalità, l'app comunica direttamente con servizi pubblici esterni. **OnTheRoad non vede né archivia queste richieste**: vai direttamente da te al servizio.

| Servizio | Quando | Cosa viene inviato |
|---|---|---|
| **Wikipedia REST API** | Visualizzazione foto luoghi | Nome città/POI per ottenere immagine descrittiva |
| **Open-Meteo** | Widget meteo per giorno itinerario | Coordinate lat/lon + range date |
| **OSRM (project-osrm.org)** | Calcolo distanza percorso reale | Lista coordinate tappe del giorno |
| **Photon (komoot)** | Geocoding indirizzi base | Stringa indirizzo digitata |
| **Mapbox** *(opzionale, BYOK)* | Geocoding di qualità superiore | Solo se inserisci tua API key personale |
| **Pexels** *(opzionale, BYOK)* | Foto copertina viaggi | Solo se inserisci tua API key personale |
| **AI providers** *(opzionale, BYOK)* | Suggerimenti AI tappe | Claude/OpenAI/Gemini/Mistral/Ollama — porti la tua chiave |
| **GitLab releases** | Check aggiornamento APK | Solo HEAD request al feed JSON pubblico |

### Permessi Android richiesti

- `INTERNET` — chiamate ai servizi sopra
- `REQUEST_INSTALL_PACKAGES` — installa update APK in-app (sideload)
- `READ_EXTERNAL_STORAGE` (solo Android ≤12) — selezionare file da importare (GPX/Excel)
- `WRITE_EXTERNAL_STORAGE` (solo Android ≤12) — salvare backup esportato

Nessun permesso per microfono, fotocamera, posizione, contatti, rubrica.

### Crash reporting opt-in

L'app può inviare report di crash anonimi tramite **Sentry**, ma SOLO se attivi esplicitamente l'opzione in Impostazioni → Privacy → "Invia report crash anonimi". È **disattivato di default**.

Quando attivo: vengono inviati solo stack trace + tipo errore + versione app. Un filtro centralizzato (`utils/sentryFilter.ts`) scarta automaticamente:
- Email, nome dispositivo, posizione
- Valori che assomigliano a API key (sk-/pk_/AIza/bearer/Authorization)
- Stringhe più lunghe di 4096 caratteri

Codice sorgente del filtro: `utils/sentryFilter.ts` nel repository pubblico.

### Le tue chiavi API (BYOK)

Se inserisci chiavi API personali per Mapbox/Pexels/AI providers:
- Restano solo in **SecureStore** (Android Keystore-backed)
- Non sono incluse in backup `adb` (`android:allowBackup="false"`)
- Vengono usate solo per chiamate dirette dal tuo telefono al provider
- Mai inviate a noi né a terze parti

### Sicurezza tecnica

- TLS obbligatorio per tutte le chiamate (no cleartext in release)
- WebView mappa: `originWhitelist` ristretto + SRI hash su CDN resources
- APK update verificato con MD5 prima dell'installazione
- Validation Zod su input esterni (backup import, WebView messages)

### Bambini sotto i 13 anni

OnTheRoad non raccoglie dati personali — quindi è compatibile con COPPA/GDPR-K. Tuttavia l'app contiene contenuti generati da AI providers terzi (se attivato): genitori dovrebbero supervisionare l'uso dell'assistente AI per bambini.

### Modifiche

Aggiornamenti significativi a questa policy saranno notificati nel CHANGELOG.md + tag release. Versione: v0.1.5.

### Contatto

Email: `refpapps@pm.me` — segnalazioni privacy o feedback.
Issue tracker pubblico: https://gitlab.com/refpapps-apps/ontheroad/-/issues

---

## 🇬🇧 English

### Data collected by OnTheRoad

**None.** OnTheRoad has no backend, requires no account, never syncs to cloud. All your itineraries, stops, notes, photos and preferences stay exclusively on your Android device in local storage (AsyncStorage + SecureStore for sensitive tokens).

### External services OnTheRoad contacts

When you use certain features, the app communicates directly with public external services. **OnTheRoad never sees nor stores these requests**: you go straight from your device to the service.

| Service | When | What is sent |
|---|---|---|
| **Wikipedia REST API** | Display photos of places | City/POI name to fetch a descriptive image |
| **Open-Meteo** | Weather widget per itinerary day | Lat/lon coordinates + date range |
| **OSRM (project-osrm.org)** | Compute real route distance | List of day's stop coordinates |
| **Photon (komoot)** | Basic address geocoding | Typed address string |
| **Mapbox** *(optional, BYOK)* | Higher-quality geocoding | Only if you enter your own API key |
| **Pexels** *(optional, BYOK)* | Trip cover photos | Only if you enter your own API key |
| **AI providers** *(optional, BYOK)* | AI stop suggestions | Claude/OpenAI/Gemini/Mistral/Ollama — bring your own key |
| **GitLab releases** | APK update check | Only HEAD request to a public feed JSON |

### Android permissions requested

- `INTERNET` — calls to services above
- `REQUEST_INSTALL_PACKAGES` — install APK update in-app (sideload)
- `READ_EXTERNAL_STORAGE` (Android ≤12 only) — select file to import (GPX/Excel)
- `WRITE_EXTERNAL_STORAGE` (Android ≤12 only) — save exported backup

No permissions for microphone, camera, location, contacts, address book.

### Opt-in crash reporting

The app can send anonymous crash reports via **Sentry**, but ONLY if you explicitly enable the option in Settings → Privacy → "Send anonymous crash reports". **Disabled by default**.

When enabled: only stack traces + error type + app version are sent. A centralized filter (`utils/sentryFilter.ts`) automatically discards:
- Email, device name, location
- Values that look like API keys (sk-/pk_/AIza/bearer/Authorization)
- Strings longer than 4096 characters

Filter source code: `utils/sentryFilter.ts` in the public repository.

### Your API keys (BYOK)

If you enter personal API keys for Mapbox/Pexels/AI providers:
- They stay only in **SecureStore** (Android Keystore-backed)
- Excluded from `adb` backup (`android:allowBackup="false"`)
- Used only for direct calls from your phone to the provider
- Never sent to us nor to any third party

### Technical security

- TLS required for all calls (no cleartext in release)
- Map WebView: restricted `originWhitelist` + SRI hash on CDN resources
- APK update verified with MD5 before install
- Zod validation on external input (backup import, WebView messages)

### Children under 13

OnTheRoad collects no personal data — thus compatible with COPPA/GDPR-K. However the app contains content generated by third-party AI providers (if enabled): parents should supervise children's use of the AI assistant.

### Changes

Significant changes to this policy will be announced in CHANGELOG.md + release tag. Version: v0.1.5.

### Contact

Email: `refpapps@pm.me` — privacy concerns or feedback.
Public issue tracker: https://gitlab.com/refpapps-apps/ontheroad/-/issues
