Oriel: as minhas aplicações pessoais numa só, que funciona sem rede e se sincroniza com o meu servidor

O meu ecossistema de aplicações pessoais: uma só aplicação, no navegador e no Windows e Android, em que cada aplicação é uma secção, hoje Spese (despesas) e Inventario (inventário). Os dados ficam no dispositivo e funcionam sem rede; o meu servidor sincroniza-os, também em áreas partilhadas com outras pessoas e com cifragem de ponta a ponta.

O Oriel é o meu ecossistema de aplicações pessoais: uma só aplicação, no navegador e como aplicação para Windows e Android, em que cada aplicação é uma secção com os seus dados, sobre uma base de dados, uma sincronização e uma biblioteca de componentes comuns. A primeira secção é a **Spese** («despesas» em italiano), a herdeira do Spiccio, reescrita aqui peça a peça; a segunda, **Inventario** («inventário»), guarda os objetos de casa com as garantias e os talões. A partir da ligação experimenta-se sem conta: «Prova con dati d'esempio» (experimentar com dados de exemplo) abre a Spese com contas e movimentos inventados, que ficam nesse navegador.

**O que faz**

- **Funciona sem rede**: os dados ficam no dispositivo, em SQLite (no navegador com WebAssembly, com OPFS), e o servidor leva-os aos outros dispositivos; numa atualização só viajam os campos que mudaram. - **Spese**: contas, movimentos, reembolsos, subscrições com cancelamento e pré-aviso, orçamentos do mês, previsão do saldo, importação de CSV e uma Revisão que encontra duplicados e conflitos. - **Inventario**: um objeto nasce de uma despesa, com o talão anexado e a garantia que expira. - **Áreas partilhadas**: dados em comum com outras pessoas, convidadas com uma ligação, com quem está lá naquele momento, o movimento bloqueado enquanto outro o edita e as alterações em tempo real. - **Cifragem de ponta a ponta**, opcional: no servidor só há dados cifrados, e retirar alguém de uma área muda a sua chave. - **Acesso** com palavra-passe, passkey e código temporário; uma gravação pode ser anulada.

**A parte difícil**

Dois dispositivos que alteram o mesmo movimento sem rede: o servidor nunca sobrescreve, guarda as duas versões e a ficha do conflito mostra o que mudou, onde e quem o fez, até alguém escolher. As regras que ligam vários registos, como os reembolsos que não ultrapassam a despesa, também as controla o servidor, e o conflito diz que regra o travou.

Vue 3 e TypeScript, Fastify e PostgreSQL no meu servidor em Docker, Tauri 2 para as aplicações nativas: 22 pacotes num monorepo, cada módulo documentado num catálogo, mais de 5000 testes automáticos e uma centena de testes de ponta a ponta num navegador real.

Conceção, desenvolvimento full-stack e publicação · 2026

Vue.js, Fastify, PostgreSQL, SQLite, Tauri

Ver o site

Andrea Coppetta