Oriel : mes applications personnelles réunies en une seule, qui marche hors ligne et se synchronise sur mon serveur

Mon écosystème d'applications personnelles : une seule application, dans le navigateur et sur Windows et Android, où chaque application est une section, aujourd'hui Spese (dépenses) et Inventario (inventaire). Les données restent sur l'appareil et marchent hors ligne ; mon serveur les synchronise, aussi dans des espaces partagés, avec un chiffrement de bout en bout.

Oriel est mon écosystème d'applications personnelles : une seule application, dans le navigateur et comme application pour Windows et Android, où chaque application est une section avec ses données, au-dessus d'une base de données, d'une synchronisation et d'une bibliothèque de composants communes. La première section est **Spese** (« dépenses » en italien), l'héritière de Spiccio, réécrite ici morceau par morceau ; la deuxième, **Inventario** (« inventaire »), garde les objets de la maison avec leurs garanties et leurs tickets. Depuis le lien, on l'essaie sans compte : « Prova con dati d'esempio » (essayer avec des données d'exemple) ouvre Spese avec des comptes et des opérations inventés, qui restent dans ce navigateur.

**Ce qu'elle fait**

- **Marche hors ligne** : les données restent sur l'appareil, dans SQLite (dans le navigateur en WebAssembly, avec OPFS), et le serveur les porte sur les autres appareils ; une mise à jour n'envoie que les champs modifiés. - **Spese** : comptes, opérations, remboursements, abonnements avec résiliation et préavis, budgets du mois, prévision du solde, import CSV et une Revue qui trouve doublons et conflits. - **Inventario** : un objet naît d'une dépense, avec le ticket joint et la garantie qui arrive à échéance. - **Espaces partagés** : des données en commun avec d'autres personnes, invitées par un lien, avec qui est là en ce moment, l'opération bloquée pendant qu'un autre la modifie et les changements en temps réel. - **Chiffrement de bout en bout**, facultatif : le serveur ne garde que des données chiffrées, et retirer quelqu'un d'un espace en change la clé. - **Connexion** par mot de passe, passkey et code temporaire ; un enregistrement s'annule.

**La partie difficile**

Deux appareils qui modifient la même opération hors ligne : le serveur n'écrase jamais, il garde les deux versions et la fiche du conflit montre ce qui a changé, où et qui l'a fait, jusqu'à ce que quelqu'un choisisse. Les règles qui lient plusieurs enregistrements, comme des remboursements qui ne dépassent pas la dépense, le serveur les contrôle aussi, et le conflit dit quelle règle l'a arrêté.

Vue 3 et TypeScript, Fastify et PostgreSQL sur mon serveur dans Docker, Tauri 2 pour les applications natives : 22 paquets dans un monorepo, chaque module documenté dans un catalogue, plus de 5 000 tests automatiques et une centaine de tests de bout en bout dans un vrai navigateur.

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

Vue.js, Fastify, PostgreSQL, SQLite, Tauri

Voir le site

Andrea Coppetta