Pular para o conteúdo

Recursos

O que o Financy faz hoje, e o que vem a seguir

O Financy está sendo reconstruído. O que funciona hoje: contas em qualquer moeda e a base por trás delas: login, acesso compartilhado com funções, atualizações ao vivo, um app offline, exportação, nove idiomas e seu próprio servidor. Cada seção leva ao código dela.

Por Anton ShubinAtualizado em

Lançamentos e orçamentos ainda não existem. Veja em que ponto está a reconstrução.

Funciona hoje

A base onde vai ficar o dinheiro da sua família

Estas partes funcionam e são testadas na CI. As contas em qualquer moeda e suas categorias já estão aqui; os lançamentos vêm a seguir.

Já funcionaEntrar com Google e GitHub exige chaves próprias do servidor, então uma instalação nova começa só com o login por e-mail.

Cada conta na própria moeda

Dinheiro, contas bancárias, cartões, poupança, ativos e dívidas, cada um na própria moeda, agrupados por tipo e com uma conta padrão. Toda a família vê cada mudança na hora.

Para desenvolvedores

  • O servidor calcula cada saldo quando ele é lido e nunca o guarda, então ele não se desvia
  • Os valores são inteiros na menor unidade da moeda: o iene não tem nenhuma, o dinar tem três casas
  • Quem só visualiza vê as contas; só editores ou acima as alteram, e o servidor confere
Ler o código das contas

Categorias de um só nível

Organize despesas e receitas em categorias, cada uma com seu ícone e sua cor. Ponha Mercado e Comer fora dentro de Alimentação. Uma família nova começa com uma lista curta no seu idioma.

Para desenvolvedores

  • Uma categoria nunca é excluída: arquivá-la a tira das listas de escolha, e os lançamentos passados a mantêm
  • Uma subcategoria tem o tipo da principal, e uma principal não pode ter principal, conferido no servidor
  • Quem só vê lê as categorias; só um editor ou acima as altera
Ler o código das categorias

Login resolvido

Você cria a conta com e-mail e senha e confirma o e-mail com um código. Pode redefinir uma senha esquecida, continuar com Google ou GitHub, entrar com uma chave de acesso ou receber um código por e-mail. Um app autenticador adiciona a verificação em duas etapas (2FA), e você vê todos os dispositivos conectados e pode desconectar os outros.

Para desenvolvedores

  • Senhas com hash PBKDF2-SHA-256 via Web Crypto, 600.000 iterações por padrão
  • Cookies de sessão assinados e um histórico de auditoria de cada evento de login
  • Tokens de API pessoais, guardados só como hashes com chave
Ler o código de login

Uma família, cada pessoa com seu próprio login

Uma família (um grupo, no app) são as pessoas que dividem o dinheiro. Convide seu parceiro, sua parceira ou parentes, dê a cada um uma função de leitor a dono e transfira a família para outro dono quando precisar. Uma família excluída pode ser restaurada em até 30 dias, e o registro de atividade mostra quem mudou o quê.

Para desenvolvedores

  • A família é a única fronteira pela qual todo dado é verificado
  • Cada pessoa vê só as famílias de que faz parte
  • Convites, troca de funções e transferência de dono, cada um com seus próprios testes
Ler o domínio de grupos

Mudanças aparecem em todo dispositivo sem recarregar

Quando alguém da família muda algo, os outros veem na hora, em todo dispositivo aberto. Um notebook que sai da suspensão recupera o que perdeu.

Para desenvolvedores

  • Um WebSocket padrão, com um número de sequência em cada mudança
  • Um dispositivo que reconecta busca o que perdeu
Ler o design do tempo real

Um app que abre sem internet

Instale o Financy no celular ou no computador: ele abre offline e mostra o que viu por último.

Para desenvolvedores

  • Uma cópia local de cada lista no IndexedDB, e uma fila de gravação com chaves de idempotência
  • “Manter a minha versão” ou “Usar a outra versão” em cada conflito
Ler docs/offline.md

Seus dados vão com você

O dono pode exportar uma família para um arquivo JSON aberto a qualquer hora, e importá-lo depois como uma nova família. A importação nunca sobrescreve o original.

Para desenvolvedores

  • O arquivo inteiro é verificado antes de qualquer gravação, e depois importado num único passo
  • Cada registro recebe um id novo, então uma importação nunca colide com o que já existe
Ler o código de exportação

Em nove idiomas

O app e este site falam inglês, russo, espanhol, alemão, português (Brasil), árabe, francês, japonês e chinês simplificado. Cada pessoa escolhe seu idioma no app, então uma família pode usar mais de um.

Para desenvolvedores

  • Um catálogo por idioma, verificado por um teste que aponta cada mensagem que falta
  • Números e datas pelo Intl do próprio navegador
  • As páginas em árabe são lidas da direita para a esquerda
Ler o guia de tradução

Roda no seu próprio servidor

O Financy roda em qualquer servidor Linux, alugado ou seu, com Docker Compose. Hospedar você mesmo é grátis sob a licença AGPL‑3.0, e os dados da sua família ficam no seu servidor.

Para desenvolvedores

  • Traefik na frente, com certificados automáticos
  • Postgres e Valkey ao lado dos apps
  • Métricas, logs e alertas com VictoriaMetrics, VictoriaLogs e Grafana
  • Um backup diário e criptografado do banco, opcional, com os passos de restauração por escrito
Ler os arquivos do Compose
$ deno task deploy Copying files... Copying infra/envs/.env.prod to infra/envs/.env... Creating web push keys if missing... Starting the app... Deploy completed.
Resumido: a saída do rsync e do Compose entre os passos foi omitida.
  • Traefik
  • Postgres
  • Valkey
  • VictoriaMetrics
  • VictoriaLogs
  • Grafana
  • Alertmanager
  • Garage file store
  • restic backups

Perguntas

O Financy faz isso?

Posso rodar o Financy em hospedagem compartilhada ou serverless?

Não. O Financy roda como contêineres permanentes com Docker Compose num servidor Linux, porque a API mantém conexões WebSocket abertas e um worker esvazia uma fila.

Qual banco de dados o Financy usa?

Postgres. As migrações, consultas e testes de integração contam com ele.

Tem app para celular?

Ainda não está nas lojas. Hoje o app web se instala pelo navegador no celular e no computador e abre offline.