Spiccio: despesas e contas no telemóvel e no PC, também offline, sincronizadas no meu servidor

Uma app para despesas, receitas e contas: uma despesa regista-se no telemóvel em poucos segundos, mesmo sem rede, e volta a encontrar-se no PC. Funciona em Android, Windows e no navegador com o mesmo código, sincroniza com o meu servidor e mantém os valores exatos ao cêntimo. Subscrições, orçamentos, importação CSV e encriptação ponto a ponto opcional.

O Spiccio é a app com que faço as minhas contas: despesas, receitas, transferências entre contas, subscrições e orçamentos. Construí-a para mim e uso-a a sério; a partir da ligação, experimenta-se no navegador sem conta, e os dados ficam nesse navegador. A interface ainda mostra o nome provisório, «Spese App» («app de despesas» em italiano).

**O que faz**

- **Registo rápido**: o valor escreve-se a partir da direita, como na caixa; conta e categoria são botões, e a categoria vem de uma regra ou do histórico, com a indicação de onde. - **Subscrições e pagamentos recorrentes**: o calendário dos vencimentos por confirmar, quanto custam este mês e nos próximos doze, o período experimental e o pré-aviso de cancelamento. - **Orçamentos por categoria**, com a despesa líquida e o que resta do mês, também na vista geral. - **Importação CSV** com uma pré-visualização que não escreve nada, as linhas rejeitadas com o motivo e os possíveis duplicados por decidir; voltar a importar o mesmo ficheiro não o duplica. - **Revisão**, o único sítio onde se decide: duplicados, conflitos, vencimentos por confirmar, regras propostas. - **Previsão do saldo** no fim do mês, com os itens que a compõem. - Exportação CSV, Excel e JSON, cópia de segurança encriptada, tema claro e escuro.

**Um código, três plataformas**

O domínio é TypeScript puro e não conhece nem SQL nem a interface: os casos de uso produzem um plano de escrita que a persistência traduz em transações. No Windows e no Android a app é Tauri com SQLite nativo; no navegador o mesmo SQLite corre em WebAssembly, sobre OPFS. Nas apps entra-se com uma passkey, e a frase de encriptação pode ficar guardada pela impressão digital no telemóvel ou pelo Windows Hello no PC.

**A parte difícil: a sincronização**

Cada escrita guarda o dado e a operação a enviar na mesma transação: se a app fechar a meio, nada se perde e nada sai duas vezes. O servidor, Fastify com MongoDB, mantém um registo ordenado para cada proprietário; o dispositivo só avança o cursor depois de aplicar uma página, e o canal em tempo real limita-se a avisar. Um conflito nos valores nunca se resolve sozinho: chega à Revisão com o valor que prevaleceu. Os valores são inteiros em cêntimos do princípio ao fim, nunca em vírgula flutuante, e os saldos não se guardam: recalculam-se a partir dos movimentos. Com a encriptação ponto a ponto, cada valor chega ao servidor encriptado com AES-256-GCM, e o servidor não lê valores, comerciantes nem notas.

As escolhas técnicas estão escritas em 34 decisões; 2615 testes automáticos cobrem domínio, persistência, cliente e servidor, e a cada push uma GitHub Action executa-os e publica o servidor e o cliente web.

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

Vue.js, Tauri, Fastify, MongoDB, SQLite

Ver o site

Andrea Coppetta