Cosa significa local-first in pratica
Quando apri l'app per la prima volta non c'è alcun login. I dati vanno
in IndexedDB — un database integrato nel browser, sotto
il dominio balancehelper.it, isolato da ogni altro sito.
Quando chiudi la pagina, i dati sono ancora lì. Quando torni domani,
sono ancora lì. Nessuna chiamata di rete con dentro i tuoi importi.
Questo significa anche che se chiudi la finestra in modalità anonima o cancelli i dati del sito, i record vengono persi. È coerente con il modello local-first: la fonte di verità è il tuo browser. Per chi usa l'app intensivamente consigliamo (a) di installarla come PWA — su iOS, Android o desktop — e (b) di esportare ogni tanto un backup JSON.
La sync opzionale (Pro), cifrata end-to-end
Chi vuole vedere lo stesso registro sul telefono e sul laptop può attivare la sync — è inclusa in Pro. Tecnicamente funziona così:
- La prima volta che attivi la sync, il browser genera una chiave AES-GCM casuale a 256 bit usando la Web Crypto API.
- La chiave viene salvata in IndexedDB locale. Non lascia mai il dispositivo.
- Prima di inviare un record al server, il browser lo cifra con la chiave. Quello che esce è un blob opaco di byte (ciphertext + IV).
- Sul server (Supabase) c'è una riga con il blob cifrato e nient'altro di sensibile. Importi, note, categorie sono completamente illeggibili dal server.
- Su un altro tuo dispositivo, dopo il login, importi la chiave (la esporti da un device, la importi sull'altro come file). A quel punto il nuovo browser può decifrare i record.
Se perdi la chiave, non possiamo recuperarla. È il prezzo onesto della E2EE: l'unico modo per essere veramente impossibilitato a leggere i tuoi dati è non avere la chiave, e questo include anche non avere un meccanismo di recovery. Per questo l'app ti suggerisce di esportare la chiave appena la generi e di custodirla come faresti con un backup di un password manager.
Niente cookie, niente PII
Per capire come usare l'app raccogliamo metriche aggregate tramite Plausible Analytics (open-source, GDPR-friendly, niente cookie, niente PII). Le proprietà degli eventi sono categoriche: nomi di pagina, tipologie di trigger, contatori. Mai importi, descrizioni o ID utente.
Gli unici dati associati a un account che teniamo sono: email (per il
login Google), il flag plan in app_metadata (free
o pro) e le righe cifrate della sync. Niente di più.
Cosa non facciamo
- Niente connessione bancaria. Non chiediamo l'accesso al tuo conto. I dati li inserisci a mano.
- Niente vendita di dati. Anche volendo, non avremmo materiale: vediamo solo ciphertext.
- Niente “consulenza”. Non suggeriamo prodotti finanziari, non abbiamo affiliazioni con banche.
- Niente AI sui tuoi numeri. Niente embedding, niente fine-tuning, niente “riassunto AI delle tue spese”.
Stima dei dati che ti riguardano
Sotto trovi un piccolo strumento per visualizzare cosa effettivamente lascia il tuo browser nel caso peggiore (sync attiva, sessione attiva).