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ê.
As telas
01 / Início
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.
02 / Transações
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.
03 / Orçamento
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.
04 / Cartão
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.
05 / Investimentos
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.
O que ele faz
Privacidade por arquitetura
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.
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.
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.
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.
Nenhuma conta a criar, nenhuma senha a esquecer. O bloqueio, quando ligado, é a biometria do próprio aparelho.
Nenhum evento, nenhum identificador, nenhum SDK de terceiro. O log é auditado por teste para não conter dado financeiro.
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
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.
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.
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 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.