Skip to content

Releases: itjuanpablo/finance-dashboard

v.4.3.4

Choose a tag to compare

@itjuanpablo itjuanpablo released this 02 Aug 03:42

Changelog 📥

[4.3.4] — 02/08/2026

Correções de CSS

Administrar, Crescer e Resumos tinham os botões 🌐 🔒 👁 ◐ como filhos diretos do <header>, que é flex com space-between — o navegador espalhava os quatro pela largura da tela. Faltava o invólucro .header-right, que as outras páginas tinham.

A causa era o bloco estar copiado em cinco páginas com os mesmos handlers. Extraído para components/AcoesCabecalho.js; as seis páginas passam a usá-lo, e Relatório ganha o seletor de idioma que era a única tela sem ele.

Teste estático novo conta os filhos diretos de cada <header>: é um defeito que não lança erro, não quebra teste e desaparece em tela estreita por causa do flex-wrap — só aparece no monitor de quem usa.

Também: barra de limite do cartão com largura mínima. Uma fatura de 14,90 num limite de 3.100 rendia três pixels que pareciam sujeira na tela.

v4.3.3

Choose a tag to compare

@itjuanpablo itjuanpablo released this 02 Aug 00:24

Changelog 📥

[4.3.3] — 01/08/2026

Resumo de cartão do Mercado Pago - Argentina

  • A seção de ideias de /evoluir sai por ora: catálogo, filtros e 61 chaves de tradução por idioma. Sobra a calculadora de juros compostos, que é o que a página promete no nome.

  • Atalhos do cabeçalho ganham 18px de ícone e 38px de altura — sem rótulo há folga de ~290px na largura útil, contra os 4px que existiam antes.

  • .gitattributes com export-ignore tira os .mjs, docs/ e empacotar-fluxo.sh do tarball que o GitHub gera para as releases, sem tirá-los do controle de versão. Quem instala recebe só os .sh; quem desenvolve continua com os testes e o histórico. instalar.sh avisa quando não há suíte para rodar, em vez de calar.


Commit: bf418d3
O Fluxo passa a ler o "Resumen de tarjeta de crédito" do Mercado Pago Argentina. Antes o arquivo era rejeitado com "não reconheço o formato".

Três cuidados que valem saber:

  • Consumos em dólares ficam de fora. O resumo cobra dólar em coluna separada e não traz cotação — ele mesmo diz que o câmbio é o do dia do pagamento. Converter por um número inventado mostraria na tela um gasto que ninguém teve. O app avisa quantos consumos e qual o total em dólar ficaram de fora, para lançar à mão se quiser.

  • O ano é suposto. Nenhuma data do resumo traz ano, nem o fechamento. O app assume o fechamento mais recente que já passou e avisa qual ano usou. Ao importar um resumo antigo, confira as datas.

  • Se um total não bater, nada é importado. Os três valores que o documento declara são conferidos ao centavo a cada importação.

v4.3.2

Choose a tag to compare

@itjuanpablo itjuanpablo released this 01 Aug 23:57

Changelog 📥

[4.3.2] — 01/08/2026

O app abre no seu idioma

Na primeira execução o Fluxo passa a seguir o idioma do navegador em vez de abrir sempre em português. Quem instalou versões anteriores também é atendido: uma migração automática remove o idioma que a instalação gravou sozinha no
primeiro boot.

Se você já escolheu um idioma no botão 🌐, nada muda — escolha feita continua valendo e vence a detecção.

Precedência, do mais forte para o mais fraco:

  1. o que você escolheu no 🌐
  2. NEXT_PUBLIC_FLUXO_LOCALE no .env.local (para travar o idioma)
  3. idioma do navegador
  4. português

Cabeçalho estável em qualquer idioma

Os atalhos do painel agora são só ícone no computador, com o nome no balão ao passar o mouse. Antes os botões estouravam a largura disponível e apareciam cortados — o texto em espanhol ocupa 13% mais espaço que em português, e não havia margem sobrando nem em português. Ícones ocupam o mesmo em toda língua, então o problema não volta com o próximo idioma.

No celular a navegação inferior continua com os nomes escritos.

Instalação

scripts/instalar.sh agora oferece "detectar pelo navegador" como opção padrão. Fixar um idioma continua possível para quem quiser.

v4.3.1

Choose a tag to compare

@itjuanpablo itjuanpablo released this 01 Aug 23:19

Changelog 📥

[4.3.1] — 01/08/2026

Cabeçalho arrumado no notebook e atualização em dois cliques

O cabeçalho não fica mais cortado

Em telas de notebook 13" — MacBook Air, por exemplo — os atalhos do topo apareciam quebrados, com o ícone numa linha e o nome na outra, cortados pela metade. Agora cabem em uma linha só.

Se ainda faltar espaço (zoom do navegador aumentado, fonte do sistema maior), o cabeçalho quebra em duas linhas inteiras em vez de espremer os botões.

De quebra, a tabela de lançamentos ganhou cerca de 250px de largura nessas telas: descrição longa que virava "…" agora aparece inteira.

Atualizar ficou dois cliques

Novo atalho Fluxo na Área de Trabalho. Dois cliques nele e o app:

  1. procura a última versão publicada no GitHub;
  2. se houver novidade, faz uma cópia dos seus dados e atualiza;
  3. abre no navegador.

Para criar o atalho, uma vez só, no Terminal:

cd ~/Fluxo && bash scripts/criar-atalho.sh

Seus dados nunca são tocados pela atualização, eles ficam num arquivo que não vem no pacote baixado. Ainda assim, uma cópia é feita antes de cada atualização.

Se o download vier incompleto ou em formato estranho, ele avisa e não altera nada, em vez de dizer que atualizou sem ter atualizado.

v4.3.0

Choose a tag to compare

@itjuanpablo itjuanpablo released this 01 Aug 14:39

Changelog 📥

[4.3.0] — 01/08/2026

"Estou melhorando?" e dividir um lançamento

Evolução: a pergunta que faltava

Nova tela Evolução (📈). O Fluxo respondia bem onde meu dinheiro foi este mês e não respondia estou melhorando? — o painel e o relatório eram os dois mensais, e mês isolado não mostra tendência. Dá para ter nove meses seguidos de melhora e não perceber nenhuma.

Agora há a curva de saldo ao longo do tempo e o resumo mês a mês, com filtro por ano.

Dois números na mesma tela que não batem, e os dois estão certos. O resultado do mês é tudo que entrou menos tudo que saiu, incluindo compras no cartão no mês em que você comprou. O saldo é o que estava na conta no fim do mês, e a compra no cartão só sai da conta quando a fatura é paga. A tela explica isso; sem a legenda, pareceriam dois números discordando.

Se você ainda não cadastrou uma conta com saldo inicial, a tela mostra a variação acumulada e avisa que é variação. Inventar um ponto de partida deixaria a linha bonita e o número errado.

Dividir um lançamento

Compra de mercado que é metade comida e metade produto de limpeza. Farmácia com remédio e cosmético. Até agora, escolher uma categoria era escolher qual mentira contar.

O botão na lista de lançamentos (Gerenciar › Lançamentos) reparte o valor entre quantas categorias você quiser. A tela mostra o tanto que falta distribuir o tempo todo e só deixa salvar quando fecha — dividir reorganiza um gasto, não cria nem some com dinheiro. A última parte se autocompleta com o resto.

O lançamento original some da lista e as partes tomam o lugar dele. Ele continua guardado por baixo, e é o que impede a reimportação do mesmo extrato trazer a compra de volta duplicada. Desfazer a divisão devolve tudo como estava.

O app não abre mais em branco

Erro de tela. Antes, um erro de programação em qualquer página deixava a tela completamente em branco, sem uma palavra. Agora aparece uma mensagem que diz, em primeiro lugar, que seus dados estão salvos — porque essa é a primeira coisa
que se pergunta ao ver um app de finanças quebrar. Os detalhes técnicos ficam recolhidos e copiáveis, para você me mandar.

Sem conexão. O Fluxo tem ícone na tela de início do iPhone e abre em tela cheia como aplicativo, mas os dados vêm do seu computador. Com o Mac desligado ou o Tailscale fora do ar, ele abria em branco.

Agora abre com os números da última vez, e uma tarja no topo diz de quando eles são. Lançar e importar ficam bloqueados enquanto estiver sem conexão, um app de finanças que finge ter salvo é pior do que um que avisa que não deu.

Lixeira. Lançamentos excluídos ficam listados e podem ser restaurados quando você quiser. Antes eles sumiam depois dos 4 segundos do aviso na tela.

Primeira tela de quem está começando

Quem instalava abria um painel vazio sem saber o que fazer. Agora as telas vazias explicam para que servem e qual é o próximo passo. E três situações que mostravam a mesma frase passaram a ser tratadas como o que são: não há nada ainda (arraste um extrato), este mês está vazio (troque o período) e o filtro não achou nada (limpe o filtro).

Versão na tela

O rodapé mostra a versão instalada. Quando algo der errado, é a primeira coisa que eu vou perguntar.


Para quem mexe no código: a divisão de lançamento cria um risco novo, uma consulta que esqueça de excluir o lançamento-pai conta o valor duas vezes, e o erro é invisível porque o total só fica maior. Existe agora o predicado ACTIVE_TX em lib/db.js e um teste que varre app/ e lib/ procurando quem filtre deleted_at sem ele.

v4.2.0

Choose a tag to compare

@itjuanpablo itjuanpablo released this 29 Jul 20:16

Changelog 📥

[4.2.0] — 29/07/2026

Categorização funcional e um banco estrangeiro novo

Corrigido: nada estava sendo categorizado

Toda transação importada caía em "A revisar", em qualquer idioma. O app importava, somava certo e simplesmente não reconhecia nada — parecia que a categorização automática não servia.

A causa era uma variável trocada no código de importação, que fazia o categorizador receber a descrição vazia. Não dava erro em lugar nenhum: por isso passou pelos testes, que checavam a leitura do arquivo e não o caminho completo.

Depois de atualizar, as transações antigas continuam em "A revisar". Para recategorizar sem refazer nada: abra Gerenciar › Lançamentos, use a revisão em massa e corrija um comércio de cada tipo — a regra aprendida se aplica ao resto de uma vez.

Corrigido: instalação em espanhol usava o dicionário brasileiro

Quem escolhia espanhol no seletor 🌐 continuava sendo categorizado por palavras brasileiras. "MONOTRIBUTO", "SUPER MAMI", "IMP. AFIP" caíam todos em "Por revisar". Só funcionava para quem tinha configurado o idioma no arquivo antes de abrir o app pela primeira vez — ou seja, quase ninguém.

Você pode ensinar o que é transferência interna

Dinheiro que sai de uma conta sua para outra conta sua não é despesa nem receita, mas nem sempre o app reconhece — uma transferência recebida da sua própria conta em outro banco é indistinguível de um pagamento que você recebeu.

Antes não havia o que fazer: mudar a categoria alterava o gráfico e não alterava o total do mês, com duas telas discordando. Agora, marcar um lançamento como Transferências já o tira dos totais, e a regra aprendida vale também para as próximas importações.

Num extrato real isso mudou a renda do mês de R$ 463.330 para R$ 26.000 — a diferença entre um número sem sentido e um número.

Banco estrangeiro novo

Extratos de conta no formato "Últimos movimientos" passam a ser lidos. Esse layout escreve o valor negativo de um jeito diferente (-$ 1.234,56), e ler errado importaria despesa como receita — por isso a importação confere o saldo de cada linha contra o que o documento declara e recusa o arquivo se algum elo não fechar.

Categorização argentina reconhece agora monotributo, impostos da AFIP e capitalização de poupança (que é receita, não transferência).

Instalação em um comando

git clone <repo> ~/Fluxo && cd ~/Fluxo && bash scripts/instalar.sh

Confere a versão do Node, instala as dependências exatas, pergunta o idioma e roda a bateria de testes antes de liberar o uso. Se algum teste falhar, ele para e avisa para não importar extratos ainda.

Também nesta versão

  • Parcelas futuras deixaram de perder o último mês do compromisso.
  • Desfazer importação agora faz backup antes e avisa quantos lançamentos você
    tinha editado à mão — eles não voltam reimportando o arquivo.
  • O serviço não fica mais exposto na rede. Até a v4.1 ele subia em todas as interfaces: qualquer aparelho no mesmo wifi abria suas finanças sem senha. Agora escuta só em 127.0.0.1. Se você instalou o serviço antes, rode bash scripts/instalar-autostart.sh de novo.
  • Vencimentos e relatórios não erram mais o dia quando usados à noite.
  • Backup que falha agora avisa, em vez de parar em silêncio.

v4.1.0

Choose a tag to compare

@itjuanpablo itjuanpablo released this 28 Jul 03:30

Changelog 📥

[4.1.0] — 27/07/2026

🔄 🇪🇸🇺🇸🇧🇷 - Trocar de idioma pela tela e ler arquivo de qualquer banco

Botão de idioma no cabeçalho

O 🌐 no topo abre idioma e moeda. A escolha vale na hora — sem editar arquivo, sem reiniciar o servidor — e fica salva no seu banco, então continua valendo na próxima vez que abrir.

A moeda é um campo separado, e isso é de propósito. Seus lançamentos são guardados em centavos, sem moeda nenhuma junto. Se trocar o idioma trocasse a moeda automaticamente, um saldo de R$ 1.000 passaria a aparecer como $ 1.000 em pesos: o mesmo número, com outro significado, sem nada ter sido convertido. Trocar o idioma muda texto, mês e formato de data; a moeda só muda se você mudar.

Lê arquivo de banco brasileiro e estrangeiro (teste com Mercado Pago - Argentina) sem tropeçar na formatação

Um punhado de detalhes chatos que faziam extrato bom ser lido errado:

Acentuação. Extrato de banco costuma vir em Windows-1252, não em UTF-8. Antes, "Transferência" virava "Transferência" — e entrava assim no banco de dados. Agora a codificação é detectada (inclusive quando o arquivo mente sobre qual usa) e o texto entra íntegro.

Separadores e datas. O leitor de CSV decide o formato olhando a coluna inteira, não cada célula isolada: se qualquer valor da coluna usa vírgula decimal, a coluna toda é lida no padrão brasileiro/argentino; se alguma data tem dia acima de 12, a ordem dia/mês fica definida para todas as linhas. Também aceita ponto e vírgula, vírgula, tabulação e barra vertical como separador, campo entre aspas com vírgula dentro, valor negativo entre parênteses ou com sinal à direita, colunas separadas de débito e crédito, e o espaço invisível que alguns bancos colocam no meio dos números.

Linhas que não são transação. Preâmbulo, cabeçalho repetido a cada página, saldo, subtotal e rodapé deixam de ser importados como lançamento. No OFX, a linha "SALDO ANTERIOR" que alguns bancos emitem disfarçada de transação aparecia como uma receita do tamanho do seu saldo.

Conferência por saldo. Quando o arquivo traz saldo, o app reconstrói a sequência inteira e confere: saldo inicial + lançamentos = saldo final. Se não fechar, ele avisa em vez de gravar. Foi esse tipo de checagem que pegou um erro que a simples soma de totais deixava passar.

Você vê quem leu o arquivo. A importação informa qual banco foi reconhecido, com que confiança e em que codificação — para você saber quando desconfiar.

Correção

Renomear uma categoria padrão passou a valer também na resposta da API, que ntes podia mostrar o nome traduzido enquanto a tela mostrava o seu.

Para quem mexe no código

Idioma e moeda vivem na tabela settings (esquema v5, criada automaticamente). Nada de formatação pode ser calculado na carga do módulo — um Intl no topo do arquivo passa no teste da primeira execução e mente na segunda; node scripts/testar idioma.mjs existe justamente para pegar isso. A suíte dos leitores de arquivo foi de 166 para 229 verificações.





v4.0.0

Choose a tag to compare

@itjuanpablo itjuanpablo released this 28 Jul 03:26

Changelog 📥

[4.0.0] — 27/07/2026

🇪🇸 Espanhol, mais bancos e categorias que não quebram ao renomear

Esta versão faz três coisas: ensina o Fluxo a falar espanhol, amplia bastante os bancos reconhecidos na importação e conserta um problema antigo de arquitetura que só aparecia quando você renomeava uma categoria.

O Fluxo passou a falar espanhol

Espanhol rioplatense de verdade (voseo: arrastrá, elegí, cargá) e vocabulário financeiro correto — a fatura do cartão é resumen, lançamento é movimiento, parcela é cuota. Junto com o texto muda a moeda, o formato de número e data, os nomes das categorias, o dicionário de categorização automática (o app não vai adivinhar "Ecogas" com um dicionário brasileiro) e
os perfis de banco preferidos na detecção.

Na v4.0 o idioma era escolhido num arquivo de configuração. Desde a v4.1 há um botão na tela.

Muito mais bancos reconhecidos

Antes, só o PDF do Mercado Pago era entendido de verdade; o resto caía num leitor genérico de CSV que funcionava "na sorte" do cabeçalho. Agora existe uma lista de perfis, e o Fluxo identifica o arquivo pelo conteúdo:

  • Brasil: Nubank (extrato e fatura, que têm formatos diferentes), Itaú, Bradesco, Banco do Brasil, Inter, C6 e o Mercado Pago.
  • Argentina: Mercado Pago, Galicia, Santander, BBVA, Brubank, Ualá e Naranja X.

**Cada perfil é honesto sobre o quanto se pode confiar nele.**Os conferidos contra um arquivo real estão marcados como confiança alta. Os montados a partir da documentação do formato só são aceitos quando o nome do banco aparece no arquivo — e, se nada casar, o Fluxo usa o leitor genérico em vez de arriscar. A regra que guiou tudo: em dado financeiro, errar calado é pior do que não
reconhecer
.

Renomear categoria não bagunça mais nada

Até então o nome da categoria era também o identificador dela. Renomear "Renda" para "Salário" obrigava o Fluxo a reescrever o nome em todas as transações, regras e metas — e qualquer parte do programa que ainda esperasse "Renda" parava de funcionar em silêncio.

Agora cada categoria tem um identificador interno que nunca muda:

  • renomear é instantâneo e não toca em nenhum lançamento;
  • as categorias que você criou nunca são traduzidas — o nome que você escolheu
    é o que fica;
  • renomear uma categoria padrão faz o Fluxo entender que a sua escolha vale mais
    que a tradução dele.

A conversão do banco é automática, numa única operação, depois de salvar uma cópia em data/backups/fluxo-pre-v4-*.db. Se algo der errado, nada é alterado.

A conversão reconhece os nomes originais do Fluxo. Se você renomeou uma categoria padrão antes de atualizar, ela vira categoria sua — funciona, mas o app perde o significado dela. Para corrigir:

node scripts/remapear-categoria.mjs --listar        # ver o que tem
node scripts/remapear-categoria.mjs salario income  # ensaio, não grava
node scripts/remapear-categoria.mjs salario income --aplicar

Correções

Transferência para você mesmo não é despesa. Dinheiro que você manda da sua conta para outra conta sua era contado como gasto e inflava a projeção do mês.

Parcelas em extratos em espanhol. O rótulo era procurado só em português; num extrato em espanhol ("cuota 2/6"), as parcelas futuras não eram detectadas, o ciclo da fatura saía errado e o agrupamento de regras falhava — sem dar erro.

Data de geração do PDF virando transação. O rodapé do extrato traz a data em que o arquivo foi gerado, no mesmo formato de uma data de lançamento. O leitor confundia as duas e engolia a transação seguinte, gravando a data de emissão e o endereço da empresa no lugar da data e do estabelecimento reais. O mais desconfortável: as somas continuavam corretas, porque o valor estava certo — o erro passava por qualquer conferência de total.


Próxima versão — planejado

Mais bancos, à medida que houver extratos reais para conferir. A estrutura já aceita: adicionar banco é acrescentar um perfil declarativo, não escrever código de leitura. O que falta é arquivo — a prioridade é fatura de cartão, que é o que o app entende menos e onde estão as parcelas.

v3.2.0

Choose a tag to compare

@itjuanpablo itjuanpablo released this 28 Jul 00:08

Changelog 📥

[3.2.1] — 13/07/2026

📲 Polimento visual

  • Fonte Inter embutida via next/font (sem dependencia do sistema);
  • Animacao de entrada nos modais e pulso no carregamento;
  • Focus rings acessiveis em botoes, links e inputs;
  • Micro-interacoes: active scale, hover lift nos insights;
  • Scrollbar fina tematizada; transicao suave no modo privacidade.

v3.1.1

Choose a tag to compare

@itjuanpablo itjuanpablo released this 13 Jul 23:43

Changelog 📥

[3.1.1] — 13/07/2026

📲 Melhorias de responsividade mobile

  • Bottom nav (Inicio/Faturas/Evoluir/Gerenciar) no celular, com aba ativa destacada e safe area da barra de gestos.
  • Removidos do header mobile os botões redundantes que causavam scroll horizontal e larguras quebradas.
  • Header mobile mais enxuto: logo, mês, privacidade e tema.