22 KiB
22 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.
[Unreleased]
[1.7.7] - 2026-03-05
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Adicionado
- Widget de pagadores no dashboard
- Avatares atualizados para pagadores
[1.2.4] - 2025-01-22
Corrigido
- Preservar formatação nas anotações
- Layout do card de anotações
[1.2.3] - 2025-01-22
Adicionado
- Versão exibida na sidebar
- Documentação atualizada
[1.2.2] - 2025-01-22
Alterado
- Atualização de dependências
- Aplicada formatação no código