Bump de dependências: next 16.2.6, react/react-dom 19.2.6, react-day-picker 10 (major), tailwindcss/postcss 4.3.0, tailwind-merge 3.6.0, better-auth 1.6.10, ai-sdk (anthropic/google/openai), aws-sdk S3 3.1045, resend 6.12.3, biome 2.4.15, knip 6.12.2, @types/node 25.6.2. Changelog: número de versão em text-lg e padding do card de resumo aumentado para p-6 para melhor leitura na linha do tempo. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
102 KiB
Changelog
Todas as mudanças notáveis deste projeto serão documentadas neste arquivo.
O formato é baseado em Keep a Changelog, e este projeto adere ao Versionamento Semântico.
[2.5.6] - 2026-05-07
Esta versão entrega um conjunto de melhorias em torno do fluxo de lançamentos: filtros mais úteis, divisão por porcentagem, indicador de orçamento dentro do modal e correção de um bug em totais por pessoa que considerava contas excluídas do saldo. Também inclui ajustes de robustez no display da calculadora (sem mais overflow do modal com valores longos) e o fix do cache de RSC nos filtros multi-seleção.
Adicionado
- Lançamentos: filtro por faixa de valor (mín/máx) com debounce e persistência via query string (
amountMin/amountMax). - Lançamentos: botão "Limpar" discreto ao lado do botão "Filtros", visível apenas quando há filtros ativos.
- Modal de lançamento: toggle compacto R$/% no card "Dividir lançamento", permitindo distribuir o valor por porcentagem entre as pessoas. Cada input em modo % exibe o valor convertido em R$ logo abaixo, no mesmo padrão visual do
InlinePeriodPicker. - Modal de lançamento: indicador de orçamento ao lado do nome da categoria selecionada, mostrando
R$ gasto de R$ orçado (%)com cores semânticas (verde / âmbar / vermelho) conforme o consumo. Suprimido quando o input divide a linha com o tipo de transação (caso pré-lançamentos). Implementado viagetCategoryBudgetSummaryActionefetchCategoryBudgetSummaryemfeatures/budgets.
Alterado
- Calculadora: display com tamanho de fonte adaptativo (de
text-3xlatext-sm) conforme o comprimento da expressão, maistruncatefuncional viamin-w-0nos containers flex. Resolve o overflow do modal com valores muito longos (ex:9.999.999.999 × 9.999.999.999).
Corrigido
- Pessoas: "Totais do mês" em
/payers/[id]deixa de somar lançamentos vinculados a contas marcadas comoexcludeFromBalance(ex: "Ajuste de saldo"). AdicionadoexcludeTransactionsFromExcludedAccounts()em 6 queries desrc/shared/lib/payers/details.ts. - Orçamentos:
fetchBudgetsForUserefetchCategoryBudgetSummaryagora respeitam o filtro de contas excluídas do saldo, alinhando o gasto exibido na tela de Orçamentos com o badge de orçamento dentro do modal de lançamento. - Lançamentos: tabela de resultados agora reflete corretamente a remoção de um valor em filtros multi-seleção (Pessoa, Conta/Cartão, Categoria, Condição, Forma de Pagamento). Adicionado
router.refresh()emhandleMultiFilterChangepara invalidar o cache de segmento do router (issue #54).
Dependências
- Stack core:
next16.2.4 → 16.2.6,react/react-dom19.2.5 → 19.2.6. - UI:
react-day-picker9 → 10 (major),tailwindcss/@tailwindcss/postcss4.2.4 → 4.3.0,tailwind-merge3.5.0 → 3.6.0. - Auth:
better-auth1.6.9 → 1.6.10 e@better-auth/passkey1.6.9 → 1.6.10. - AI SDKs:
@ai-sdk/anthropic3.0.74 → 3.0.76,@ai-sdk/google3.0.67 → 3.0.71,@ai-sdk/openai3.0.60 → 3.0.63,ai6.0.175 → 6.0.177. - AWS:
@aws-sdk/client-s3e@aws-sdk/s3-request-presigner3.1042.0 → 3.1045.0. - E-mail:
resend6.12.2 → 6.12.3. - Dev tooling:
@biomejs/biome2.4.14 → 2.4.15,knip6.11.0 → 6.12.2,@types/node25.6.0 → 25.6.2.
[2.5.5] - 2026-05-06
Esta versão melhora a navegação por históricos e lançamentos. O changelog ganhou uma linha do tempo mais leve, colapsável e fácil de escanear; os filtros de lançamentos passam a aceitar múltiplas pessoas, categorias, formas de pagamento, condições e contas/cartões na mesma busca; e os diálogos adotam as animações compartilhadas do design system. Também há pequenos polimentos de texto e layout para deixar a interface mais consistente.
Adicionado
- Lançamentos: filtros multi-seleção para condição, forma de pagamento, pessoa, categoria e conta/cartão, permitindo combinar vários valores no mesmo filtro (query string passa a aceitar múltiplos valores por chave).
- Changelog: parser passou a inferir o tipo de bump (major/minor/patch) a partir da numeração e a extrair o parágrafo de resumo abaixo do cabeçalho de versão; novo arquivo
src/features/settings/lib/changelog-types.tsconsolidando os tipos compartilhados. - UI: dependência
tw-animate-csspara usar as mesmas animações utilitárias já presentes nos componentes shadcn/ui.
Alterado
- Changelog: visual da página reformulado para linha do tempo com resumo sempre visível, detalhes colapsáveis por versão, agrupamento por mês e marcadores visuais por tipo de bump; componente migrado para
"use client"comCollapsiblee abertura via âncora (#vX-Y-Z). - Lançamentos: botões "Nova Receita" e "Nova Despesa" agora usam os próprios triggers do
TransactionDialog(via propcreateSlot), reduzindo estado manual na página e eliminando o fluxosetCreateOpen+transactionTypeForCreate. - Diálogos: animações customizadas em CSS (
@keyframes dialog-in/outeoverlay-in/out) substituídas pelas classes utilitárias compartilhadas emDialog/DialogOverlay(data-[state=open]:animate-in,zoom-in-95,fade-in-0). - BulkActionDialog: label do escopo "Todas as pessoas" passa a indicar a parcela atual (
Todas as pessoas desta parcela (N/Total)) com descrição mais clara sobre o efeito da ação. - Checkbox:
RiCheckLine/RiSubtractLineagora herdamtext-currentpara alinhar com a cor do indicator nativo. - Landing page: remoção de fundos alternados (
bg-muted/40) nas seções "Funcionalidades", "Stack" e "Para quem é" para uma leitura visual mais limpa. - Navbar: aviso de atualização passa a usar o texto "Versão X disponível".
[2.5.4] - 2026-05-06
Esta versão é uma faxina arquitetural de larga escala sem nenhuma mudança visível ao usuário. Removido código morto, padronizamos identificadores em inglês conforme a convenção do projeto, simplificamos o barrel de Server Actions e consolidamos os arquivos de helpers/queries soltos nas raízes das features dentro de pastas lib/. O resultado é uma estrutura previsível e consistente entre features (actions.ts, queries.ts, actions/, components/, hooks/, lib/) e um saldo líquido de −428 linhas de código com zero impacto em comportamento, performance ou banco de dados.
Alterado
- Padronização da estrutura de
transactions/: 14 helpers soltos na raiz movidos paralib/; barrelactions.tsreduzido de 76 linhas de wrappers redundantes para 14 linhas de re-exports puros;anticipation-actions.tsmovido paraactions/anticipation.ts. - Reorganização de
dashboard/: 8 helpers soltos consolidados emdashboard/lib/; orquestradores (fetch-dashboard-data.ts,page-data-queries.ts) permanecem na raiz como entry points. - Reorganização de
reports/: 5 query files na raiz consolidados emreports/lib/. - Reorganização de
payers/: god filedetail-actions.ts(21KB) edetail-queries.tsmovidos parapayers/lib/. shared/components/: 9 dos 16 componentes soltos agrupados em 3 novas subpastas temáticas (brand/,widgets/,feedback/).shared/lib/fetch-json.tsmovido parashared/utils/fetch-json.ts(categorização correta — utilitário genérico de transporte HTTP).- Padronização EN dos identificadores remanescentes: 4 constantes globais (
LANCAMENTOS_*→TRANSACTIONS_*), 12 tipos/interfaces (Lancamento*/Pagador*/Estabelecimento*→ equivalentes em EN), 13 funções/components exportados (fetchPagador*,EstabelecimentoInput,PagadorInfoCard, etc.), 5 props cross-file (preLancamentosCount→inboxPendingCount, etc.). - Server Actions de
insights/simplificadas: barrel reduzido para re-exports puros. - Mantidas intencionalmente em PT-BR conforme exceção do
CLAUDE.md: variáveis locais (pagador,categoria,lancamento), accessor keypagadorName(persistida em preferências do usuário), strings de UI.
Removido
- 14 funções/constantes mortas verificadas via
grepem todo o repo:validateCategoriaOwnership,getInstallmentAnticipationsAction,getAnticipationDetailsAction,formatDecimalForDb,currencyFormatterNoCents,optionalDecimalSchema,formatMonthLabel,getGoalProgressStatusColorClass,MONTH_PERIOD_PARAM,calculateRemainingInstallments, e 5 funçõesfetch*não usadas eminbox/queries.ts. - 1 tipo morto:
ImportRowemtransactions/actions/import-action.ts. - 2 tipos órfãos consequentes:
InstallmentAnticipationWithRelations,GoalProgressStatus(este último convertido em interno). - ~30
exportkeywords desnecessários (símbolos usados apenas no próprio arquivo) — visibilidade reduzida sem mudar comportamento. - Re-exports mortos em barrels:
EstablishmentLogoPickerementity-avatar/index.ts,CategoryReportSkeletoneWidgetSkeletonemskeletons/index.ts,toNameKeyemestablishment-logo-queries.ts. - Arquivo
features/reports/types.ts(barrel inteiro era órfão — todos os 5 tipos eram importados direto de@/shared/lib/types/reports).
[2.5.3] - 2026-05-05
Esta versão foca em polimento do diálogo de detalhes do lançamento, refresh visual da linha do tempo de parcelas e limpeza terminológica em torno de contas/cartões inativos. O diálogo de detalhes ganhou logo da conta/cartão, ícone colorido por categoria e avatar do responsável; a barra de progresso de parcelas foi redesenhada num layout horizontal compacto; e o widget "Minhas Contas" do dashboard passou a ocultar automaticamente contas marcadas como inativas. Internamente, o termo "arquivadas" foi padronizado como "inativas" nas tabs de contas e cartões, surgiram constantes compartilhadas para formas de pagamento liquidáveis e um helper isAccountInactive, e o seed de mock data ganhou cobertura mais realista (novas pessoas, contas, cartões e assinaturas recorrentes).
Adicionado
- Logo da conta/cartão, ícone colorido por categoria e avatar do responsável no diálogo de detalhes do lançamento.
- Constantes
SETTLEABLE_PAYMENT_METHODSeCREDIT_CARD_PAYMENT_METHODemfeatures/transactions/constants.ts. - Helper
isAccountInactive(status)emshared/lib/accounts/constants.ts, reaproveitado emaccount-card.tsxemy-accounts-widget.tsx.
Alterado
- Widget "Minhas Contas" do dashboard agora oculta contas inativas (filtra antes de aplicar a regra de "não consideradas") e ajusta o empty state quando o usuário só tem contas inativas.
- Linha do tempo de parcelas (
InstallmentTimeline) redesenhada: layout horizontal com barra de progresso, datas de compra e quitação alinhadas nas pontas e contador "N restante(s)" / "Última parcela" abaixo. - Diálogo de detalhes do lançamento: badge de status "Pendente" virou "Em aberto" com variante
info, "Resumo" virou "Total" e ID do lançamento passou a exibir o UUID completo em fonte monoespaçada (sem truncar). - Tabs em contas e cartões: "Arquivadas/Arquivados" renomeadas para "Inativas/Inativos".
- Legenda do calendário envolvida em
Cardpara destacar visualmente do conteúdo da página. - Páginas
cards,categories,inbox,notes,payersperderamitems-startno<main>(alinhamento natural à largura total);calendarajustou gap de 3 para 4. - Tabela de lançamentos: extraído IIFE de payment-method dos botões de liquidação com as novas constantes compartilhadas; bloco logo+label da coluna Conta/Cartão deduplicado via reuso de variável JSX; removido
capitalizeredundante do label "Venc.". - Mock data renovado em
scripts/mock-data.ts: novas pessoas (Mario), novas contas (Itaú Personnalité, Banco Inter), novo cartão Inter Black, e cobertura mais ampla de assinaturas recorrentes (Vivo, Sabesp, Disney+, HBO Max, Amazon Prime, OpenAI, Apple iCloud, Notion, YouTube Premium).
Removido
- Comentário narrativo
{/* Opções de Antecipação */}emtransactions-columns.tsx. - Helper local
shortTransactionIdemtransaction-details-dialog.tsx(substituído pela exibição do UUID completo).
[2.5.2] - 2026-05-04
Esta versão traz melhorias visuais e de usabilidade em contas, lançamentos, orçamentos, cartões e anotações: novos tipos de conta, ícones no seletor, feedback visual de limite excedido nas progress bars e refinamentos nos ícones de tarefas em anotações.
Adicionado
- Novos tipos de conta
"Dinheiro"e"Outros"na lista padrão do diálogo de contas (issue #50). - Ícones por tipo de conta no seletor (Conta Corrente, Poupança, Carteira Digital, Investimento, Pré-Pago, Dinheiro, Outros).
- Filtro automático: ao selecionar
"Dinheiro"como forma de pagamento em lançamentos, o select de conta exibe apenas contas do tipo"Dinheiro". - Sinal
+no valor de transferências recebidas na tabela de lançamentos (mantém cor azul).
Alterado
- Forma de pagamento de novas transferências entre contas alterada de
"Pix"para"Transferência bancária". - Progress bar de orçamentos excedidos agora exibe indicador e fundo na cor
destructive. - Progress bar de cartões com 100% do limite utilizado agora exibe indicador e fundo na cor
destructive. - Ícone de tarefa não concluída no card e no modal de detalhes de anotações substituído por
RiSubtractLine(locais sem interação de marcação).
[2.5.1] - 2026-05-04
Versão de correção pontual focada na exibição do indicador de anexo nas tabelas de lançamentos da fatura do cartão. Em /cards/[cardId]/invoice, lançamentos com anexos não mostravam o ícone porque o fetcher dedicado da fatura não calculava o flag hasAttachments. A primeira tentativa de adicionar o EXISTS via extras na query relacional gerou SQL inválido (Drizzle re-aliasava transactionAttachments.transactionId para o alias da tabela externa). A correção definitiva troca o fetcher pela função compartilhada fetchTransactionsWithRelations de features/transactions, que já implementa o EXISTS corretamente via select.
Corrigido
- Ícone de anexo voltou a aparecer na tabela de lançamentos da fatura do cartão (
/cards/[cardId]/invoice).fetchCardTransactionsemfeatures/invoices/queries.tsagora delega parafetchTransactionsWithRelations, garantindo que o flaghasAttachmentsseja preenchido com a mesma EXISTS subquery usada no restante do app.
[2.5.0] - 2026-05-01
Esta versão melhora o fechamento de faturas, a correção de lançamentos já registrados e a conferência de saldos contra o extrato do banco. O novo ajuste de fatura fecha a conta entre o total calculado pelo sistema e o valor real cobrado pelo banco, sem exigir que o usuário reabra lançamentos individuais. A mesma ideia foi estendida para contas correntes: na página do extrato, ao lado de "Saldo ao final do período", o usuário informa o saldo real e o sistema cria (ou atualiza) um lançamento de ajuste no período visualizado. Também entra o fluxo de reembolso para despesas à vista: pelo menu de ações do lançamento, o usuário informa a data do reembolso e o sistema cria uma receita espelhada no extrato ou na fatura correta. O widget de boletos do dashboard ganhou paridade com o widget de faturas — confirmação de pagamento agora pede conta de origem e data antes de quitar o boleto. Por fim, o limite do cartão passou a ser obrigatório e o sistema bloqueia despesas em cartão que ultrapassem o limite disponível, retornando uma mensagem com o valor exato disponível. As operações mantêm rastro no lançamento gerado e respeitam a proteção de faturas já pagas.
Adicionado
- Nome do boleto no widget de Boletos agora é um link para
/transactions?q=<nome>, incluindo?periodo=<mes-ano>automaticamente quando o período selecionado não é o atual. ÍconeRiExternalLinkLineao lado do nome, igual ao padrão do widget de Faturas. - Botão "Ajustar fatura" ao lado do valor na página da fatura.
- Dialog
AdjustInvoiceDialogcom input de valor correto e preview da diferença. - Action
adjustInvoiceActionque faz upsert/delete idempotente do lançamento de ajuste. - Botão "Ajustar saldo" ao lado do valor na página do extrato da conta.
- Dialog
AdjustBalanceDialogcom input do saldo correto e preview da diferença que será lançada (receita ou despesa). - Action
adjustAccountBalanceActionque faz upsert/delete idempotente do lançamento de ajuste por(accountId, period). - Opção "Reembolso" no dropdown de ações de despesas à vista, posicionada após "Copiar" e antes de "Remover".
- Dialog
RefundTransactionDialogcom seleção da data do reembolso e indicação do período de destino. - Action
refundTransactionActionque cria uma receita de reembolso vinculada ao lançamento original. - Constantes compartilhadas
INVOICE_ADJUSTMENT_NAME,ACCOUNT_BALANCE_ADJUSTMENT_NAME,REFUND_NOTE_PREFIXebuildRefundNote()emshared/lib/accounts/constants.ts. - Validação de limite de cartão:
validateCardLimit()emtransactions/actions/core.tscalcula o uso atual do cartão (somando lançamentos não quitados, com a mesma regra usada emcards/queries.tspara recorrentes) e bloqueia criação ou edição de despesa em cartão que ultrapasse o disponível, retornando "Lançamento de R$ X excede o limite disponível do cartão (R$ Y)." - Schema reutilizável
requiredDecimalSchema(fieldName)emshared/lib/schemas/common.ts— número/string positiva (> 0) com mensagens parametrizáveis.
Alterado
- Limite do cartão é obrigatório: campo
limiteemcartoesganhouNOT NULL DEFAULT 0no schema, validação Zod comrequiredDecimalSchema("limite"), atributorequiredno input do formulário e checagem client-side antes do submit. TiposCard.limiteCard.limitAvailabledeixam de ser nullable; branch "Ainda não há limite registrado" foi removido decard-item.tsxe a derivação defensiva emcards/[cardId]/invoicefoi simplificada. - Migration
0029_friendly_spitfire: preenche com0registros legados antes doSET NOT NULLpara não quebrar bancos com cartões sem limite. - Métricas principais passam a tratar reembolsos como abatimento de despesa, não como receita comum.
- Cards de receitas/despesas, série histórica do dashboard e resumo do extrato agora preservam o efeito líquido do reembolso no balanço sem inflar entradas e saídas.
- Pagamento de fatura agora abre confirmação com conta de origem selecionável; por padrão vem a conta vinculada ao cartão, mas o usuário pode escolher outra conta antes de confirmar.
- Widget de faturas no dashboard ganhou a mesma confirmação: o modal "Confirmar pagamento" agora pede conta de origem e data antes de marcar a fatura como paga, alinhando o comportamento ao da página de fatura.
- Widget de boletos no dashboard ganhou a mesma paridade: o modal "Confirmar pagamento" passou a oferecer seleção de conta de pagamento e data do pagamento, com mesma estrutura de cards de detalhes, métricas, separator e formulário condicional do widget de faturas.
toggleTransactionSettlementActionagora aceitapaymentAccountIdepaymentDateopcionais para boletos — quando informados, atualiza aaccountIddo lançamento e usa a data escolhida emboletoPaymentDate(em vez da data atual).DashboardBillpassa a exporaccountIdpara que o dialog inicialize a conta com o valor já vinculado ao boleto.- Widget "Lançamentos por Categorias" agora ignora a categoria "Transferência interna" — transferências entre contas próprias deixam de poluir o ranking de categorias.
Corrigido
- Erro de hidratação no widget de Anotações:
Intl.DateTimeFormatsemtimeZoneusava o fuso do servidor (UTC) no SSR e o fuso do browser (BRT) no cliente, resultando em datas divergentes. Ambos os formatters passam a usartimeZone: "America/Sao_Paulo"explicitamente. - Extrato da conta agora contabiliza transferências internas nos cards de Entradas e Saídas: transferência recebida soma em Entradas, transferência enviada soma em Saídas. Antes o saldo final refletia o movimento mas os cards permaneciam zerados, gerando inconsistência visível na tela (issue #47).
Removido
- Seção "Veja o que você pode fazer" (galeria de screenshots com abas) da landing page, junto com o componente
ScreenshotTabs, as 14 imagenspreview-*.webp, o blocoscreenshotsemimages.ts, o link#telasdo nav e o exportpwaCompatListsem uso. - Exports mortos
dateFormatteremonthFormatterdefeatures/transactions/formatting-helpers.ts.
[2.4.4] - 2026-04-27
Esta versão remove a dependência da extensão pgcrypto do PostgreSQL para a geração do share_code em pagadores. O default a nível de banco (gen_random_bytes) foi removido — agora a aplicação gera o código sempre via crypto.randomBytes do Node.js, num utilitário compartilhado. A consequência prática é que o setup inicial fica mais simples: não há mais script de habilitação de extensão, nem etapa extra no primeiro db:push, e bancos restaurados de dumps externos não precisam ter pgcrypto instalada. O script de backup também foi enxugado para gerar dumps focados nos schemas relevantes (public e drizzle), descartando os schemas internos do Supabase e eliminando os ~148 erros de restore em PostgreSQL padrão. Por fim, os logos da marca (ícone laranja e wordmark) foram vetorizados: as PNGs antigas foram substituídas por SVGs inline em componentes próprios e por arquivos .svg no public/, escalando perfeitamente em qualquer tamanho — inclusive nos PDFs exportados, que agora rasterizam o SVG em alta resolução.
Alterado
- Schema: coluna
share_codeempagadoresperdeu o defaultsubstr(encode(gen_random_bytes(24), 'base64'), 1, 24)— campo continuaNOT NULLe a aplicação passa a fornecer o valor explicitamente em todas as inserções - Pagadores: nova função utilitária
generateShareCode()emsrc/shared/lib/payers/share-code.ts(server-only) — usacrypto.randomBytes(18).toString("base64url").slice(0, 24) - Pagadores:
createPayerAction,ensureDefaultPagadorForUser,resetUserAppData(settings) emock-data.tsagora chamamgenerateShareCode()ao inserir um pagador - Backup:
scripts/backup.shagora dumpa apenas os schemaspublicedrizzle— schemas internos do Supabase (auth,realtime,storage,vault,graphql,graphql_public,extensions,pgbouncer) e suas extensions/roles deixam de poluir os dumps. Restaurações em PostgreSQL padrão passam a executar sem os ~148 erros derole/extension does not exist - Logo:
Logofoi quebrado em três arquivos —src/shared/components/logo.tsx(orquestrador),logo-icon.tsx(ícone laranja em SVG inline, viewBox0 0 200 200) elogo-text.tsx(wordmark em SVG inline, viewBox0 0 574.201 89.6). API pública (variant,invertTextOnDark,colorIcon,iconClassName,textClassName) preservada - Assets:
public/images/logo_small.pngelogo_text.pngsubstituídos porlogo_small.svgelogo_text.svg(comwidth/heightexplícitos para compatibilidade com<img>em canvas) - Exports:
loadExportLogoDataUrlagora carrega SVG e rasteriza no canvas a 4× a resolução natural antes de gerar o data URL — mantém nitidez quando o PDF amplia a imagem
Removido
- Pasta
scripts/postgres/(continhainit.sqleenable-extensions.ts) - Script
pnpm db:extensionsnopackage.json - Referências ao
pnpm db:extensionsno README public/images/logo_small.pngepublic/images/logo_text.png(substituídos pelos.svg)
Corrigido
- Migrations: conflito de numeração resolvido —
0027_fancy_reaperrenomeado para0028_fancy_reaper(o número 0027 já estava ocupado pelo arquivo órfão0027_glorious_mindworm); journal e snapshot atualizados - TS: removido
baseUrldotsconfig.jsonpara evitar erroTS5101(deprecação no TS 7) —moduleResolution: bundlerresolve ospathsrelativos ao própriotsconfig, dispensandobaseUrl
Documentação
- README: seção Backup atualizada — arquivos gerados agora especificam que apenas os schemas
publicedrizzlesão dumpados - README: seção Restore reescrita com o fluxo correto para banco Docker (
DROP SCHEMA public CASCADE+pg_restore --clean --if-exists --disable-triggers) - README: comando rápido de Docker Compose de backup/restore substituído por
pnpm backup - README: header passa a apontar para
logo_small.svg
[2.4.3] - 2026-04-25
Esta versão amplia o trabalho com lançamentos divididos: anexos passam a ser visíveis para pessoas com acesso compartilhado, a importação para conta própria copia os arquivos de forma independente e a edição ganha a opção de aplicar a alteração nos dois lados do par. Três caminhos de deleção foram corrigidos para não deixar arquivos órfãos no storage. Também traz refresh visual nos badges de tipo e radio buttons, prefetch server-side de logos para reduzir chamadas de API no dashboard, e ajustes pontuais no healthcheck do container e em rótulos da UI.
Adicionado
- Schema: coluna
split_group_id(uuid, nullable) emlancamentoscom índice(user_id, split_group_id)— liga as shares do mesmo evento de divisão - Split:
buildLancamentoRecordsatribui umsplitGroupIdúnico por cycle (parcelado, recorrente ou único) para ambas as shares - Split: edição cooperativa via
updateTransactionSplitPairAction— ao editar um lançamento dividido, novo dialogSplitPairDialogpermite escolher entre aplicar somente neste lado ou nos dois lados (nome, data, categoria e demais campos compartilhados; valor e payer permanecem por share) - Importação: "Importar para Minha Conta" agora copia os anexos do lançamento-fonte para a conta de quem está importando (novo arquivo, novo
userId, novofileKey— cópia independente via S3 CopyObject).createSchemaganhou campo opcionalimportFromTransactionId; helpercopyAttachmentsForImportvalida acesso à fonte via ownership direto oupayerShares - Importação: dialog "Importar para Minha Conta" exibe seção read-only "Anexos que serão copiados" listando os anexos do lançamento-fonte antes da confirmação
- Filtros: nova chave
isDividedna tabela de lançamentos — toggle "Somente divididos" no drawer de filtros mantém o estado na URL - Performance: prefetch server-side de mapeamentos Logo.dev no
/dashboard,/transactionse/payers/[payerId]— uma única query SQL em batch (fetchEstablishmentLogoMap) semeia o cache do React Query antes do primeiro render, eliminando os N requests para/api/logo/mapping
Alterado
- Anexos:
fetchTransactionAttachmentsefetchTransactionAttachmentsActionpassam a autorizar leitura por acesso à transação (direto ou viapayerShares), permitindo que pessoas com pagador compartilhado visualizem anexos de lançamentos divididos - Anexos: upload (
confirmAttachmentUploadAction) e detach em massa (detachAttachmentBulkAction) agora expandemtransactionIdspara incluir shares irmãs viasplitGroupId— o vínculo emtransaction_attachmentsé replicado para manter simetria - Anexos: delete/detach continuam restritos ao criador (sem alteração de escrita); dashboard (
fetchAttachmentsForPeriod) permanece listando apenas os anexos do próprio usuário - Migração: lançamentos divididos criados antes desta versão ficam com
split_group_idNULL e mantêm o comportamento antigo (anexos não visíveis para a contraparte); apenas splits novos são afetados - Storage:
deleteS3Objectpassa a ignorarNoSuchKeysilenciosamente — providers S3-compatíveis (ex.: Cloudflare R2) lançam esse erro ao deletar objeto inexistente, ao contrário do comportamento idempotente do S3 padrão - UI/Badges:
TransactionTypeBadgeredesenhado — substitui oStatusDotpor ícones direcionais (RiArrowRightDownLinereceita,RiArrowRightUpLinedespesa,RiArrowLeftRightLinetransferência), com borda visível, shadow sutil e variantes dark mode dessaturadas; rótulo "Transferência" abreviado para "Transf." - UI/Forms: indicador do
RadioGrouptrocado de círculo (RiCircleLine) por check (RiCheckLine) com fundo sólidoprimaryno estado selecionado - UI/Antecipação: tabela de seleção de parcelas reduzida de quatro para três colunas (estabelecimento + fatura + valor) — informações de parcela e vencimento absorvidas pela coluna do estabelecimento
- Tipografia: fonte Inter agora carrega explicitamente os pesos 500, 600 e 700 (antes derivava de 400)
- Deps: better-auth 1.6.5 → 1.6.9, @aws-sdk/client-s3 3.1032 → 3.1037, @tanstack/react-query 5.99.2 → 5.100.3, @biomejs/biome 2.4.12 → 2.4.13, tailwindcss 4.2.2 → 4.2.4, resend 6.12.0 → 6.12.2
Corrigido
- Anexos: deleção em massa por série (
deleteTransactionBulkAction) não chamava cleanup de storage — arquivos ficavam órfãos no S3 após apagar "este e futuros" ou "todos" de uma série parcelada/recorrente com anexo - Anexos: deleção múltipla por seleção (
deleteMultipleTransactionsAction) não chamava cleanup de storage — mesmo problema ao selecionar vários lançamentos com anexo e deletar em lote - Anexos: reset de conta em Ajustes (
resetUserAppData) não limpava o storage — todos os arquivos do usuário ficavam órfãos no S3 após a operação de zeragem - Página da pessoa (
/payers/[payerId]):fetchPagadorLancamentosagora calculahasAttachmentsviaEXISTS, fazendo o ícone de clipe aparecer na tabela de lançamentos (antes só aparecia em/transactions) - Categorias: mensagem de sucesso ao atualizar exibia "Category atualizada com sucesso." — corrigido para "Categoria atualizada com sucesso."
- Antecipação: rótulos "Category" e "Período" no dialog corrigidos para "Categoria" e "Fatura"
- Docker: healthcheck do container
appagora usa127.0.0.1:3000em vez delocalhost:3000, evitando connection timeout em hosts com IPv6 (resolvendo #44)
[2.4.2] - 2026-04-20
Esta versão é quase toda sobre organização e polimento. O código interno do Dashboard foi reestruturado — módulos espalhados pela raiz da feature foram agrupados em subdiretórios coesos e a arquitetura de widgets foi renovada com um novo widget-registry. A sidebar lateral foi aposentada em favor de uma navegação concentrada na navbar. A interface passou por um refinamento visual amplo: cards redesenhados, dark mode mais consistente e efeitos decorativos removidos para uma composição mais limpa. As imagens de preview da landing page foram atualizadas. Por fim, a integração com Logo.dev ganhou uma arquitetura mais segura — o token agora é lido apenas no servidor e nunca chega ao cliente. O conceito de "Pagador" foi renomeado para "Pessoa" em toda a interface.
Adicionado
- Dashboard: nova arquitetura de widgets com
widget-registry— módulos reorganizados em subdiretórios (bills/,invoices/,notes/,notifications/,overview/,payments/,goals-progress/,categories/) - Dashboard: novos componentes
category-breakdown-chart,category-breakdown-list,goals-progress-itemepercentage-change-indicator - Logo.dev:
server.tscomisLogoDevEnabled()ebuildLogoDevUrl()server-side;LogoDevProviderpropaga flagenabledpara Client Components - Scripts:
mockupadicionado aopackage.json(tsx scripts/mock-data.ts)
Alterado
- Nav: sidebar lateral removida — navegação unificada na navbar
- UI/Tema: raio de borda global 0.625rem → 0.7rem; ajustes finos em
--carde--border(light e dark) - UI:
DotPatternremovido do layout dashboard, tela de autenticação e landing page - UI: account-card redesenhado com cores de saldo (success/destructive) e tooltip para flags de exclusão
- UI: budget-card, card-item e componentes do calendário (day-cell, event-modal) com layout revisado
- UI: auth-card-shell simplificado (removido glassmorphism e blob animado)
- Landing: imagens de preview atualizadas;
mainFeatures+extraFeaturesunificados em grid único; dark mode nos botões de CTA - Navbar: dark mode corrigido no navbar-shell (
dark:bg-card,dark:border-b-border) - Logo.dev:
NEXT_PUBLIC_LOGO_DEV_TOKENrenomeado paraLOGO_DEV_TOKEN(agora lido em runtime server-side apenas) - UI: conceito "Pagador/Pagadores" renomeado para "Pessoa/Pessoas" em toda a interface — labels, títulos, toasts, mensagens de erro, cabeçalhos de tabela e exportações. Código, rotas (
/payers) e schema do banco (pagadores) permanecem inalterados; a divergência entre UI e código é intencional - Deps: next 16.2.3 → 16.2.4, better-auth 1.6.2 → 1.6.5, ai 6.0.159 → 6.0.168 e outros patches menores
- Notas/Tarefas: ícone de tarefa concluída em visualização (card e detalhes) simplificado para
RiCheckLineverde sem caixa; checkbox no modal de edição usa fundo e bordasuccesscom íconesuccess-foreground(claro no light, escuro no dark) - Notas/Detalhes: botões do footer reordenados ("Cancelar" à esquerda, "Alterar" primário à direita)
Removido
- Nav: componentes sidebar (
app-sidebar,nav-main,nav-secondary,nav-user,nav-link),sidebar.tsxeuse-mobile.ts - Dashboard: ~25 widgets monolíticos obsoletos (
inbox-widget,bills-widget,notes-widget,payers-widget,my-accounts-widgetetc.) - Dashboard: arquivos dispersos na raiz da feature movidos para subdiretórios (arquivos antigos removidos)
- CSS: variáveis
--data-7a--data-10removidas do tema - CI: build arg
NEXT_PUBLIC_LOGO_DEV_TOKENremovido doDockerfilee do workflowdocker-publish.yml— basta configurarLOGO_DEV_TOKENeLOGO_DEV_SECRET_KEYcomo variáveis de runtime no host (Coolify, Railway, etc.)
[2.4.1] - 2026-04-16
Versão pequena com refresh visual nas telas de autenticação (efeito blob com três círculos coloridos em movimento e card com glassmorphism), capitalização dos labels da navbar para melhor legibilidade e otimização do banco com 17 índices novos em foreign keys — evitando sequential scans em deletes em tabelas grandes como lancamentos. Corrigida regressão no postgres:18-alpine que recusava iniciar em instalações existentes; adicionada variável PGDATA no compose para preservar dados de quem já tinha o volume populado.
Adicionado
- UI/Auth: layout animado nas páginas de login e signup com efeito blob (3 círculos coloridos em movimento) e card com glassmorphism; layout compartilhado extraído para
app/(auth)/layout.tsxeliminando duplicação (PR #42) - DB: 17 índices em foreign keys — evita sequential scans em deletes nas tabelas pai. Impacto maior nas FKs de
lancamentos(conta_id, categoria_id, antecipacao_id), onde deletes emcategoriasantes provocavam full scan na tabela de lançamentos
Alterado
- UI/Navbar: labels capitalizados (Lançamentos, Categorias, Contas) em vez de caixa baixa — melhora legibilidade (PR #42)
Removido
- DB: 7 índices sem uso —
tokens_api_user_id_idx,cartoes_user_id_status_idx,contas_user_id_status_idx,pagadores_user_id_status_idx,pagadores_user_id_role_idx,dashboard_notification_states_user_id_archived_idx,antecipacoes_parcelas_series_id_idx(0 scans em 187 dias de estatísticas) - UI/Settings: tab de Integrações órfã removida (não tinha
TabsContentcorrespondente)
Corrigido
- Docker: container do PostgreSQL falhava ao iniciar em instalações existentes após atualização da imagem
postgres:18-alpine— entrypoint passou a recusar dados no caminho legado/var/lib/postgresql/data. Adicionada variávelPGDATAnodocker-compose.ymlpara fixar o caminho e preservar dados de quem já tinha o volume populado (resolve #41)
[2.4.0] - 2026-04-13
Esta versão integra o serviço Logo.dev para exibir automaticamente logos de marcas na coluna de estabelecimentos dos lançamentos, com picker manual para fixar o domínio quando a sugestão automática não acerta. As consultas vão por novas rotas de API (/api/logo/search e /api/logo/mapping) que servem como proxy seguro — a secret key fica server-side. Inclui também tabela própria establishment_logos com PK composta (user_id, name_key) para persistir as preferências por usuário.
Adicionado
- Estabelecimentos: integração com Logo.dev — logos automáticos de marcas exibidos na coluna de estabelecimentos nos lançamentos
- Estabelecimentos: picker de logo por estabelecimento — clique no avatar para buscar e fixar um domínio Logo.dev específico (salvo por usuário no banco)
- API: rotas
/api/logo/searche/api/logo/mapping— proxy seguro para Logo.dev Brand Search API (secret key server-side) e consulta de mapeamentos salvos - Schema: tabela
establishment_logoscom PK composta(user_id, name_key)para persistir preferências de logo por usuário
Corrigido
- Dev:
.env.exampleusava hostdbnoDATABASE_URL, causando erroEAI_AGAINao rodarpnpm devlocalmente — corrigido paralocalhost
Documentação
- README: tabela comparativa entre Perfil 1 (Usar) e Perfil 2 (Desenvolver) com diferenças de setup,
DATABASE_URLe instruções de atualização - README: seção "Variáveis de Ambiente" esclarecida — distingue contexto Docker (Perfil 1) de desenvolvimento local (Perfil 2)
- Logo.dev: crie uma conta em logo.dev para obter as chaves
NEXT_PUBLIC_LOGO_DEV_TOKENeLOGO_DEV_SECRET_KEY— plano gratuito inclui 500.000 requisições/mês
[2.3.8] - 2026-04-12
Refatoração do docker-compose.yml para virar standalone — agora basta um curl + docker compose up -d, sem dependências de arquivos externos ou profiles complexos. README reescrito em dois perfis claros (Usar com Docker e Desenvolver com hot-reload) e scripts npm reduzidos de 10 para 5.
Alterado
- Docker:
docker-compose.ymlrefatorado — removidos profiles, build e dependência de arquivo externo; compose agora é standalone (bastacurl+docker compose up -d) - Docker:
docker-entrypoint.shsimplificado — extensãopgcryptocriada via Node.js antes das migrations; loop de retry reescrito; removido hack@localhost → @db - Docker: scripts reduzidos de 10 para 5 —
docker:up,docker:db,docker:down,docker:logs,docker:update - Docs: README reestruturado em dois perfis claros — Usar (só Docker) e Desenvolver (hot-reload)
[2.3.7] - 2026-04-11
Esta versão amplia significativamente o dashboard com três novos widgets configuráveis (Anexos, Inbox, Tendências de Categoria), adiciona filtros úteis na tabela de lançamentos (por status de pagamento e por presença de anexo) e moderniza a tipografia substituindo a fonte local por Inter (Google Fonts, self-hosted pelo Next.js) — eliminando arquivos .woff2 do repositório. Pesos tipográficos foram padronizados para font-semibold em títulos, rótulos e valores monetários, e o card de grupo de parcelas foi redesenhado expandindo num dialog de detalhes com parcelas pagas/pendentes separadas. No backend, a CSP foi expandida para permitir preview de anexos PDF via S3, e o setup ganhou script install-deps.sh pra preparar servidores Ubuntu 24.04 limpos.
Adicionado
- Dashboard: novos widgets configuráveis — Anexos (resumo de arquivos do período), Inbox (snapshot de pré-lançamentos pendentes) e Tendências de Categoria
- Lançamentos: filtro por status de pagamento (somente pagos / somente não pagos) e filtro por presença de anexo
- Lançamentos: indicador visual no status de liquidação para lançamentos de cartão de crédito com fatura paga — exibe ícone verde com tooltip explicativo
- Scripts:
scripts/install-deps.sh— script de preparação para servidores Ubuntu 24.04 limpos (instala Docker, Node.js 22, pnpm via Homebrew) - Docker: variáveis
PUBLIC_DOMAIN,UMAMI_URL,UMAMI_WEBSITE_IDeUMAMI_DOMAINSpassadas ao container da aplicação nodocker-compose.yml
Alterado
- Fonte: substituída fonte local
AmericaporInter(Google Fonts, self-hosted pelo Next.js) — elimina arquivos.woff2do repositório - Tipografia: peso tipográfico padronizado de
font-mediumparafont-semiboldem títulos, rótulos e valores monetários em toda a interface - Parcelas: redesenho do card de grupo de parcelas — expandindo para dialog de detalhes com parcelas pagas/pendentes separadas
- Inbox: redesenho do card de pré-lançamento — logo maior, hierarquia tipográfica melhorada
- Lançamentos: filtros de tipo, condição e forma de pagamento agora usam slugs em URL (ex:
receitaem vez do valor literal com acentos) - Estabelecimento: popover de autocomplete agora respeita a largura do input ao abrir
- CSP: adicionado
frame-srcpara permitir preview de anexos PDF via S3
Corrigido
- Docker: corrigido crash loop no container com mensagem
exec /app/docker-entrypoint.sh: no such file or directorycausado por CRLF nodocker-entrypoint.shem ambientes Windows/WSL2 — adicionadosed -i 's/\r$//'no Dockerfile e.gitattributescomeol=lfpara scripts shell - S3: corrigido
Error: Region is missingao usar o app sem S3 configurado —S3_REGIONvazio (string vazia) não era tratado pelo operador??; substituído por||em todo os3-client.ts - i18n: corrigidas mensagens de erro que exibiam "Payer" em inglês em vez de "Pagador"
- Logos: corrigido modal seletor de logos de cartões e contas para renderizar miniaturas sem avisos de proporção
- Scripts:
install-deps.sh— spinner travava o script porwaitretornar código não-zero comset -eativo; corrigido com|| true - Scripts:
install-deps.sh— prompt interativo do corepack suprimido comCOREPACK_ENABLE_DOWNLOAD_PROMPT=0 - Scripts:
install-deps.sh— PATH do Homebrew não estava configurado na seção de resumo
Removido
- Scripts: removidos arquivos órfãos
scripts/dev.tsescripts/setup-env.sh(substituídos pelosetup.mjs) - Docker:
docker-compose.ymlagora funciona sem arquivo.env—DATABASE_URLtem valor padrão com credenciais de desenvolvimento - Docker:
docker-entrypoint.shconverte automaticamente@localhost:para@db:naDATABASE_URLao iniciar o container, eliminando a necessidade de usar hosts diferentes no.envpara desenvolvimento local e Docker
[2.3.6] - 2026-04-09
Correção pontual no Docker — adicionado NODE_PATH=/app/migrate/node_modules no entrypoint para o drizzle-kit resolver corretamente o drizzle-orm ao executar as migrations no container.
Corrigido
- Docker: adicionado
NODE_PATH=/app/migrate/node_modulesno entrypoint para que odrizzle-kitconsiga resolverdrizzle-ormao executar as migrations no container
[2.3.5] - 2026-04-07
Correção crítica na CSP: regra movida do next.config.ts (build time) para proxy.ts (runtime), desbloqueando uploads de anexos quando o S3_ENDPOINT ainda não estava disponível durante o build da imagem Docker.
Corrigido
- CSP: movido
Content-Security-Policydonext.config.ts(build time) paraproxy.ts(runtime), corrigindo bloqueio de upload de anexos quandoS3_ENDPOINTnão estava disponível durante o build do Docker
[2.3.4] - 2026-04-05
Correção pontual no upload de anexos — a CSP connect-src bloqueava o fetch para o storage, gerando NetworkError na hora de subir o arquivo.
Corrigido
- Anexos: corrigido upload que falhava com
NetworkError— CSPconnect-srcbloqueava fetch para o Storage
[2.3.3] - 2026-04-05
Correção do fluxo de tokens da API: /api/auth/device/verify voltou a aceitar tokens criados pela tela de Settings (revertido de JWT para hash lookup). O prefixo dos tokens também foi renomeado de os_ para opm_ (OpenMonetis) e rotas JWT não utilizadas foram removidas — usuários precisam recriar os tokens existentes.
Corrigido
- Tokens: corrigido
/api/auth/device/verifyque rejeitava tokens criados via Settings (revertido de JWT para hash lookup)
Alterado
- Tokens: prefixo renomeado de
os_paraopm_(OpenMonetis); tokens existentes precisam ser recriados - Tokens: removidas rotas JWT não utilizadas (
/api/auth/device/tokene/api/auth/device/refresh) - Tokens:
api-token.tssimplificado para conter apenashashTokeneextractBearerToken
[2.3.2] - 2026-04-04
Esta versão concentra hardening de segurança. Tokens da API ganharam expiração obrigatória de 1 ano (sem mais tokens eternos) e o refresh foi corrigido para validar JWT por assinatura. A CSP foi expandida com default-src, script-src, style-src, img-src, font-src e connect-src (no lugar de uma regra única ampla), e foi adicionada mitigação para CVE-2024-44294 desabilitando parsing de fórmulas em xlsx. Inclui ainda novos headers (Referrer-Policy, X-Permitted-Cross-Domain-Policies), respostas 401 JSON em vez de redirect 302 em rotas autenticadas, security.txt (RFC 9116) e correção de URL com protocolo duplicado no sitemap.
Segurança
- Tokens: removido aceite de tokens sem expiração (
expiresAt NULL); tokens criados via settings agora expiram em 1 ano - Tokens: corrigido refresh que sobrescrevia hash e invalidava access token anterior; verify agora valida JWT por assinatura
- xlsx: desabilitado parsing de fórmulas (
cellFormula: false) para mitigar CVE-2024-44294 - CSP: expandida Content-Security-Policy com
default-src,script-src,style-src,img-src,font-srceconnect-src - Headers: adicionados
Referrer-PolicyeX-Permitted-Cross-Domain-Policies - API: rotas autenticadas agora retornam
401 JSONem vez de redirect302para clientes não autenticados - Health: removido campo
versionda resposta do/api/health - robots.txt: simplificado para não expor mapa de rotas internas
- Sitemap: corrigida URL com protocolo duplicado (
https://https://) - Criado
security.txt(RFC 9116)
[2.3.1] - 2026-04-03
Correção pontual de infraestrutura — dependências do drizzle-kit passaram a ser instaladas em /app/migrate/ separadamente do node_modules do build standalone, corrigindo o erro Cannot find module 'next' no startup do container.
Corrigido
- Infraestrutura: deps do drizzle-kit agora são instaladas em
/app/migrate/separado donode_modulesdo standalone, corrigindo erroCannot find module 'next'no startup do container
[2.3.0] - 2026-04-03
Esta versão introduz @tanstack/react-query no projeto, padronizando cache, deduplicação e invalidação de leituras client-side. Várias features (anexos, insights, antecipação de parcelas) passaram a usar React Query no lugar de useEffect manual sobre rotas GET dedicadas. O dashboard ganhou ajuda contextual em cada métrica e configuração persistida pra ocultar contas marcadas como não consideradas no saldo total; o menu do usuário na navbar passou a avisar quando há release nova publicada no GitHub; e o Docker passou a rodar migrations automaticamente no startup via docker-entrypoint.sh. Internamente, o knip foi adicionado pra auditar arquivos/exports/tipos sem uso, várias rotas e actions ganharam validações extras (filtros por userId em joins, rate limits explícitos no Better Auth, headers Cache-Control: private, no-store em rotas privadas) e o projeto foi atualizado para Next.js 16.2.2 e Biome 2.4.10.
Adicionado
- Dependências: adiciona
@tanstack/react-querye um provider global para padronizar cache, deduplicação e invalidação de leituras client-side - Dashboard: widget "Minhas Contas" ganha preferência persistida para mostrar ou ocultar contas marcadas como não consideradas no saldo total
- Dashboard: cards de métricas ganham botão de ajuda com explicação do cálculo exibido no app
- Versionamento: menu do usuário na navbar passa a avisar quando existe release mais recente publicada no GitHub
- Qualidade: adiciona
knipao projeto com o scriptpnpm run lint:deadcodepara auditar arquivos, exports e tipos sem uso - Infraestrutura: imagem Docker passa a rodar migrations automaticamente via
docker-entrypoint.shantes de iniciar a aplicação
Alterado
- Anexos: listagem no modal de edição/detalhes, URLs temporárias da galeria e preview deixam de depender de
useEffectpara data fetching direto no componente e passam a usar React Query sobre rotas GET dedicadas - Insights: carregamento de análises salvas passa a usar React Query com cache por período, mantendo estado draft local apenas para análises recém-geradas ou removidas
- Parcelamentos: histórico de antecipações no diálogo passa a usar React Query com invalidação automática após cancelamento
- Dashboard, insights e relatórios passam a excluir movimentações de contas marcadas como não consideradas no saldo total; balanço e previsto também passam a considerar ajustes de transferências entre contas consideradas e não consideradas
- UX: boletos e faturas passam a exibir labels relativas como "vence hoje", "vence amanhã" e "pago ontem", com tooltip para a data completa
- Lançamentos: diálogo foi reorganizado em blocos mais claros; a criação passa a aceitar múltiplos anexos e a edição em lote preserva
purchaseDateeperiodao propagar alterações por série - Inbox e tabela de lançamentos foram componentizados em partes menores, mantendo paginação e ações em lote mais simples de evoluir
- Infraestrutura: workflow de publish ganha etapa obrigatória de qualidade;
docker-composepassa a suportar perfil local ou banco remoto; build fixapnpm@10.33.0; projeto atualizado paraNext.js 16.2.2,Biome 2.4.10e dependências correlatas - Qualidade:
knipganha configuração inicial para reduzir falsos positivos, ignorandosrc/shared/components/ui/**, o worker público de PDF,setup.mjse o falso positivo depostcss
Corrigido
- Segurança: criação de antecipações agora valida se
payerIdecategoryIdinformados pertencem ao usuário autenticado antes de persistir referências cruzadas - Segurança: histórico de antecipações endurece os joins de
transactions,payersecategoriescom filtro poruserId, evitando exposição de nomes relacionados caso exista referência inconsistente no banco - Segurança: domínio público deixa de responder rotas
/api/*, e o Better Auth passa a aplicar rate limits explícitos para login e cadastro por e-mail - APIs privadas: rotas de anexos, insights salvos, histórico de antecipações e presign de download passam a responder com
Cache-Control: private, no-store; a rota de antecipações também deixa de devolver mensagens internas de erro ao cliente - Build: rotas web de tokens do Companion passam a ser explicitamente dinâmicas, removendo o warning de prerender no
next build - Lançamentos: edição em série de compras parceladas volta a persistir
purchaseDateeperiod, permitindo mover parcelas para a fatura ou competência correta conforme o escopo escolhido - Lançamentos: edições que tentam mover compras de cartão para faturas já pagas agora são bloqueadas com mensagem clara também no fluxo de atualização e propagação em lote
- Imagens: logos institucionais, avatares padrão e componentes com
next/imageem modofillpassam a usar containers fixos comsizes, removendo avisos de proporção e performance - Gráficos:
ChartContainerpassa a definirinitialDimensionnoResponsiveContainerdo Recharts, evitando avisoswidth(-1)eheight(-1)durante a medição inicial em widgets e relatórios
[2.2.1] - 2026-04-01
Correção pontual no build da imagem Docker — removido chown -R /app do stage final (que travava o build/push da GitHub Action por lentidão excessiva); permissões agora definidas via COPY --chown direto.
Corrigido
- Docker: imagem de produção deixa de executar
chown -R /appno stage final; as permissões passam a ser definidas nosCOPY --chown, reduzindo o risco de travamento e lentidão excessiva no build/push da GitHub Action
[2.2.0] - 2026-04-01
Esta versão entrega uma nova página dedicada de galeria de anexos em /attachments com miniaturas, visualização inline (incluindo PDF via pdfjs-dist), download direto e acesso a partir do lançamento. As páginas de login e cadastro foram redesenhadas com sidebar mockup de faturas, três blocos de funcionalidade e gradiente decorativo. O dashboard passou a notificar boletos e faturas com vencimento dentro de 5 dias, e o cache do dashboard migrou de unstable_cache para a diretiva use cache (com cacheTag e cacheLife), com cacheComponents: true no next.config.ts e connection() em todas as páginas para forçar render dinâmico. A tipografia ganhou peso 500 (Medium) padronizado em títulos, valores e rótulos.
Adicionado
- Anexos: nova página de galeria em
/attachmentscom miniaturas, visualização inline de imagem e PDF, download direto e acesso a partir do lançamento - Anexos: suporte a visualização de PDF diretamente no app via
pdfjs-dist - Autenticação: sidebar redesenhado com mockup de faturas e três itens de funcionalidade; páginas de login e cadastro ganham gradiente decorativo e logo visível no mobile
- Notificações: alertas de vencimento para boletos e faturas do período seguinte exibidos quando o vencimento está dentro de 5 dias
- Documentação: novo arquivo público
public/llms.txtcom resumo do projeto e links curados para documentação, setup e arquitetura
Alterado
- Performance: queries de cache do dashboard migradas de
unstable_cachepara a diretivause cachecomcacheTagecacheLife; todas as páginas do dashboard passam a chamarconnection()para renderização dinâmica;next.config.tsadotacacheComponents: true - Tipografia: adicionada fonte America Medium (weight 500); pesos tipográficos padronizados para
font-mediumem títulos, valores e rótulos em todos os componentes - Anexos:
AttachmentPreviewfoi simplificado para exibir apenas nome da transação, nome do arquivo, navegação entre anexos e ações de download, abrir em nova aba e fechar com íconeX
Corrigido
- Lançamentos: uploads e remoções de anexo agora funcionam para todos os lançamentos, não apenas os pertencentes a séries
[2.1.2] - 2026-03-30
Pequena versão de polimento: novo escopo "period" na ação em lote de lançamentos (aplica alteração a todos os lançamentos do período sem sobrescrever o pagador individual de cada um), preferência de tamanho máximo por arquivo de anexo (5/10/25/50/100 MB) persistida no banco e respeitada em todos os pontos de upload, e redesign visual da página de Configurações com separadores entre seções e títulos maiores.
Adicionado
- Preferências: nova configuração de tamanho máximo por arquivo de anexo (5, 10, 25, 50 ou 100 MB), persistida no banco e respeitada em todos os pontos de upload
- Lançamentos: novo escopo
"period"na ação em lote, que aplica a alteração a todos os lançamentos do período sem sobrescrever o pagador individual de cada um
Corrigido
- Lançamentos: ao editar um lançamento de série, uploads e remoções de anexo agora aguardam a escolha de escopo da ação em lote antes de serem executados, evitando que o anexo fosse aplicado no lançamento errado
- Lançamentos: ação em lote com escopo
"period"não sobrescreve mais opayerIdindividual de cada lançamento ao alterar o pagador
Alterado
- Configurações: redesign visual da página com separadores entre seções e títulos maiores
- Configurações: seção "Extrato e lançamentos" renomeada para "Lançamentos"
[2.1.1] - 2026-03-29
Esta versão extrai a navbar pra um componente NavbarShell compartilhado entre app e landing page e cria uma variante navbar no Button pra centralizar os estilos antes duplicados em nav-styles.ts. A integração com @vercel/analytics/@vercel/speed-insights foi substituída por Umami self-hosted via script tag no layout raiz.
Adicionado
- Navbar: novo componente
NavbarShellque unifica a estrutura da barra de navegação entre o app e a landing page - UI: nova variante
navbarno componenteButton, centralizando os estilos de botões usados dentro da navbar - Analytics: integração com Umami self-hosted via script tag no layout raiz
Alterado
- Navbar:
AnimatedThemeTogglereRefreshPageButtonpassam a aceitar propvariantpara adaptar estilos ao contexto (navbar ou sidebar) - Navbar: estilos inline duplicados de
nav-styles.tsmigrados para a variantenavbardo Button - Logo: prop
showVersionremovida; propcolorIconpassa a aplicar filtro de cor também no variantcompact - Scripts:
mockuprenomeado paradb:seed;db:enableExtensionsrenomeado paradb:extensions; scriptdev-envremovido - Landing:
MobileNavsimplificado com a remoção da proptriggerClassName
Removido
- Navbar: arquivo
nav-styles.tsremovido após migração dos estilos para a variantenavbar - Dependências:
@vercel/analyticse@vercel/speed-insightsremovidos (substituídos pelo Umami self-hosted)
[2.1.0] - 2026-03-28
Esta versão adiciona suporte a anexos em transações, com upload direto para storage compatível com S3, persistência em tabelas dedicadas (anexos e lancamento_anexos) e ações de visualizar/remover no detalhe do lançamento. O upload exige token assinado por arquivo, valida ownership da transação na leitura/remoção e confere tamanho/tipo do objeto no storage antes de persistir o vínculo no banco. Inclui também novo workflow release.yml que cria tag e GitHub Release automaticamente a partir da versão do package.json e da entrada correspondente no CHANGELOG.md.
Adicionado
- Lançamentos: suporte a anexos em transações com upload direto para storage compatível com S3, persistência em tabelas dedicadas (
anexoselancamento_anexos) e ações de visualizar/remover no detalhe do lançamento - Infraestrutura: novo workflow
.github/workflows/release.ymlpara criar tag e GitHub Release automaticamente a partir da versão dopackage.jsone da entrada correspondente noCHANGELOG.md
Alterado
- Anexos: upload agora exige token assinado por arquivo, valida propriedade da transação também na leitura/remoção e confere tamanho/tipo do objeto no storage antes de persistir o vínculo no banco
Corrigido
- Lançamentos: criação de transações no cartão de crédito agora bloqueia períodos cujas faturas já estão pagas, evitando divergência no relatório de análise de parcelas
[2.0.3] - 2026-03-26
Correção pontual em /transactions — removida dependência de crypto.randomUUID() no carregamento inicial, que falhava em ambientes self-hosted sem HTTPS (a API só está disponível em contextos seguros).
Corrigido
- Lançamentos:
/transactionsdeixa de depender decrypto.randomUUID()no carregamento inicial, corrigindo a falha em ambientes self-hosted sem HTTPS ao abrir a página
[2.0.2] - 2026-03-25
Versão focada nas notificações da navbar: novo estado persistido permite marcar alertas de fatura, boleto e orçamento como lidos ou arquivados por usuário; o snapshot global passa a usar o período corrente do negócio (não mais o periodo da URL), itens lidos saem do badge e arquivados somem da lista padrão do sino. O filtro foi refinado para um seletor explícito entre Ativas e Arquivadas. Inclui ajustes pontuais no detalhamento por categoria do dashboard (oculta categorias sem movimentação no período), na arte decorativa do cabeçalho de boas-vindas e na edição em lote de lançamentos em série (que agora propaga também o status de pagamento para transações fora do cartão).
Adicionado
- Scripts: novo comando
mockupnopackage.jsonpara executarscripts/mock-data.ts - Navbar: novo estado persistido para notificações do sino, permitindo marcar alertas de fatura, boleto e orçamento como lidos ou arquivados por usuário
Alterado
- Navbar: o snapshot global de notificações deixa de depender do
periododa URL atual e passa a usar o período corrente do negócio; itens lidos saem do badge e itens arquivados somem da lista padrão do sino - Navbar: dropdown de notificações agora permite mostrar itens arquivados e reverter ações de leitura e arquivamento diretamente em cada item
- Navbar: filtro da lista de notificações no sino foi refinado para um seletor explícito entre
AtivaseArquivadas, com destaque visual mais forte para a aba ativa - Navbar: componente
notification-bellfoi desmembrado em hook e componentes locais menores, reduzindo acoplamento e facilitando manutenção - Dashboard: detalhamento por categoria agora oculta categorias sem movimentação no período, reduzindo ruído visual no card
- UI: arte decorativa do topo da dashboard foi restrita à faixa do cabeçalho de boas-vindas, evitando que o
dot patterne o gradiente claro alterem a leitura visual do month picker - Lançamentos em série: a edição em lote agora também permite propagar o status de pagamento (
isSettled) para transações não feitas no cartão de crédito - Seed de conta vazia:
scripts/mock-data.tsagora processa--helpantes de exigirDATABASE_URLe só cria categorias/pagador admin depois de validar que a conta está financeiramente vazia
Corrigido
- Navbar: ao desarquivar a última notificação no modo de arquivadas, o dropdown volta automaticamente para a listagem padrão e o toggle deixa de ficar travado
- Filtros financeiros: transações de conta com observação nula, como compras parceladas no Pix, deixam de ser ocultadas indevidamente em
/transactions, dashboard e relatórios quando a conta está configurada para desconsiderar o saldo inicial - Backup: geração do arquivo
*.data.sql.gzvolta a usar a saída correta dopg_restore
Removido
- DB: colunas
system_fontemoney_fontda tabelapreferencias_usuario, que não são mais utilizadas no código
[2.0.1] - 2026-03-21
Versão de correções na inbox de pré-lançamentos: filtro por app passa a montar a lista completa a partir de todos os itens do status atual (sem depender da página carregada), notificações de cartões/apps sem logo cadastrado passam a usar default_icon.png como fallback, e o select de apps exibe os logos. Inclui também correção de divergência entre a versão exibida no UI e a reportada pelo /api/health (que agora reporta a versão atual do package.json).
Corrigido
- Inbox: filtro por app em
/inboxagora monta a lista completa de apps da aba a partir de todos os itens do status atual, sem depender apenas da página carregada, e o SSR deixa de quebrar quandosourceAppsvier inconsistente - Inbox: notificações de cartões/apps sem logo cadastrado agora exibem
default_icon.pngcomo fallback visual nos cards - Inbox: select de apps em
/inboxagora exibe os logos dos apps/cartões, com fallback paradefault_icon.pngquando não houver logo mapeado - Inbox: cabeçalhos de data entre grupos de cards agora exibem ícone e tipografia um pouco maior para melhorar a leitura
- Versionamento:
/api/healthpassa a reportar a versão atual dopackage.json, evitando divergência entre healthcheck, UI e release publicada
[2.0.0] - 2026-03-21
Marco importante do projeto. Esta versão consolida ganhos de performance, segurança e organização interna. No backend, paginação server-side real foi implementada em transações, extrato e inbox; o dashboard reduziu de 19 fetchers para 7 blocos com agregações compartilhadas; exportações de PDF/Excel passaram a carregar libs sob demanda apenas no clique; e o cache de dashboard/insights ganhou invalidação segmentada por userId (sem fallback global). Internamente, identificadores foram migrados de PT-BR para inglês (lancamento → transaction, pagador → payer, conta → account, etc.) e helpers foram consolidados em módulos de domínio. Visualmente, a navbar e os cards de auth ganharam dot pattern + brilho em primary, faturas tiveram refinamento na hierarquia visual, e a tipografia foi unificada na família America. Inclui ainda script scripts/backup.sh para backup automático do PostgreSQL, importação de extratos OFX e XLS/XLSX com tela de revisão e dedup por FITID, e nova opção de zerar dados financeiros sem excluir o usuário.
Adicionado
- Infraestrutura: script
scripts/backup.shpara backup automático do banco PostgreSQL; configuração de destino (rclone, cron, retenção) feita separadamente; passa a gerar também*.data.sql.gzcom dados puros de todas as tabelas públicas (--data-only --schema=public) - Importação de extratos OFX e XLS/XLSX com tela de revisão, detecção automática de categoria por histórico de uso, deduplicação por FITID e acesso direto pela tabela de transações
Alterado
- Ajustes: aba de exclusão da conta passa a oferecer opção de zerar dados financeiros (preferências, tokens do Companion, compartilhamentos) sem excluir o usuário; categorias e pagador admin são recriados em seguida.
- Performance: paginação server-side real com
count,limiteoffsetem transações, extrato e inbox, com sincronização depage,pageSizeestatusna URL;fetchInboxDialogData()restrito ao fluxo de processamento. - Performance: dashboard reduzido de 19 fetchers para 7 blocos com agregações compartilhadas; snapshots dedicados para navbar (avatar do pagador admin, notificações, inbox) e quick actions, ambos com cache por usuário.
- Performance: exportações de lançamentos e relatório por categoria carregam
xlsx,jspdfejspdf-autotablesob demanda, apenas no clique. - Performance: agregação de insights busca o pagador admin uma vez por request, remove joins repetidos com
pagadorese paraleliza consultas independentes do período. - Cache: invalidação do dashboard segmentada por
userIdnas server actions;revalidateForEntity()agora exigeuserId, sem fallback global para dashboard. - Cache: agregação de insights com cache por usuário e período, reaproveitando a invalidação financeira segmentada.
- Arquitetura:
getAdminPayerIdadotado em contas, orçamentos, calendário, detalhe de categoria, extrato e actions, eliminando JOINs repetidos compayers.role. - Banco: unique constraints compostas em
faturaseorcamentos, com migration que aborta em caso de duplicatas históricas; actions tratam conflitos de concorrência comupsertpara status de fatura eonConflictDoNothingpara orçamentos. - Qualidade:
pnpm run lintenext buildpassam sem erros de TypeScript; validação de tipos ativa no build. - Refatoração: identificadores internos migrados de PT-BR para inglês (
lancamento→transaction,pagador→payer,conta→account,cartao→card,categoria→category,orcamento→budget); strings de UI permanecem em português. Search params de lançamentos também migrados (type,condition,payment,payer,category,accountCard). - Lançamentos recorrentes: criação de todos os meses diretamente no fluxo do lançamento, com seleção explícita da quantidade de meses no formulário.
- UI:
type-badgerenomeado paratransaction-type-badgecom mapeamento centralizado por tipo financeiro; visual unificado em tabela, detalhe de transação e cabeçalho de categoria. - UI: navbar com
dot patternSVG sutil sobre a cor primária, máscara horizontal e camada de luz suave; cards de login/cadastro reaproveitam a mesma linguagem visual comdot patterne brilho emprimary. - UI: login e cadastro reequilibrados com espaçamentos mais consistentes, largura útil fixa e cabeçalhos com descrição.
- UI: labels padronizados em formulários, tabelas, relatórios e estados vazios; skeletons com cantos menos arredondados; loading da home espelha estrutura atual (boas-vindas, navegação mensal, cards de métricas e toolbar de widgets).
- Faturas: card de resumo refinado com hierarquia clara para valor, vencimento e status; metadados em blocos discretos e faixa de ação contextual para pagamento e edição de data.
- Tipografia: aplicação carrega apenas a família
America(regular,mediumebold) como fonte global, removendo personalização por usuário e distinção de fonte para valores monetários. - Pagadores: a tela de detalhe agora mantém o card principal do pagador visível durante a navegação entre abas, sem repetir o bloco completo dentro de cada seção.
- Pagadores: detalhes sensíveis como envio automático, último envio e observações agora ficam ocultos quando o acesso ao pagador é somente leitura.
- Pagadores: o e-mail do pagador agora aparece apenas no cabeçalho fixo, evitando repetição dentro do card de detalhes.
- Relatório de tendências: a tabela e os cards mobile agora exibem a média mensal do período filtrado ao lado do total, com destaque visual em azul; a coluna de categoria também ficou mais compacta com truncamento para nomes longos.
- Dashboard: o welcome banner deixou de ser um bloco colorido para virar apenas texto destacado.
- UI base: o
Cardcompartilhado agora mantém a borda neutra no estado padrão e aplica um gradiente entrebordereprimaryno hover. - Assets: imagens que estavam soltas na raiz de
public/foram movidas parapublic/imagens/, com atualização dos caminhos usados por landing page, logos, exports e manifesto do app. - Dashboard:
section-cardsfoi renomeado paradashboard-metrics-cards;boletos-widgetrenomeado parabill-widget; widgets componentizados internamente por domínio (invoices/,bills/,notes/,goals-progress/,payment-overview/,installment-expenses/). - Widgets:
widget-cardfoi separado entre um card base e uma versão expansível, isolando a lógica de overflow sem alterar o visual atual dos widgets. - Datas: helpers de
YYYY-MM-DD, labels de vencimento/pagamento e o relógio de negócio foram centralizados emlib/utils/date.ts, reduzindo drift de timezone em dashboard, pagadores, calendário, exports e actions. - Lançamentos: a tabela deixou de quebrar ao formatar datas inválidas ou serializadas como ISO completo, normalizando
purchaseDateparaYYYY-MM-DDcom fallback seguro. - Logos e cartões: resolução de logos e brand assets foi consolidada em
lib/logo/index.tselib/cartoes/brand-assets.ts, com adoção em cartões, contas, notificações, inbox, relatórios e seletores.
Corrigido
- Relatório de tendências: a coluna Média agora considera apenas os meses com gastos registrados (valores > 0), ignorando meses sem movimentação no cálculo
- Dashboard: ícones de seta nos cards de métricas (receita/despesa) estavam invertidos; cor do card de saldo ajustada para
cyan-600 - Landing page: gradiente sobreposto removido da hero section
- Lançamentos: o schema compartilhado de observação voltou a aceitar
null, corrigindo o erroInvalid input: expected string, received nullao salvar novos lançamentos sem anotação. - Cartões/Faturas: o pagamento da fatura passou a usar o valor líquido do período no cartão, evitando que o extrato da conta registre o total bruto das despesas quando houver receitas como estornos ou créditos na mesma fatura.
- Hooks e sincronização: o provider de privacidade voltou a reagir corretamente às mudanças do modo privado, e o resumo de fatura agora reseta a data de pagamento quando a prop inicial deixa de existir.
- Compatibilidade da refatoração de hooks e relatórios:
useMobile/useIsMobilevoltaram a ter exports compatíveis, o shim decomponents/ui/use-mobile.tsfoi restaurado para o sidebar elib/relatorios/types.tsvoltou a reexportar os tipos usados pelos fetchers legados. - Widgets expansíveis: o shell compartilhado voltou a aplicar
relativeeoverflow-hidden, mantendo o gradiente e o botão "Ver tudo" presos ao card. - Dashboard: o widget "Lançamentos por categoria" deixou de ler a categoria salva no
sessionStoragedurante a renderização inicial, evitando mismatch de hidratação entre servidor e cliente.
Removido
- Dashboard/Ajustes: toda a implementação legada de
magnet-linesfoi removida, incluindo componente órfão, preferência de usuário e a colunadisable_magnetlinesdo schema com migration dedicada.
[1.7.7] - 2026-03-05
Versão de organização interna sem mudanças visíveis grandes. Períodos e navegação mensal passaram a usar os helpers centrais de período (YYYY-MM), hooks locais (calculadora, month-picker, logo picker) foram movidos pra perto das respectivas features e components/navbar/sidebar foram consolidados em components/navigation/*. Análise de parcelas migrou para /relatorios/analise-parcelas, exportações em PDF/CSV/Excel ganharam melhor branding e apresentação, e a calculadora teve ajustes de estabilidade no arrasto.
Alterado
- Períodos e navegação mensal:
useMonthPeriodpassou a usar os helpers centrais de período (YYYY-MM), o month-picker foi simplificado e o rótulo visual agora segue o formatoMarço 2026. - Hooks e organização: hooks locais de calculadora, month-picker, logo picker e sidebar foram movidos para perto das respectivas features, deixando
/hooksfocado nos hooks realmente compartilhados. - Estado de formulários e responsividade:
useFormStateganhou APIs explícitas de reset/substituição no lugar do setter cru, euseIsMobilefoi atualizado para assinatura estável comuseSyncExternalStore, reduzindo a troca estrutural inicial no sidebar entre mobile e desktop. - Navegação e estrutura compartilhada:
components/navbarecomponents/sidebarforam consolidados emcomponents/navigation/*, componentes globais migraram paracomponents/shared/*e os imports foram padronizados no projeto. - Dashboard e relatórios: a análise de parcelas foi movida para
/relatorios/analise-parcelas, ações rápidas e widgets do dashboard foram refinados, e os cards de relatórios ganharam ajustes para evitar overflow no mobile. - Pré-lançamentos e lançamentos: tabs e cards da inbox ficaram mais consistentes no mobile, itens descartados podem voltar para
Pendentee compras feitas no dia do fechamento do cartão agora entram na próxima fatura. - Tipografia e exportações: suporte a
SF Profoi removido, a validação de fontes ficou centralizada empublic/fonts/font_index.tse as exportações em PDF/CSV/Excel receberam melhor branding e apresentação. - Calculadora e diálogos: o arraste ficou mais estável, os bloqueios de fechamento externo foram reforçados e o display interno foi reorganizado para uso mais consistente.
- Também houve ajustes menores de responsividade, espaçamento e acabamento visual em telas mobile, modais e detalhes de interface.
[1.7.6] - 2026-03-02
Esta versão adiciona suporte completo a Passkeys (WebAuthn) via @better-auth/passkey: nova aba em /ajustes permite listar, adicionar, renomear e remover credenciais, e a tela de login ganhou ação dedicada para passkey. O dashboard ganhou widget de Anotações e atalhos rápidos na toolbar de widgets pra criar Receita, Despesa ou Anotação direto. Top Estabelecimentos foi unificado num único widget com abas, e o widget "Lançamentos recentes" foi substituído por "Progresso de metas" com lista de orçamentos do período (gasto, limite e percentual de uso por categoria).
Adicionado
- Suporte completo a Passkeys (WebAuthn) com plugin
@better-auth/passkeyno servidor epasskeyClientno cliente de autenticação - Tabela
passkeyno banco de dados para persistência de credenciais WebAuthn vinculadas ao usuário - Nova aba Passkeys em
/ajustescom gerenciamento de credenciais: listar, adicionar, renomear e remover passkeys - Ação de login com passkey na tela de autenticação (
/login) - Dashboard: botões rápidos na toolbar de widgets para
Nova receita,Nova despesaeNova anotaçãocom abertura direta dos diálogos correspondentes - Widget de Anotações no dashboard com listagem das anotações ativas, ações discretas de editar e ver detalhes, e atalho para
/anotacoes
Alterado
PasskeysFormrefatorado para melhor experiência com React 19/Next 16: detecção de suporte do navegador, bloqueio de ações simultâneas e atualização da lista sem loader global após operações- Widget de pagadores no dashboard agora exibe variação percentual em relação ao mês anterior (seta + cor semântica), seguindo o padrão visual dos widgets de categorias
- Dashboard: widgets
Condições de Pagamentos+Formas de Pagamentounificados em um único widget com abas;Top Estabelecimentos+Maiores Gastos do Mêstambém unificados em widget com abas - Relatórios: rota de Top Estabelecimentos consolidada em
/relatorios/estabelecimentos - Dashboard: widget
Lançamentos recentesremovido e substituído porProgresso de metascom lista de orçamentos do período (gasto, limite configurado e percentual de uso por categoria) - Dashboard:
fetchDashboardDatadeixou de carregarnotificationsSnapshot(notificações continuam sendo carregadas no layout), reduzindo uma query no carregamento da página inicial
Corrigido
- Login com passkey na tela de autenticação agora fica disponível em navegadores com WebAuthn, mesmo sem suporte a Conditional UI
- Listagem de passkeys em Ajustes agora trata
createdAtausente sem gerar data inválida na interface - Migração
0017_previous_warstartornou-se idempotente para colunas depreferencias_usuariocomIF NOT EXISTS, evitando falha em bancos já migrados
Removido
- Código legado não utilizado no dashboard: widget e fetcher de
Lançamentos Recentes - Componente legado
CategoryCardem categorias (substituído pelo layout atual em tabela) - Componente
AuthFooternão utilizado na autenticação - Barrel files sem consumo em
components/relatorios,components/lancamentosecomponents/lancamentos/shared - Rota legada
/top-estabelecimentose arquivos auxiliares (layout.tsxeloading.tsx) removidos
[1.7.5] - 2026-02-28
Versão pequena de polimento: ações para excluir item individual (processado/descartado) e limpar itens em lote por status na inbox de pré-lançamentos, redesign dos cards e diálogos dos widgets de boletos e faturas com indicação "Atrasado / Pagar" quando vencidos e não pagos, e migração da página de categorias de cards pra layout em tabela com link direto para detalhe e ações inline.
Adicionado
- Inbox de pré-lançamentos: ações para excluir item individual (processado/descartado) e limpar itens em lote por status
Alterado
- Página de categorias: layout migrado de cards para tabela com link direto para detalhe, ícone da categoria e ações inline de editar/remover
- Widgets de boletos e faturas no dashboard: cards e diálogos redesenhados, com destaque visual para status e valores
- Estados de vencimento em boletos e faturas: quando vencidos e não pagos, exibem indicação "Atrasado / Pagar"
- Notificações de faturas: exibição de logo do cartão (quando disponível) e atualização dos ícones da listagem
Corrigido
parseDueDateno widget de faturas agora retorna também a data parseada com fallback seguro (date: null) para evitar comparações inválidas- Formatação do
components/dashboard/invoices-widget.tsxajustada para passar no lint
[1.7.4] - 2026-02-28
Versão de polimento de responsividade no mobile: 26 componentes ajustados (navbar, filtros, skeletons, widgets, dialogs), card de análise de parcelas empilhado verticalmente em telas pequenas e cards do top estabelecimentos reorganizados em coluna única no mobile. Inclui também regra mais inteligente em "Remover selecionados" — quando todos os itens pertencem à mesma série, abre dialog de escopo com 3 opções; e ajuste no consumo de limite por despesa recorrente no cartão (só consome quando a data já passou).
Alterado
- Card de análise de parcelas (
/dashboard/analise-parcelas): layout empilhado no mobile — nome/cartão e valores Total/Pendente em linhas separadas ao invés de lado-a-lado, evitando truncamento - Página de top estabelecimentos (
/top-estabelecimentos): cards "Top Estabelecimentos por Frequência" e "Principais Categorias" empilhados verticalmente no mobile (grid-cols-1 lg:grid-cols-2) - Padding da lista de parcelas expandida reduzido no mobile (
px-2 sm:px-8) - Ajustes gerais de responsividade em navbar, filtros, skeletons, widgets e dialogs (26 componentes)
- Remover selecionados: quando todos os itens selecionados pertencem à mesma série (parcelado ou recorrente), abre dialog de escopo com 3 opções ao invés de confirmação simples (parcial da PR #18)
- Despesa recorrente no cartão de crédito: só consome o limite do cartão quando a data da ocorrência já passou; mesma regra no relatório de cartões (parcial da PR #18)
[1.7.3] - 2026-02-27
Versão pequena com nova prop compact no DatePicker (formato abreviado "28 fev", sem "de" e sem ano) e modal de múltiplos lançamentos reformulado: selects de conta e cartão separados por forma de pagamento, InlinePeriodPicker ao escolher cartão de crédito e DatePicker compacto.
Adicionado
- Prop
compactno DatePicker para formato abreviado "28 fev" (sem "de" e sem ano)
Alterado
- Modal de múltiplos lançamentos reformulado: selects de conta e cartão separados por forma de pagamento, InlinePeriodPicker ao selecionar cartão de crédito, grid full-width, DatePicker compacto
- Opção "Boleto" removida das formas de pagamento no modal de múltiplos lançamentos
[1.7.2] - 2026-02-26
Versão de polimento dos diálogos: padding maior (p-10), largura padronizada em max-w-xl e botões do footer com largura igual; o lançamento dialog ganhou seção colapsável "Condições e anotações" e cálculo automático do período da fatura via deriveCreditCardPeriod(). Inclui também uma faxina de tipos (non-null assertions removidas, any substituído por tipos explícitos em 15+ arquivos) e remoção de 6 componentes e 20+ funções/tipos sem uso.
Alterado
- Dialogs padronizados: padding maior (p-10), largura max-w-xl, botões do footer com largura igual (flex-1)
- Lançamento dialog simplificado: período da fatura calculado automaticamente a partir da data de compra + dia de fechamento do cartão via
deriveCreditCardPeriod() - Seção "Condições e anotações" colapsável no lançamento dialog
- Mass-add dialog: campo unificado conta/cartão com parsing por prefixo, period picker apenas para cartão de crédito
- PeriodPicker removido dos campos básicos; substituído por InlinePeriodPicker inline no cartão de crédito
Corrigido
- Non-null assertions (!) substituídas por type assertions ou optional chaining com guards em 15+ arquivos
anysubstituído porunknownou tipos explícitos (use-form-state, pagadores/data, ajustes/actions, insights/actions)- Hooks com dependências exaustivas: magnet-lines (useEffect antes de early return), lancamentos-filters (useCallback), inbox-page (useCallback + deps)
Errorcomponent renomeado paraErrorComponentevitando shadowing do global
Removido
- 6 componentes não utilizados: dashboard-grid, expenses/income-by-category widgets, installment analysis panels, fatura-warning-dialog
- 20+ funções/tipos não utilizados: successResult, generateApiToken, validateApiToken, getTodayUTC/Local, calculatePercentage, roundToDecimals, safeParseInt/Float, isPeriodValid, getLastPeriods, entre outros
- FaturaWarningDialog e checkFaturaStatusAction (substituídos por derivação automática de período)
[1.7.1] - 2026-02-24
Esta versão substitui o header lateral por uma topbar de navegação com backdrop blur e links agrupados em 5 seções (Dashboard, Lançamentos, Cartões, Relatórios, Ferramentas), expande o sino de notificações pra exibir orçamentos estourados e pré-lançamentos pendentes em seções separadas, e cria página dedicada de changelog em /changelog (acessível pelo menu do usuário com a versão atual exibida ao lado).
Adicionado
- Topbar de navegação substituindo o header fixo: backdrop blur, links agrupados em 5 seções (Dashboard, Lançamentos, Cartões, Relatórios, Ferramentas)
- Dropdown Ferramentas na topbar consolidando calculadora e modo privacidade
- Sino de notificações expandido: exibe orçamentos estourados e pré-lançamentos pendentes com seções separadas e contagem agregada
- Página dedicada de changelog em
/changelog - Link para o changelog no menu do usuário com versão exibida ao lado
Alterado
- Logo refatorado com variante compacta para uso na topbar
- Menu do usuário incorpora o botão de logout e link para ajustes
- Links da topbar em lowercase; layout centralizado em max-w-8xl
- Data no changelog exibida no formato dd/mm/aaaa
Removido
- Header lateral substituído pela topbar
- Aba Changelog removida de Ajustes (agora é página própria)
- Componentes separados de logout e modo privacidade (incorporados à topbar)
[1.6.3] - 2026-02-19
Correção pontual: variável RESEND_FROM_EMAIL não era lida corretamente do .env quando o valor continha espaços (precisa estar entre aspas). Leitura centralizada em lib/email/resend.ts com getResendFromEmail() e carregamento explícito do .env no contexto de Server Actions.
Corrigido
- E-mail Resend: variável
RESEND_FROM_EMAILnão era lida do.env(valores com espaço precisam estar entre aspas). Leitura centralizada emlib/email/resend.tscomgetResendFromEmail()e carregamento explícito do.envno contexto de Server Actions
Alterado
.env.example:RESEND_FROM_EMAILcom valor entre aspas e comentário para uso em Docker/produçãodocker-compose.yml: env do app passaRESEND_FROM_EMAIL(em vez deEMAIL_FROM) para o container, alinhado ao nome usado pela aplicação
[1.6.2] - 2026-02-19
Correção pontual no mobile: ao selecionar um logo no diálogo de criação de conta/cartão, o diálogo principal fechava inesperadamente. Adicionado stopPropagation nos eventos de click/touch dos botões e delay com requestAnimationFrame antes de fechar o seletor.
Corrigido
- Bug no mobile onde, ao selecionar um logo no diálogo de criação de conta/cartão, o diálogo principal fechava inesperadamente: adicionado
stopPropagationnos eventos de click/touch dos botões de logo e delay comrequestAnimationFrameantes de fechar o seletor de logo
[1.6.1] - 2026-02-18
Versão pequena: nome do estabelecimento padronizado para transferências entre contas ("Saída - Transf. entre contas" e "Entrada - Transf. entre contas") com anotação no formato "de {origem} -> {destino}", e correção de avisos width(-1) and height(-1) do ChartContainer no console.
Alterado
- Transferências entre contas: nome do estabelecimento passa a ser "Saída - Transf. entre contas" na saída e "Entrada - Transf. entre contas" na entrada e adicionando em anotação no formato "de {conta origem} -> {conta destino}"
- ChartContainer (Recharts): renderização do gráfico apenas após montagem no cliente e uso de
minWidth/minHeightno ResponsiveContainer para evitar aviso "width(-1) and height(-1)" no console
[1.6.0] - 2026-02-18
Versão de personalização da tabela de lançamentos. Duas novas preferências em Ajustes > Extrato e lançamentos: "Anotações em coluna" (controla se a anotação aparece como coluna ou tooltip no ícone) e "Ordem das colunas" (lista ordenável por arrasto pra reordenar Estabelecimento, Transação, Valor etc.). Inclui ajustes mobile no header do dashboard (fixo só no mobile) e na rolagem horizontal de tabs e botões de ação.
Adicionado
- Preferência "Anotações em coluna" em Ajustes > Extrato e lançamentos: quando ativa, a anotação dos lançamentos aparece em coluna na tabela; quando inativa, permanece no balão (tooltip) no ícone
- Preferência "Ordem das colunas" em Ajustes > Extrato e lançamentos: lista ordenável por arraste para definir a ordem das colunas na tabela do extrato e dos lançamentos (Estabelecimento, Transação, Valor, etc.); a linha inteira é arrastável
- Coluna
extrato_note_as_columnelancamentos_column_orderna tabelapreferencias_usuario(migrations 0017 e 0018) - Constantes e labels das colunas reordenáveis em
lib/lancamentos/column-order.ts
Alterado
- Header do dashboard fixo apenas no mobile (
fixed top-0commd:static); conteúdo compt-12 md:pt-0para não ficar sob o header - Abas da página Ajustes (Preferências, Companion, etc.): no mobile, rolagem horizontal com seta indicando mais opções à direita; scrollbar oculta
- Botões "Novo orçamento" e "Copiar orçamentos do último mês": no mobile, rolagem horizontal (
h-8,text-xs) - Botões "Nova Receita", "Nova Despesa" e ícone de múltiplos lançamentos: no mobile, mesma rolagem horizontal + botões menores
- Tabela de lançamentos aplica a ordem de colunas salva nas preferências (extrato, lançamentos, categoria, fatura, pagador)
- Adicionado variavel no docker compose para manter o caminho do volume no compose up/down
Contribuições: Guilherme Bano
[1.5.3] - 2026-02-21
Versão focada no painel do pagador (novo card "Status de Pagamento" com totais pagos/pendentes e listagem individual de boletos com data de vencimento, data de pagamento e status), além de SEO completo na landing page (Open Graph, Twitter Card, JSON-LD Schema.org, sitemap.xml e robots.txt) e layout específico com metadados ricos. Imagens da landing convertidas de PNG para WebP para melhor performance.
Adicionado
- Painel do pagador: card "Status de Pagamento" com totais pagos/pendentes e listagem individual de boletos com data de vencimento, data de pagamento e status
- Funções
fetchPagadorBoletoItemsefetchPagadorPaymentStatusemlib/pagadores/details.ts - SEO completo na landing page: metadata Open Graph, Twitter Card, JSON-LD Schema.org, sitemap.xml (
/app/sitemap.ts) e robots.txt (/app/robots.ts) - Layout específico da landing page (
app/(landing-page)/layout.tsx) com metadados ricos
Corrigido
- Validação obrigatória de categoria, conta e cartão no dialog de lançamento — agora validada no cliente (antes do submit) e no servidor via Zod
- Atributo
langdo HTML corrigido deenparapt-BR
Alterado
- Painel do pagador reorganizado em grid de 3 colunas com cards de Faturas, Boletos e Status de Pagamento
PagadorBoletoCardrefatorado para exibir lista de boletos individuais em vez de resumo agregado- Imagens da landing page convertidas de PNG para WebP (melhora de performance)
- Template de título dinâmico no layout raiz (
%s | OpenMonetis)
[1.5.2] - 2026-02-16
Reforma visual da landing page: hero com gradient sutil e tipografia responsiva, dashboard preview sem bordas pra visual mais limpo, seção "Funcionalidades" reorganizada em 6 cards principais + 6 extras compactos, seção "Como usar" com tabs Docker (Recomendado) vs Manual e footer simplificado em 3 colunas. Inclui menu hamburger mobile com Sheet drawer, animações fade-in via Intersection Observer e seção dedicada ao OpenMonetis Companion com screenshots e fluxo de captura.
Alterado
- Landing page reformulada: visual modernizado, melhor experiência mobile e novas seções
- Hero section com gradient sutil e tipografia responsiva
- Dashboard preview sem bordas para visual mais limpo
- Seção "Funcionalidades" reorganizada em 2 blocos: 6 cards principais + 6 extras compactos
- Seção "Como usar" com tabs Docker (Recomendado) vs Manual
- Footer simplificado com 3 colunas (Projeto, Companion, descrição)
- Métricas de destaque (widgets, self-hosted, stars, forks) entre hero e dashboard preview
- Espaçamento e padding otimizados para mobile em todas as seções
Adicionado
- Menu hamburger mobile com Sheet drawer (
components/landing/mobile-nav.tsx) - Animações de fade-in no scroll via Intersection Observer (
components/landing/animate-on-scroll.tsx) - Seção dedicada ao OpenMonetis Companion com screenshot do app, fluxo de captura e bancos suportados
- Galeria "Conheça as telas" com screenshots de Lançamentos, Calendário e Cartões
- Link "Conheça as telas" na navegação (desktop e mobile)
- Componente de tabs para setup (
components/landing/setup-tabs.tsx)
[1.5.1] - 2026-02-16
Esta versão renomeia o projeto de OpenSheets para OpenMonetis em todo o codebase (~40 arquivos: package.json, manifests, layouts, componentes, server actions, emails, Docker, docs e landing page). URLs do repositório atualizados de opensheets-app para openmonetis, image Docker renomeada para felipegcoutinho/openmonetis e logo textual atualizado. Inclui também suporte a multi-domínio via PUBLIC_DOMAIN (domínio público serve apenas a landing page, com middleware bloqueando rotas do app).
Alterado
- Projeto renomeado de OpenSheets para OpenMonetis em todo o codebase (~40 arquivos): package.json, manifests, layouts, componentes, server actions, emails, Docker, docs e landing page
- URLs do repositório atualizados de
opensheets-appparaopenmonetis - Docker image renomeada para
felipegcoutinho/openmonetis - Logo textual atualizado (
logo_text.png)
Adicionado
- Suporte a multi-domínio via
PUBLIC_DOMAIN: domínio público serve apenas a landing page (sem botões de login/cadastro, rotas do app bloqueadas pelo middleware) - Variável de ambiente
PUBLIC_DOMAINno.env.examplecom documentação
[1.5.0] - 2026-02-15
Versão de personalização tipográfica: 13 fontes disponíveis (incluindo SF Pro Display, SF Pro Rounded, Inter, Geist Sans, Roboto, Reddit Sans, JetBrains Mono e outras) configuráveis por usuário tanto pra interface quanto pros valores monetários, com FontProvider que aplica a troca instantaneamente via CSS variables sem necessidade de reload. Fontes Apple SF Pro carregadas localmente com 4 pesos (Regular, Medium, Semibold, Bold) e novas colunas system_font e money_font na tabela preferencias_usuario.
Adicionado
- Customização de fontes nas preferências — fonte da interface e fonte de valores monetários configuráveis por usuário
- 13 fontes disponíveis: AI Sans, Anthropic Sans, SF Pro Display, SF Pro Rounded, Inter, Geist Sans, Roboto, Reddit Sans, Fira Sans, Ubuntu, JetBrains Mono, Fira Code, IBM Plex Mono
- FontProvider com preview ao vivo — troca de fonte aplica instantaneamente via CSS variables, sem necessidade de reload
- Fontes Apple SF Pro (Display e Rounded) carregadas localmente com 4 pesos (Regular, Medium, Semibold, Bold)
- Colunas
system_fontemoney_fontna tabelapreferencias_usuario
Corrigido
- Cores de variação invertidas na tabela de receitas em
/relatorios/tendencias— aumento agora é verde (bom) e diminuição é vermelho (ruim), consistente com a semântica de receita
Alterado
- Sistema de fontes migrado de className direto para CSS custom properties (
--font-app,--font-money) via@theme inline - MoneyValues usa
var(--font-money)em vez de classe fixa, permitindo customização
[1.4.1] - 2026-02-15
Versão focada na inbox de pré-lançamentos: novas abas "Pendentes", "Processados" e "Descartados" (antes só pendentes), logo do cartão/conta exibido automaticamente nos cards via matching por nome do app, pre-fill automático do cartão de crédito ao processar e badges de status com data nos itens já processados/descartados em modo readonly. Cor --warning ajustada para melhor contraste (mais alaranjada).
Adicionado
- Abas "Pendentes", "Processados" e "Descartados" na página de pré-lançamentos (antes exibia apenas pendentes)
- Logo do cartão/conta exibido automaticamente nos cards de pré-lançamento via matching por nome do app
- Pre-fill automático do cartão de crédito ao processar pré-lançamento (match pelo nome do app)
- Badge de status e data nos cards de itens já processados/descartados (modo readonly)
Corrigido
revalidateTag("dashboard", "max")para invalidar todas as entradas de cache da tag (antes invalidava apenas a mais recente)- Cor
--warningajustada para melhor contraste (mais alaranjada) EstabelecimentoLogonão precisava de"use client"— removido- Fallback no cálculo de
fontSizeemEstabelecimentoLogo
Alterado
- Nome do estabelecimento formatado em Title Case ao processar pré-lançamento
- Subtítulo da página de pré-lançamentos atualizado
[1.4.0] - 2026-02-07
Reforma do design system: ~60+ componentes migrados de cores hardcoded do Tailwind (green-500, red-600, amber-500, blue-500 etc.) pra tokens semânticos (success, destructive, warning, info); adicionados novos tokens --success, --warning, --info (com foregrounds) tanto em light quanto dark mode, novas variantes success e info no Badge, e cores de chart estendidas de 6 para 10. Inclui também correção do bug de invalidação de cache do dashboard que impedia widgets de boleto/fatura de atualizar após pagamento, e fix de scroll em listas Popover+Command (estabelecimento, categorias, filtros) com a prop modal.
Corrigido
- Widgets de boleto/fatura não atualizavam após pagamento: actions de fatura (
updateInvoicePaymentStatusAction,updatePaymentDateAction) e antecipação de parcelas não invalidavam o cache do dashboard - Substituídos
revalidatePath()manuais porrevalidateForEntity()nas actions de fatura e antecipação - Expandido
revalidateConfig.cartoespara incluir/contase/lancamentos(afetados por pagamento de fatura) - Scroll não funcionava em listas Popover+Command (estabelecimento, categorias, filtros): adicionado
modalao Popover nos 4 componentes afetados
Adicionado
- Link "detalhes" no card de orçamento para navegar diretamente à página da categoria
- Indicadores de tendência coloridos nos cards de métricas do dashboard (receitas, despesas, balanço, previsto) com cores semânticas sutis
- Tokens semânticos de estado no design system:
--success,--warning,--info(com foregrounds) para light e dark mode - Cores de chart estendidas de 6 para 10 (
--chart-7a--chart-10: teal, violet, cyan, lime) - Variantes
successeinfono componente Badge
Alterado
- Migrados ~60+ componentes de cores hardcoded do Tailwind (
green-500,red-600,amber-500,blue-500, etc.) para tokens semânticos (success,destructive,warning,info) - Unificados 3 arrays duplicados de cores de categorias (em
category-report-chart.tsx,category-history.ts,category-history-widget.tsx) para importação única decategory-colors.ts - Month picker migrado de tokens customizados (
--month-picker) para tokens padrão (--card) - Dark mode normalizado: hues consistentes (~70 warm family) em vez de valores dispersos
- Token
--accentajustado para ser visualmente distinto de--background - Token
--cardcorrigido para branco limpo (oklch(100% 0 0))
Removido
- Tokens não utilizados:
--dark,--dark-foreground,--month-picker,--month-picker-foreground
[1.3.1] - 2026-02-06
Versão pequena: calculadora arrastável via drag handle no header do dialog, callback onSelectValue pra inserir valor diretamente no campo de lançamento, e nova aba "Changelog" em Ajustes com histórico parseado do CHANGELOG.md. As páginas de itens ativos e arquivados em Cartões, Contas e Anotações foram unificadas com sistema de tabs (mesmo padrão de Categorias), eliminando rotas separadas e nomenclatura inconsistente.
Adicionado
- Calculadora arrastável via drag handle no header do dialog
- Callback
onSelectValuena calculadora para inserir valor diretamente no campo de lançamento - Aba "Changelog" em Ajustes com histórico de versões parseado do CHANGELOG.md
Alterado
- Unificadas páginas de itens ativos e arquivados em Cartões, Contas e Anotações com sistema de tabs (padrão Categorias)
- Removidas rotas separadas
/cartoes/inativos,/contas/inativose/anotacoes/arquivadas - Removidos sub-links de inativos/arquivados da sidebar
- Padronizada nomenclatura para "Arquivados"/"Arquivadas" em todas as entidades
[1.3.0] - 2026-02-06
Versão de performance no dashboard: indexes compostos em lancamentos, cache cross-request via unstable_cache com tag "dashboard" e TTL de 120s, e invalidação automática em mutations financeiras via revalidateTag. Eliminados ~20 JOINs com a tabela pagadores (substituídos por filtro direto via pagadorId) e queries consolidadas (income-expense-balance: 12→1 com GROUP BY; payment-status: 2→1; expenses/income por categoria: 4→2). Auth session deduplicada por request via React.cache() e scan de métricas limitado a 24 meses.
Adicionado
- Indexes compostos em
lancamentos:(userId, period, transactionType)e(pagadorId, period) - Cache cross-request no dashboard via
unstable_cachecom tag"dashboard"e TTL de 120s - Invalidação automática do cache do dashboard via
revalidateTag("dashboard")em mutations financeiras - Helper
getAdminPagadorId()comReact.cache()para lookup cacheado do admin pagador
Alterado
- Eliminados ~20 JOINs com tabela
pagadoresnos fetchers do dashboard (substituídos por filtro direto compagadorId) - Consolidadas queries de income-expense-balance: 12 queries → 1 (GROUP BY period + transactionType)
- Consolidadas queries de payment-status: 2 queries → 1 (GROUP BY transactionType)
- Consolidadas queries de expenses/income-by-category: 4 queries → 2 (GROUP BY categoriaId + period)
- Scan de métricas limitado a 24 meses ao invés de histórico completo
- Auth session deduplicada por request via
React.cache() - Widgets de dashboard ajustados para aceitar
Date | string(compatibilidade com serialização dounstable_cache) CLAUDE.mdotimizado de ~1339 linhas para ~140 linhas
[1.2.6] - 2025-02-04
Versão de adaptação ao React 19 compiler: removidos ~60 useCallback/useMemo desnecessários, wrappers React.memo redundantes e simplificação de padrões de hidratação com useSyncExternalStore. Sem mudanças visíveis ao usuário — só faxina interna alinhada às novas otimizações automáticas do compilador.
Alterado
- Refatoração para otimização do React 19 compiler
- Removidos
useCallbackeuseMemodesnecessários (~60 instâncias) - Removidos
React.memowrappers desnecessários - Simplificados padrões de hidratação com
useSyncExternalStore
Arquivos modificados
hooks/use-calculator-state.tshooks/use-form-state.tshooks/use-month-period.tscomponents/auth/signup-form.tsxcomponents/contas/accounts-page.tsxcomponents/contas/transfer-dialog.tsxcomponents/lancamentos/table/lancamentos-filters.tsxcomponents/sidebar/nav-main.tsxcomponents/month-picker/nav-button.tsxcomponents/month-picker/return-button.tsxcomponents/privacy-provider.tsxcomponents/dashboard/category-history-widget.tsxcomponents/anotacoes/note-dialog.tsxcomponents/categorias/category-dialog.tsxcomponents/confirm-action-dialog.tsxcomponents/orcamentos/budget-dialog.tsx
[1.2.5] - 2025-02-01
Versão pequena: novo widget de pagadores no dashboard com avatares atualizados.
Adicionado
- Widget de pagadores no dashboard
- Avatares atualizados para pagadores
[1.2.4] - 2025-01-22
Correção pontual: preservação de formatação nas anotações e ajuste no layout do card de anotações.
Corrigido
- Preservar formatação nas anotações
- Layout do card de anotações
[1.2.3] - 2025-01-22
Versão pequena: versão do app passa a aparecer na sidebar e atualização da documentação.
Adicionado
- Versão exibida na sidebar
- Documentação atualizada
[1.2.2] - 2025-01-22
Versão de manutenção: atualização de dependências e formatação aplicada em todo o código.
Alterado
- Atualização de dependências
- Aplicada formatação no código