Moderniza visual, melhora experiência mobile e adiciona seções
dedicadas ao Companion e galeria de screenshots.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adiciona nome de exibição ao email remetente para evitar que
destinatários vejam apenas "noreply" como remetente.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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>
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>
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>
- 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>
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>
- 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>
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>
- 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>
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>
React 19 compiler auto-optimizes memoization, making manual hooks unnecessary.
Changes:
- Remove ~60 useCallback/useMemo across 16 files
- Remove React.memo from nav-button and return-button
- Simplify hydration with useSyncExternalStore (privacy-provider)
- Add CHANGELOG.md for version tracking
No functional changes - internal optimization only.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- Preservar quebras de linha e espaços na descrição das notas
- Corrigir altura fixa do card para manter footer sempre visível
- Texto excedente é cortado em vez de empurrar os botões
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Exibir versão (v1.2.5) ao lado do logo na sidebar
- Adicionar link do repositório Companion na aba de configurações
- Atualizar README com documentação completa do OpenSheets Companion
- Atualizar versões das dependências e estrutura do banco de dados
- Adicionar logo do Creditas
- Remover fontes não utilizadas
- Atualizar logo_text.png
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Atualizar package.json e pnpm-lock.yaml
- Aplicar formatação Biome em widgets do dashboard
- Pequenos ajustes de estilo em componentes diversos
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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>
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>
- Add app name and version to health response
- Rename 'service' to 'name' for better semantics
- Rename 'error' to 'message' for consistency
- Update documentation to reflect companion app usage
- POST /api/inbox - Create single inbox item from notification
- POST /api/inbox/batch - Create multiple inbox items at once (max 50)
- Validates input with Zod schemas
- Requires API token authentication
- Returns created/updated items with IDs for client sync
- 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 cálculo e exibição do valor por parcela no select (ex: "3x de R$ 33,33")
- Mostra resumo dentro do trigger do select ao invés de texto externo
- Exibe valores calculados nas opções do dropdown quando há valor preenchido
- Renomeia label "Lançamento fixo" para "Repetirá"
- Aumenta opções de recorrência de 24 para 47 meses
- Reduz espaçamento e altura do textarea de anotação para layout mais compacto
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Adiciona coluna de categoria com ícone
- Move data de compra para dentro da célula de nome
- Simplifica exibição de pagador removendo Badge
- Refatora coluna conta/cartão com tooltips informativos
- Adiciona suporte a liquidação para Transferência bancária e Pré-Pago
- Remove imports não utilizados (RiBankCard2Line, RiBankLine)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
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>