Spiccio : dépenses et comptes sur téléphone et PC, même hors ligne, synchronisés sur mon serveur

Une application pour les dépenses, les revenus et les comptes : une dépense se note sur le téléphone en quelques secondes, même sans réseau, et se retrouve sur le PC. Elle tourne sur Android, Windows et dans le navigateur avec le même code, se synchronise avec mon serveur et garde des montants exacts au centime. Abonnements, budgets, import CSV et chiffrement de bout en bout facultatif.

Spiccio est l'application avec laquelle je tiens mes comptes : dépenses, revenus, virements entre comptes, abonnements et budgets. Je l'ai construite pour moi et je l'utilise vraiment ; depuis le lien, on l'essaie dans le navigateur sans compte, et les données restent dans ce navigateur. L'interface affiche encore le nom provisoire, « Spese App » (« appli des dépenses » en italien).

**Ce qu'elle fait**

- **Saisie rapide** : le montant se tape par la droite, comme à la caisse ; compte et catégorie sont des boutons, et la catégorie vient d'une règle ou de l'historique, avec sa provenance indiquée. - **Abonnements et opérations récurrentes** : le calendrier des échéances à confirmer, ce qu'ils coûtent ce mois-ci et sur les douze prochains, l'essai gratuit et le préavis de résiliation. - **Budgets par catégorie**, avec la dépense nette et le reste du mois, aussi sur la vue d'ensemble. - **Import CSV** avec un aperçu qui n'écrit rien, les lignes rejetées avec leur motif et les doublons possibles à trancher ; réimporter le même fichier ne le double pas. - **Révision**, le seul endroit où l'on décide : doublons, conflits, échéances à confirmer, règles proposées. - **Prévision du solde** en fin de mois, avec les éléments qui la composent. - Export CSV, Excel et JSON, sauvegarde chiffrée, thème clair et sombre.

**Un code, trois plateformes**

Le domaine est en TypeScript pur et ne connaît ni le SQL ni l'interface : les cas d'usage produisent un plan d'écriture que la persistance traduit en transactions. Sur Windows et Android, l'application est en Tauri avec SQLite natif ; dans le navigateur, le même SQLite tourne en WebAssembly, sur OPFS. Dans les applications, on se connecte avec une passkey, et la phrase de chiffrement peut être gardée par l'empreinte sur le téléphone ou par Windows Hello sur le PC.

**La partie difficile : la synchronisation**

Chaque écriture enregistre la donnée et l'opération à envoyer dans la même transaction : si l'application se ferme en plein milieu, rien ne se perd et rien ne part deux fois. Le serveur, Fastify avec MongoDB, tient un journal ordonné par propriétaire ; l'appareil n'avance son curseur qu'après avoir appliqué une page, et le canal en temps réel se contente de prévenir. Un conflit sur les montants ne se règle jamais tout seul : il arrive en Révision avec la valeur qui l'a emporté. Les montants sont des entiers en centimes du début à la fin, jamais en virgule flottante, et les soldes ne sont pas enregistrés : ils se recalculent à partir des opérations. Avec le chiffrement de bout en bout, chaque valeur arrive au serveur chiffrée en AES-256-GCM, et le serveur ne lit ni les montants, ni les commerçants, ni les notes.

Les choix techniques sont consignés dans 34 décisions ; 2 615 tests automatiques couvrent le domaine, la persistance, le client et le serveur, et à chaque push une GitHub Action les exécute et publie le serveur et le client web.

Conception, développement full-stack et mise en ligne · 2026

Vue.js, Tauri, Fastify, MongoDB, SQLite

Voir le site

Andrea Coppetta