- Atualizar imports em todos os arquivos que usavam os nomes antigos
- Corrigir referências para preferenciasUsuario, insightsSalvos, tokensApi, preLancamentos, antecipacoesParcelas, compartilhamentosPagador
- Replace ESLint with Biome for linting and formatting
- Configure Biome with tabs, double quotes, and organized imports
- Move all SQL/Drizzle queries from page.tsx files to data.ts files
- Create new data.ts files for: ajustes, dashboard, relatorios/categorias
- Update existing data.ts files: extrato, fatura (add lancamentos queries)
- Remove all drizzle-orm imports from page.tsx files
- Update README.md with new tooling info
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
BREAKING CHANGES:
- Renomeia rota /caixa-de-entrada para /pre-lancamentos
- Remove colunas device_id, parsed_date e discard_reason da tabela inbox_items
Mudanças:
- Move componentes de caixa-de-entrada para pre-lancamentos
- Atualiza sidebar e navegação para nova rota
- Remove campos não utilizados do schema, types e APIs
- Adiciona migration 0011 para remover colunas do banco
- Simplifica lógica de data padrão usando notificationTimestamp
- Remove process-dialog.tsx (componente não mais utilizado)
- Simplifica inbox-page.tsx removendo estados e lógica do process dialog
- Atualiza inbox-details-dialog para usar lancamento-dialog diretamente
- Adiciona suporte a dados iniciais do inbox no lancamento-dialog
- Move campos de metadata da inbox para o form de lançamento
- Remove campo currency não utilizado do schema
- Atualiza actions e data com melhor tratamento de erros
Changed all API endpoints to validate os_xxx tokens via SHA-256 hash
lookup in the database instead of expecting JWT format.
This allows tokens generated in the settings page (Ajustes → Dispositivos)
to work correctly with the Android app.
- /api/auth/device/verify: validates os_xxx tokens via hash
- /api/inbox: uses hash-based auth
- /api/inbox/batch: uses hash-based auth
- No token expiration (tokens valid until revoked)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Implement JWT-based authentication system for device access
- Access tokens (7 day expiry) and refresh tokens (90 day expiry)
- HMAC-SHA256 signing with timing-safe comparison
- Token hashing with SHA-256 for secure storage
- Add device authentication endpoints:
- POST /api/auth/device/token - Login with email/password, get tokens
- POST /api/auth/device/refresh - Refresh access token
- POST /api/auth/device/verify - Verify token validity
- GET /api/auth/device/tokens - List user's API tokens
- DELETE /api/auth/device/tokens/[id] - Revoke specific token
- Track token usage (last used timestamp and IP)
- Add api_tokens table to store device authentication tokens
- Includes token hash, prefix, expiration, and usage tracking
- Cascades on user deletion
- Add inbox_items table to store notifications from companion app
- Stores original notification data and parsed transaction info
- Tracks processing status (pending, processed, discarded)
- Links to created lancamento when processed
- Add TypeScript types: ApiToken, NewApiToken, InboxItem, NewInboxItem
- Add inbox Zod schemas for input validation
Adiciona campo categoriaIcon ao tipo LancamentoItem e seu mapeamento
no page-helpers para exibir ícones das categorias na tabela.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Cria SortableWidget com @dnd-kit para drag-and-drop
- Cria DashboardGridEditable com modo de edição
- Cria WidgetSettingsDialog para gerenciar visibilidade
- Cria server actions para persistir preferências
- Adiciona filtros de 3, 6 e 12 meses no CardUsageChart
- Exibe logo e nome do cartão no header do gráfico
- Atualiza fetchCardDetail para buscar 12 meses de dados
- Criar página /top-estabelecimentos com análise de gastos por local
- Adicionar componentes: establishments-list, highlights-cards, summary-cards
- Adicionar filtro de período personalizado
- Criar função de busca de dados para top estabelecimentos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Criar página /relatorios/cartoes com visão geral dos cartões
- Adicionar componentes: cards-overview, card-usage-chart, card-top-expenses
- Adicionar componentes: card-category-breakdown, card-invoice-status
- Criar função de busca de dados para relatório de cartões
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Substituir botão único "Novo lançamento" por dois botões separados
- Adicionar ícones coloridos (verde para Receita, vermelho para Despesa)
- Adicionar suporte a defaultTransactionType no dialog
- Atualizar título e descrição do dialog conforme tipo selecionado
- Ocultar campo de tipo de transação quando tipo é pré-definido
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Criar utilitário centralizado para cores de categorias (lib/utils/category-colors.ts)
- Aplicar ícones coloridos no widget de despesas por categoria
- Aplicar ícones coloridos no widget de receitas por categoria
- Refatorar top-categories para usar utilitário centralizado
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Corrigir cálculo de valor na importação de lançamentos parcelados
- Exibir valor total (parcela × quantidade) ao invés do valor da parcela individual
- Permite recriar parcelamentos importados com valor correto
- Permitir que usuários compartilhados se descompartilhem de pagadores
- Adicionar componente PagadorLeaveShareCard na aba Perfil
- Usuário filho pode sair do compartilhamento sem precisar do usuário pai
- Manter autorização bidirecionada na action de remoção de share
- Implementar submenu "Inativos" para contas bancárias
- Criar página /contas/inativos seguindo padrão de cartões
- Filtrar contas ativas e inativas em páginas separadas
- Adicionar ícone e navegação no sidebar
- Expande README.md com estatísticas detalhadas do projeto (200 componentes, 15+ tabelas, 20+ widgets)
- Adiciona descrição completa da stack técnica e versões
- Documenta estrutura de diretórios de forma abrangente
- Inclui diagramas de schema de banco de dados e fluxos de dados
- Adiciona seção de destaques e funcionalidades recentes
- Implementa diálogo de importação em massa de lançamentos (bulk-import-dialog.tsx)
- Adiciona fontes AISans (Regular e Semibold) ao projeto
- Remove classe bg-muted das páginas de autenticação
- Adiciona /docs ao .gitignore
- Limpa código não utilizado em componentes de lançamentos e páginas do dashboard
- Atualiza dependências no package.json
BREAKING CHANGE: Remove feature de seleção de período das preferências do usuário
Alterações principais:
- Adiciona sistema completo de relatórios por categoria
- Cria página /relatorios/categorias com filtros e visualizações
- Implementa tabela e gráfico de evolução mensal
- Adiciona funcionalidade de exportação de dados
- Cria skeleton otimizado para melhor UX de loading
- Remove feature de seleção de período das preferências
- Deleta lib/user-preferences/period.ts
- Remove colunas periodMonthsBefore e periodMonthsAfter do schema
- Remove todas as referências em 16+ arquivos
- Atualiza database schema via Drizzle
- Substitui Select de período por MonthPicker visual
- Implementa componente PeriodPicker reutilizável
- Integra shadcn MonthPicker customizado (português, Remix icons)
- Substitui createMonthOptions em todos os formulários
- Mantém formato "YYYY-MM" no banco de dados
- Melhora design da tabela de relatórios
- Mescla colunas Categoria e Tipo em uma única coluna
- Substitui badge de tipo por dot colorido discreto
- Reduz largura da tabela em ~120px
- Atualiza skeleton para refletir nova estrutura
- Melhorias gerais de UI
- Reduz espaçamento entre títulos da sidebar (p-2 → px-2 py-1)
- Adiciona MonthNavigation para navegação entre períodos
- Otimiza loading states com skeletons detalhados
Adiciona sistema completo de preferências de usuário:
- Cria tabela userPreferences no schema com campos disableMagnetlines, periodMonthsBefore e periodMonthsAfter
- Implementa página de Ajustes com abas (Preferências, Alterar nome, Senha, E-mail, Deletar conta)
- Adiciona componente PreferencesForm para configuração de magnetlines e períodos de exibição
- Propaga periodPreferences para todos os componentes de lançamentos e calendário
Refatora sistema de changelog:
- Remove implementação anterior baseada em JSON estático
- Adiciona nova página de changelog dinâmica em app/(dashboard)/changelog
- Adiciona componente changelog-list.tsx
- Remove arquivos obsoletos (changelog-notification, actions, data, utils, scripts)
Adiciona controle de saldo inicial em contas:
- Novo campo excludeInitialBalanceFromIncome em contas
- Permite excluir saldo inicial do cálculo de receitas
- Atualiza queries de lançamentos para respeitar esta configuração
Melhorias adicionais:
- Adiciona componente ui/accordion.tsx do shadcn/ui
- Refatora formatPeriodLabel para displayPeriod centralizado
- Propaga estabelecimentos para componentes de lançamentos
- Remove variável DB_PROVIDER obsoleta do .env.example e documentação
- Adiciona 6 migrações de banco de dados (0003-0008)
- Implementa a página de anotações arquivadas, que busca as notas
arquivadas do usuário e as exibe utilizando o componente NotesPage.
- Cria o componente NotificationBell para gerenciar e exibir
notificações de pagamentos, incluindo a formatação de datas e
valores monetários. O componente também apresenta um sistema de
tooltip e dropdown para interação do usuário.
Este commit remove seções vazias de mudanças de código do arquivo de
mudanças. Isso ajuda a manter o histórico de mudanças mais limpo e
organizado, facilitando a leitura e a compreensão das alterações
realizadas no projeto.
- Adiciona o widget de despesas por categoria com gráfico.
- Adiciona o widget de receitas por categoria com gráfico.
- Atualiza a configuração dos widgets para incluir novos componentes.
- Ajusta estilos e tamanhos de elementos nos widgets existentes.
- Adiciona funções para marcar atualizações como lidas
- Implementa a lógica para marcar todas as atualizações como lidas
- Adiciona suporte a logs de atualizações lidas no banco de dados
- Cria funções utilitárias para manipulação de changelog
- Gera changelog a partir de commits do Git
- Salva changelog em formato JSON na pasta pública
perf: adicionar índices de banco de dados para otimização de queries
- Cria 14 índices compostos em tabelas principais (lancamentos, contas, etc)
- Adiciona índice user_id + period em lancamentos, faturas e orçamentos
- Adiciona índices para séries de parcelas e transferências
- Melhora a apresentação do nome do grupo e do cartão no componente
InstallmentGroupCard, utilizando um layout mais compacto.
- Altera a lógica de busca na função fetchInstallmentAnalysis para incluir
lançamentos parcelados apenas do pagador com a função de admin.
Este commit altera todas as ocorrências de "OpenSheets" para "Opensheets"
em arquivos de layout, README, componentes e notificações, garantindo
consistência na nomenclatura do projeto.
As alterações consistem na substituição do caractere '•' por '-' em várias partes do código, visando padronizar a formatação dos textos exibidos. Essa mudança foi aplicada em componentes como `event-modal`, `accounts-page`, `expenses-by-category-widget`, `income-by-category-widget`, `pending-invoice-card`, entre outros, para melhorar a consistência visual da interface.
Esta alteração melhora a função fetchInstallmentAnalysis ao adicionar um filtro
para garantir que apenas os grupos de parcelas com pelo menos uma parcela não
paga sejam retornados. Isso melhora a eficiência e a clareza dos dados
processados.
- Inclui a propriedade `cartaoLogo` no tipo `InstallmentGroup` para
armazenar o logo do cartão.
- Atualiza a função `fetchInstallmentAnalysis` para buscar e incluir
o logo do cartão nos dados retornados.
- Modifica o componente `InstallmentGroupCard` para renderizar o logo
do cartão, se disponível, ao lado do nome do cartão.
- Ajusta a formatação da função toggleInstallmentSelection para melhor legibilidade.
- Refatora a busca de grupos de parcelas para uma única linha.
- Remove a importação não utilizada do ícone RiCalculatorLine no nav-link.
- Adiciona o ícone RiCalculatorLine de volta ao widget de análise de parcelas.
- Remover cartaoLogo do tipo InstallmentGroup
- Remover busca de logo na query
- Remover exibição de logo e ícone fallback no componente
- Simplificar interface mostrando apenas nome do grupo
- Exibir logo do cartão ao lado do nome da parcela na análise
- Corrigir contagem de "X pendentes" para excluir parcelas já pagas
- Adicionar cartaoLogo à query e tipo InstallmentGroup
Ajustes finais na análise de parcelas:
- Corrigir contagem de parcelas pagas (agora conta isSettled corretamente)
- Estilização aprimorada para parcelas pagas:
* Cores verdes do sistema (green-50, green-700, dark mode suportado)
* Fundo verde claro com bordas verdes
* Texto e valores em verde
* Badge "Paga" com variant outline e cores verdes
* Line-through com decoração verde semi-transparente
- Remover card "Resumo" lateral (informação já está no card principal)
- Remover título "Lançamentos Parcelados" da página
- Layout full-width sem grid lateral
- Remover imports não utilizados (Separator, AnalysisSummaryPanel)
Melhorias na funcionalidade de análise de parcelas:
- Cálculo correto de vencimento baseado no dia de vencimento do cartão
- Identificação de parcelas pagas com indicador visual
- Parcelas pagas não podem ser selecionadas
- Remoção completa da funcionalidade de faturas (apenas parcelas)
- Layout mais compacto com espaçamentos reduzidos
- Botão "Análise" discreto ao lado do título do widget
- Card de resumo simplificado
- Tamanhos de fonte e ícones reduzidos
- Progress bar mais fina (h-1.5)
Implementa uma nova funcionalidade que permite ao usuário visualizar
todas as parcelas abertas e faturas não pagas em uma única página,
respondendo à pergunta "quanto vou gastar se pagar tudo?".
Funcionalidades:
- Query para buscar lançamentos parcelados não antecipados
- Query para buscar faturas pendentes
- Página dedicada em /dashboard/analise-parcelas
- Seleção individual de parcelas e faturas
- Painel de resumo com breakdown de valores
- Link "Ver Análise Completa" no widget de parcelas
- UI responsiva com cards expansíveis
- Cálculos em tempo real dos totais selecionados
Removida a variável de ambiente NEXT_PUBLIC_GOOGLE_OAUTH_ENABLED do
arquivo .env.example e ajustada a lógica de verificação do login
com Google no cliente de autenticação. Agora, a disponibilidade
do login com Google sempre retorna true, e a validação real
deve ser feita no servidor. Também removido o script de lint
do package.json.
- Adicionados ícones SVG para ChatGPT, Claude, Gemini e OpenRouter
- Implementados ícones para modos claro e escuro do ChatGPT
- Criado script de inicialização para PostgreSQL com extensão pgcrypto
- Adicionado script de configuração de ambiente que faz backup do .env
- Configurado tsconfig.json para TypeScript com opções de compilação