financepro, app Android de controle financeiro pessoal, sem anúncio, sem mensalidade e sem cadastro.

financepro
Sem anúncio · Sem mensalidade · Sem cadastro

Uma despesa em três toques, e o mês fecha sozinho.

Controle financeiro pessoal para Android. Todo app grátis de finanças cobra de algum jeito, em anúncio, em mensalidade ou nos seus dados. Este não tem como cobrar por nenhum dos três, e a página toda existe para mostrar por quê.

0toques para lançar
0anúncios
0reais por mês
0host de rede

As telas

01 / Início

O que você precisa saber antes de rolar.

Saldo, a fatura que vence, o que sobrou no mês e as contas dos próximos sete dias. Nessa ordem, e nenhum bloco aparece vazio esperando que você o preencha.

  • Saldo, fatura do cartão e o que sobrou no mês, na primeira dobra
  • Algarismos tabulares em todo valor, para a coluna de dinheiro alinhar
  • Contas a vencer nos próximos sete dias, com “Efetivar” na linha

02 / Transações

Cem lançamentos ainda precisam ser legíveis.

Cem lançamentos em tipografia de 64 sp não é ousadia, é tela inutilizável. Aqui não há display type nenhum, só a tipografia de interface e o degrau do card. Role o aparelho e conte, são 31 lançamentos.

  • Filtro em pílula, entre Tudo, Entradas e Saídas
  • Deslize para excluir, com desfazer, e o gesto nunca é o único caminho
  • Verde e vermelho são reforço; o sinal +/− já basta sozinho

03 / Orçamento

Quanto ainda dá para gastar por dia.

Saber que você gastou 92% do teto não ajuda no supermercado. Saber que sobram R$ 20,40 por dia até o fim do mês ajuda. E o aviso nunca é só cor, vem sempre com ícone junto, porque quem não distingue vermelho de laranja também precisa enxergar que estourou.

  • Um card para todos os tetos, não um card por categoria
  • Quanto ainda sobra por dia até o fim do mês
  • Copiar os tetos do mês anterior em um toque

04 / Cartão

A fatura nunca fica fora do extrato.

Nenhuma linha de banco guarda “fatura”. Ela é a consulta das compras dentro da competência, e por isso nunca fica dessincronizada do extrato. O dia de fechamento é restrito a 1 e 28, o que mata a classe inteira de bugs de dia 31.

  • Fecha em 28 e vence em 5, e a competência segue essas duas datas
  • Pagar a fatura é uma transferência, sem código especial
  • Parcelas gravam N linhas na criação, com a sobra de centavos na última

05 / Investimentos

O CDI entra, e nada seu sai.

O rendimento é lançado mês a mês, como transação de verdade, e não como número calculado na hora de mostrar. A taxa vem da série pública do Banco Central, e dá para informar à mão se você preferir não usar rede.

  • Percentual do CDI por conta, ou taxa fixa
  • Previsto contra lançado, mês a mês
  • Um GET sem parâmetro, sem cabeçalho de identificação e sem corpo
9:415G

O que ele faz

Substitui a planilha, e fecha o mês.

Privacidade por arquitetura

O que ele nunca vai te pedir.

Um app que sabe quanto você ganha, onde você come e a que horas você anda de carro merece ser julgado pelo que ele nunca teve como pegar. Estas ausências são de arquitetura, não de roadmap, e é por isso que elas não mudam na próxima versão.

Anúncio não existe

Nenhum SDK de publicidade no projeto. E não é promessa, é consequência, porque um teste exige o conjunto exato de permissões e qualquer biblioteca de anúncio traria as suas.

Mensalidade não existe

Não há plano, nível nem tela de preço, e não há para onde cobrar. É a mesma razão de o app funcionar sem rede, e não uma promoção de lançamento.

Backend não existe

Não há servidor para vazar, porque não há servidor. O banco é local, cifrado com SQLCipher, e a chave mora no Keystore do aparelho.

Login não existe

Nenhuma conta a criar, nenhuma senha a esquecer. O bloqueio, quando ligado, é a biometria do próprio aparelho.

Analytics não existe

Nenhum evento, nenhum identificador, nenhum SDK de terceiro. O log é auditado por teste para não conter dado financeiro.

Backup do sistema desligado

allowBackup=false. O backup existe, é seu, e sai por exportação explícita.

A permissão INTERNET existe desde que o CDI entrou. Duas guardas substituíram a garantia que a ausência dela dava. Um teste exige o conjunto exato de permissões do manifesto mesclado, e uma a mais, mesmo vinda de dependência transitiva, reprova. O build cai se aparecer no código uma URL para qualquer host que não seja api.bcb.gov.br.

Legibilidade

Feito para ser lido de relance.

Preto absoluto para mostrar conteúdo, branco para percorrer cadastro. A profundidade inteira do desenho é um único degrau de luminância acima de cada canvas. Um card não tem sombra nem moldura, ele é a superfície um passo mais clara que o fundo. O alternador lá em cima troca os dois no aparelho, sem tocar nesta página.

A paleta é preenchimento, nunca texto

Sobre preto puro, oito das nove cores passam de 4,5 de contraste. Sobre #16181A, que é onde o conteúdo mora, seis reprovam, e nenhuma passa nos dois temas. A regra elimina a classe de erro em vez de administrá-la por superfície.

Os números vivem em teste, não em Markdown

ContrastTest recalcula os contrastes a partir dos tokens e falha em regressão. Uma tabela em documento mente assim que alguém troca um hex; o teste não.

Código aberto

O argumento inteiro está no repositório.

Não é só o APK que é público

O projeto é escrito em desenvolvimento guiado por especificação. A spec tem 126 requisitos em EARS, cada um com critério de aceite verificável, e nenhum código entra sem responder a um deles. As decisões de arquitetura viram ADR antes do código, com as alternativas rejeitadas registradas.

Quem clonar encontra a constituição do projeto, a spec, as tasks ordenadas, os ADRs e um verificador de rastreabilidade que reprova o build se um requisito ficar órfão.

Abrir no GitHub Ler a documentação
Autor
Isaac Portela, @dev-isaacportela
Repositório
github.com/dev-isaacportela/financepro
Plataforma
Android 8.0 e acima, minSdk 26
Stack
Kotlin, Jetpack Compose, Room, SQLCipher, Hilt, DataStore, WorkManager
Licença
Apache 2.0
Fonte
Inter, sob a SIL Open Font License 1.1, empacotada no APK
Contribuir
Abra uma issue antes do PR. Toda mudança de comportamento começa na spec, não no código.