Commit Graph

77 Commits

Author SHA1 Message Date
Felipe Coutinho
d60eb7dd8b feat: melhora responsividade e dialogos da interface 2026-03-06 13:59:38 +00:00
Felipe Coutinho
0e4dbe6a3f feat: amplia opcoes de fontes e normaliza preferencias 2026-03-06 13:59:12 +00:00
Felipe Coutinho
2f781a8dca fix: corrige antecipacao e fechamento de compras no cartao 2026-03-06 13:58:28 +00:00
Felipe Coutinho
3b73c36a5c feat: melhora a inbox de pre-lancamentos 2026-03-06 13:57:51 +00:00
Felipe Coutinho
069d0759c6 refactor: reorganiza componentes compartilhados e caminhos do app 2026-03-06 13:57:40 +00:00
Felipe Coutinho
bff72d0504 chore(cleanup): remove dead code and legacy top-estabelecimentos route 2026-03-02 17:20:46 +00:00
Felipe Coutinho
2a21bef2da feat(dashboard): add quick actions and new overview widgets 2026-03-02 17:20:28 +00:00
Felipe Coutinho
3d3a9e1414 feat(auth): implementar passkeys e gerenciamento em ajustes 2026-03-02 01:33:05 +00:00
Felipe Coutinho
4a88309709 chore: apply pending dashboard and UI updates 2026-02-28 15:34:54 +00:00
Felipe Coutinho
15b2ee18e1 feat: bulk delete com escopo para mesma série + recorrente só consome limite após data
Aproveitamento parcial da PR #18 (fechada):

- Bulk delete: quando todos os selecionados pertencem à mesma série
  (parcelado/recorrente), abre dialog de escopo com 3 opções ao invés
  de deletar direto
- Recorrente no cartão: despesa recorrente só consome limite quando
  purchaseDate <= current_date (cartões ativos, inativos e relatório)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:54:08 +00:00
Felipe Coutinho
761c039244 refactor: melhorias de UI e responsividade mobile
- Corrigir layout truncado no card de parcelas (analise-parcelas)
- Empilhar cards de top estabelecimentos e categorias no mobile
- Ajustes gerais de responsividade em múltiplos componentes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 13:38:41 +00:00
Felipe Coutinho
e644d67022 refactor: extrair data fetching da page de pagadores para data.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:40:52 +00:00
Felipe Coutinho
842919bce5 refactor: substituir topbar por navbar componentizada
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:40:48 +00:00
Felipe Coutinho
4ea2ba9463 style: renomear título Notas para Anotações e reformatação Biome
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 18:05:12 +00:00
Felipe Coutinho
c5750b081f style: reformatar pages com Biome (line wrapping)
Formatação automática do Biome em fatura/page, categorias/page e
extrato/page — apenas line wrapping de destructuring de Promise.all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:23:51 +00:00
Felipe Coutinho
ac2ea63dbd refactor: simplificar lancamento-dialog e mass-add-dialog
Substitui FaturaWarningDialog por deriveCreditCardPeriod() que calcula
o período da fatura automaticamente a partir da data de compra +
dia de fechamento/vencimento do cartão.

lancamento-dialog: remove periodDirty state, adiciona seção colapsável
"Condições e anotações", propaga closingDay/dueDay via cardInfo.

mass-add-dialog: unifica contaId/cartaoId em contaCartaoId com
parsing por prefixo, period picker apenas para cartão de crédito.

basic-fields-section: remove PeriodPicker (período agora auto-derivado),
move Estabelecimento para topo.

payment-method-section: adiciona InlinePeriodPicker como link
"Fatura de [mês]" com popover MonthPicker.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:23:23 +00:00
Felipe Coutinho
96118d85e4 style: padronizar dialogs e aplicar formatação Biome
DialogContent: padding p-6→p-10, max-w-lg→max-w-xl.
DialogFooter/AlertDialogFooter: botões com flex-1 (largura igual).
Remove gap-3/w-full redundantes de 12+ dialogs.

Reformatação Biome: line wrapping, import ordering.
Error component renomeado para evitar shadowing do global Error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:22:59 +00:00
Felipe Coutinho
803e273538 fix: corrigir tipos e eliminar non-null assertions
Substitui non-null assertions (!) por type assertions ou optional
chaining com guards. Troca any por unknown/tipos explícitos.

- drizzle.config: DATABASE_URL! → as string
- use-form-state: Record<string, any> → Record<string, unknown>
- actions: catch (e: any) → catch (e), model tipado explicitamente
- pagadores/data: row: any → Record<string, unknown>
- note-dialog: result tipado explicitamente
- bulk-import: payload as any removido
- Map.get()! → optional chaining + guards em relatórios e dashboard

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:22:41 +00:00
Felipe Coutinho
9cb6593186 feat: changelog como página própria, versão 1.7.1
- Remove aba Changelog de Ajustes; cria página em /changelog
- Adiciona link para /changelog no menu do usuário com versão ao lado
- Data do changelog formatada como dd/mm/aaaa
- Limpa formatação ** do CHANGELOG.md
- Bump de versão para 1.7.1

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 16:07:34 +00:00
Felipe Coutinho
1b90be6b54 feat: topbar de navegação como experimento de UI (v1.7.0)
- Substitui header fixo por topbar com backdrop blur e navegação agrupada em 5 seções
- Adiciona FerramentasDropdown consolidando calculadora e modo privacidade
- NotificationBell expandida com orçamentos e pré-lançamentos
- Remove logout-button, header-dashboard e privacy-mode-toggle como componentes separados
- Logo refatorado com variante compact; topbar com links em lowercase
- Adiciona dependência radix-ui ^1.4.3
- Atualiza CHANGELOG para v1.7.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 15:43:14 +00:00
Felipe Coutinho
a9f73f7a45 feat: implementar topbar como experimento de navegação
Substitui a sidebar pela topbar com NavigationMenu do shadcn/ui.

- Logo à esquerda com invert para bg primário
- Links diretos: Dashboard, Calendário, Cartões, Contas
- Dropdowns: Lançamentos, Organização, Análise
- Mobile: Sheet lateral com hamburger
- Ações à direita: notificações, calculadora, tema, etc.
- User avatar com dropdown de ajustes/logout
- CSS vars overrideados na área de ações para cor primária

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 20:28:57 +00:00
Felipe Coutinho
f16140cb44 chore: snapshot sidebar layout antes de experimentar topbar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 19:57:42 +00:00
Felipe Coutinho
f640990912 chore: remover páginas estabelecimentos e gastos-por-categoria
- Remove /estabelecimentos e todos seus componentes e actions
- Remove /relatorios/gastos-por-categoria e seus arquivos
- Remove tabela `estabelecimentos` do schema e migration 0019
- Remove nav items de ambas as features do sidebar
- Reverte widget expenses-by-category ao estado original
- Remove filtro de estabelecimento dos lançamentos (filters, table, page-helpers)
- Reverte getRecentEstablishmentsAction para query apenas em lancamentos
- Limpa CHANGELOG removendo entradas das features removidas
2026-02-21 21:28:36 +00:00
Guilherme Bano
94f6b0a986 Correção de integração com o resend 2026-02-21 21:28:36 +00:00
Guilherme Bano
9b78f839bf Adicionado aba de estabelecimentos e feita ajuste de interface. Detalhes adicionados no CHANGELOG.md 2026-02-21 21:28:36 +00:00
Guilherme Bano
ffde55f589 ajuste de layout mobile, melhorias e criação de novas funções. Detalhes adicionados no CHANGELOG.md 2026-02-21 21:28:36 +00:00
Felipe Coutinho
31fe752b7d feat(v1.5.3): status de pagamento no painel do pagador + SEO landing + WebP
- Card de Status de Pagamento com totais pagos/pendentes e lista de boletos individuais
- Validação obrigatória de categoria/conta/cartão no dialog de lançamento (client + server)
- SEO completo na landing: Open Graph, Twitter Card, JSON-LD, sitemap.xml, robots.txt
- Imagens convertidas de PNG para WebP (performance)
- HTML lang corrigido para pt-BR; template de título dinâmico

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-21 17:48:52 +00:00
Felipe Coutinho
a1347aed28 feat(v1.5.1): renomeação OpenSheets → OpenMonetis + multi-domínio
Renomeia o projeto em ~40 arquivos (package.json, manifests, layouts,
componentes, server actions, emails, Docker, docs, landing page).
Adiciona suporte a multi-domínio via PUBLIC_DOMAIN onde o domínio
público serve apenas a landing page sem botões de auth.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 17:16:50 +00:00
Felipe Coutinho
98dd0f11e1 fix: lazy-load BETTER_AUTH_SECRET para corrigir Docker build
Validação eager do secret no top-level do módulo causava falha no
build Docker porque a env var não existe em build-time. Movido para
função getJwtSecret() chamada em runtime.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 22:35:51 +00:00
Felipe Coutinho
b9f788312c chore: atualizações de dependências, lint fixes e ajustes menores
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 21:35:39 +00:00
Felipe Coutinho
2362a70b9d feat(v1.5.0): customização de fontes e correção de cores em tendências
Adiciona sistema de customização de fontes por usuário via CSS custom
properties, com preview ao vivo e persistência no banco. Corrige lógica
de cores invertida na tabela de receitas em tendências.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 21:35:00 +00:00
Felipe Coutinho
4b442a907a feat(v1.4.1): tabs de histórico, logo matching e melhorias nos pré-lançamentos
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 00:06:54 +00:00
Felipe Coutinho
f50261208a feat(v1.4.0): design system semântico, correções de revalidação e melhorias de UX
- Adicionar tokens semânticos de estado (success, warning, info) no globals.css
- Migrar ~60+ componentes de cores hardcoded do Tailwind para tokens semânticos
- Unificar 3 arrays duplicados de cores de categorias em importação única
- Corrigir widgets de boleto/fatura que não atualizavam após pagamento
  (actions de fatura e antecipação não invalidavam cache do dashboard)
- Corrigir scroll em listas Popover+Command (modal prop)
- Adicionar link "detalhes" no card de orçamento para página da categoria
- Adicionar indicadores de tendência coloridos nos cards de métricas
- Estender cores de chart de 6 para 10
- Normalizar dark mode e remover tokens não utilizados

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 15:14:59 +00:00
Felipe Coutinho
390754c0e8 feat(ajustes): adicionar aba changelog com histórico de versões
Parser lê o CHANGELOG.md e exibe as versões com badges por tipo de mudança
(Adicionado, Alterado, Corrigido) na página de ajustes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 17:45:24 +00:00
Felipe Coutinho
5bb5693baf feat(calculadora): adicionar dialog arrastável e seleção de valor
- Calculadora agora é arrastável via drag handle no header
- Novo callback onSelectValue permite inserir valor no campo de lançamento
- Ajustado subtitle de categorias e estilo do collapse na sidebar
- Atualizado snapshot drizzle

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:22:31 +00:00
Felipe Coutinho
4152a27f4d refactor(ui): unificar páginas ativas/arquivadas com tabs (v1.3.1)
Substitui rotas separadas de inativos/arquivados por tabs inline em
Cartões, Contas e Anotações, seguindo o padrão já usado em Categorias.
Remove sub-links da sidebar e padroniza nomenclatura para "Arquivados".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 13:20:15 +00:00
Felipe Coutinho
6f5c41a4cf perf: otimizar dashboard com indexes, cache e consolidação de queries (v1.3.0)
- Adicionar indexes compostos em lancamentos para queries frequentes
- Eliminar ~20 JOINs com pagadores via helper cacheado getAdminPagadorId()
- Consolidar queries: income-expense-balance (12→1), payment-status (2→1), categories (4→2)
- Adicionar cache cross-request via unstable_cache com tag-based invalidation
- Limitar scan de métricas a 24 meses
- Deduplicar auth session por request via React.cache()

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-06 12:24:15 +00:00
Felipe Coutinho
0249226026 fix(orcamentos): alinhar cálculo de gastos com widget do dashboard
A query de "Gasto até agora" nos orçamentos agora aplica os mesmos
filtros do widget de despesas por categoria do dashboard:
- INNER JOIN com pagadores (exclui lançamentos sem pagador)
- Filtra apenas pagadores com role "admin" (exclui terceiros)
- Exclui notas de faturas automáticas (AUTO_FATURA:*)

Isso corrige a discrepância onde orçamentos mostravam valores
diferentes do widget de despesas para a mesma categoria.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 12:52:50 +00:00
Felipe Coutinho
a70a83dd9d feat(pagadores): adicionar widget no dashboard e atualizar avatares
- Novo widget de pagadores no dashboard com resumo de transações
- Substituir avatares SVG por PNG com melhor qualidade
- Melhorar seção de pagador no diálogo de lançamentos
- Adicionar ação para buscar pagadores por nome
- Atualizar componentes de seleção (cartões, categorias, contas)
- Melhorias no layout de ajustes e relatórios

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 01:44:50 +00:00
Felipe Coutinho
fd84a0d1ac feat(relatorios): reorganizar páginas e criar componente CategoryIconBadge
- Renomear /relatorios/categorias para /relatorios/tendencias
- Renomear /relatorios/cartoes para /relatorios/uso-cartoes
- Criar componente CategoryIconBadge unificado com cores dinâmicas
- Atualizar cards de categorias com novo layout (ações no footer)
- Atualizar cards de orçamentos com CategoryIconBadge
- Adicionar tooltip detalhado nas células de tendências (valor anterior e diferença)
- Adicionar dot colorido (verde/vermelho) para indicar tipo de categoria

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 14:52:11 +00:00
Felipe Coutinho
11f85e4b28 refactor(ui): melhorar layouts da aba Companion e página de cartões
- Criar componente CompanionTab com layout reorganizado
- Simplificar ApiTokensForm com lista de dispositivos mais compacta
- Redesenhar página de relatórios de cartões com layout horizontal
- Atualizar CardsOverview com stats em cards separados e lista compacta
- Simplificar CardUsageChart removendo seletor de período (fixo 12 meses)
- Criar CardInvoiceStatus com timeline minimalista
- Atualizar skeletons para refletir novos layouts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 02:23:32 +00:00
Felipe Coutinho
df1d149e4a refactor(sidebar): reorganizar navegação e aplicar formatação Biome
- Simplifica estrutura da sidebar combinando seções "Visão Geral" e "Gestão Financeira"
- Renomeia itens de relatórios para maior clareza ("Tendências", "Uso de Cartões")
- Aplica correções de formatação do Biome (ordenação de imports, quebras de linha)
- Remove código comentado não utilizado
- Adiciona migração 0014 do Drizzle

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 13:16:39 +00:00
Felipe Coutinho
2eafceb6d3 refactor: atualizar imports para os novos nomes de tabelas
- Atualizar imports em todos os arquivos que usavam os nomes antigos
- Corrigir referências para preferenciasUsuario, insightsSalvos, tokensApi, preLancamentos, antecipacoesParcelas, compartilhamentosPagador
2026-01-27 14:19:46 +00:00
Felipe Coutinho
a7f63fb77a refactor: migrate from ESLint to Biome and extract SQL queries to data.ts
- 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>
2026-01-27 13:15:37 +00:00
Felipe Coutinho
8ffe61c59b refactor(inbox): rename caixa-de-entrada to pre-lancamentos e remove colunas não utilizadas
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
2026-01-26 17:05:55 +00:00
Felipe Coutinho
c0fb11f89c refactor(inbox): remove process dialog e integra fluxo ao lancamento-dialog
- 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
2026-01-26 13:31:37 +00:00
Felipe Coutinho
ea3e6cdafc feat(inbox): adiciona layout com título e descrição da página
- Adiciona componente PageDescription com ícone e subtítulo
- Define metadata com título para SEO
2026-01-23 15:41:44 +00:00
Felipe Coutinho
b2ba3efd63 feat(ajustes): add API tokens management UI for OpenSheets Companion
Add a new "Dispositivos" tab in settings page that allows users to:
- Generate new API tokens for connecting Android devices
- View connected devices with last used time and IP
- Revoke tokens to disconnect devices

This provides the web UI needed for users to obtain tokens
for the OpenSheets Companion Android app.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-23 13:02:00 +00:00
Felipe Coutinho
9ff42ecbe7 feat(inbox): add Caixa de Entrada page for managing companion notifications
- Create inbox page with pending items management:
  - InboxCard: displays notification summary with parsed data
  - InboxDetailsDialog: view full notification details
  - ProcessDialog: convert notification to transaction (lancamento)

- Add server actions for inbox operations:
  - getInboxItems: fetch pending inbox items
  - processInboxItem: create lancamento from inbox item
  - discardInboxItem: discard unwanted notifications

- Add navigation link to sidebar under 'Gestão Financeira'
- Add revalidation config for inbox-related paths
2026-01-23 12:12:22 +00:00
Felipe Coutinho
ca0242d380 chore: remove implementação do changelog
- Remove página /changelog e seus arquivos
- Remove componentes ChangelogLink e ChangelogList
- Remove referência do header-dashboard
2026-01-20 16:41:05 +00:00