Spiccio: spese e conti dal telefono e dal PC, anche offline, sincronizzati sul mio server

App per spese, entrate e conti: una spesa si registra dal telefono in pochi secondi, anche senza rete, e si ritrova sul PC. Gira su Android, Windows e nel browser con lo stesso codice, si sincronizza con il mio server e tiene gli importi esatti al centesimo. Abbonamenti, budget, import da CSV e cifratura end-to-end facoltativa.

Spiccio è l'app con cui tengo i miei conti: spese, entrate, trasferimenti fra conti, abbonamenti e budget. L'ho costruita per me e la uso davvero; dal link la si prova nel browser senza account, e i dati restano in quel browser. Nell'interfaccia il nome è ancora quello provvisorio, «Spese App».

**Che cosa fa**

- **Inserimento rapido**: l'importo si digita da destra, come alla cassa; conto e categoria sono pulsanti, e la categoria arriva da una regola o dallo storico, con scritto da dove. - **Abbonamenti e ricorrenti**: il calendario delle scadenze da confermare, quanto costano questo mese e nei prossimi dodici, la prova gratuita e il preavviso di disdetta. - **Budget per categoria**, con la spesa netta e il residuo del mese, anche nella panoramica. - **Import da CSV** con un'anteprima che non scrive niente, le righe scartate con il motivo e i possibili doppioni da decidere; lo stesso file reimportato non raddoppia. - **Revisione**, l'unico posto dove si decide: doppioni, conflitti, scadenze da confermare, proposte di regola. - **Previsione del saldo** a fine mese, con le voci che la compongono. - Export CSV, Excel e JSON, backup cifrato, tema chiaro e scuro.

**Un codice, tre piattaforme**

Il dominio è TypeScript puro e non conosce né SQL né interfaccia: i casi d'uso producono un piano di scrittura che la persistenza traduce in transazioni. Su Windows e Android l'app è Tauri con SQLite nativo; nel browser lo stesso SQLite gira in WebAssembly, su OPFS. Nelle app si entra con una passkey, e la frase di cifratura può restare custodita dall'impronta sul telefono o da Windows Hello sul PC.

**La parte difficile: la sincronizzazione**

Ogni scrittura salva il dato e l'operazione da inviare nella stessa transazione: se l'app si chiude a metà, non si perde niente e niente parte due volte. Il server, Fastify con MongoDB, tiene un log ordinato per ogni proprietario; il dispositivo avanza il suo cursore solo dopo aver applicato una pagina, e il canale in tempo reale avvisa e basta. Un conflitto sugli importi non si risolve da solo: arriva in Revisione con il valore che ha vinto. Gli importi sono interi in centesimi dall'inizio alla fine, mai in virgola mobile, e i saldi non si salvano: si ricalcolano dai movimenti. Con la cifratura end-to-end ogni valore arriva al server cifrato con AES-256-GCM, e il server non legge importi, esercenti e note.

Le scelte tecniche sono scritte in 34 decisioni; 2.615 prove automatiche coprono dominio, persistenza, client e server, e a ogni push una GitHub Action le esegue e pubblica server e client web.

Progettazione, sviluppo full-stack e pubblicazione · 2026

Vue.js, Tauri, Fastify, MongoDB, SQLite

Vedi il sito

Andrea Coppetta