Commit Graph

129 Commits

Author SHA1 Message Date
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
95133aad77 chore: remover componentes UI não utilizados
Remove accordion, breadcrumb e scroll-area.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:41:03 +00:00
Felipe Coutinho
3f3488c8a0 refactor: remover funções, tipos e exports não utilizados
Remove createActionHandler, validateHashToken, decimalSchema,
optionalPeriodSchema, dateStringSchema, amountSchema, FeedbackDialog
standalone, CalendarEventType, parseDateKey, entre outros.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:40:59 +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
d93ef77d15 refactor: reformular modal de múltiplos lançamentos
- Separar selects de conta e cartão por forma de pagamento
- Remover opção Boleto do modal
- Usar InlinePeriodPicker ao selecionar cartão de crédito
- Grid full-width (sm:grid-cols-3) e DatePicker compact
- Reduzir espaçamento geral do modal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:24:35 +00:00
Felipe Coutinho
656fbaed54 feat: prop compact no DatePicker para formato abreviado "28 fev"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 15:24:30 +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
f0b8758cc2 style: padronizar note-dialog com Labels e scroll apenas no conteúdo
Adiciona Labels (Título, Conteúdo, Tipo de anotação, Adicionar tarefa)
seguindo o padrão dos demais dialogs do projeto (space-y-1 + Label).

DialogDescription visível novamente com texto contextual.

Scroll apenas no form (-mx-6 max-h-[80vh] overflow-y-auto px-6),
header e footer fixos — mesmo padrão do lancamento-dialog.

Footer movido para fora do form; submit via requestSubmit().

Corrige useMemo antes do early return no note-details-dialog.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 18:04:41 +00:00
Felipe Coutinho
81cc99cd91 fix: lista de estabelecimentos não abre sozinha e remove check icon
Remove onFocus que abria o popover automaticamente ao focar no input
vazio. Agora só abre quando o usuário começa a digitar.

Remove RiCheckLine dos itens da lista; item selecionado aparece em
bold (font-semibold) em vez de check verde.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:57:37 +00:00
Felipe Coutinho
71537cc16b fix: derivar período da fatura ao abrir dialog com cartão pré-preenchido
Quando o lancamento-dialog abre com cartaoId já definido (ex: vindo de
pré-lançamentos), agora roda deriveCreditCardPeriod() na inicialização
para calcular o período correto da fatura automaticamente, sem precisar
trocar o cartão e voltar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:53:26 +00:00
Felipe Coutinho
b9ea8f2864 style: cards de contas com grid responsivo
Substitui w-96 fixo por w-full no account-card e flex-wrap por
grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-3, mesmo padrão
dos cards de cartões e anotações.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:48:22 +00:00
Felipe Coutinho
29b3bc1086 refactor: ordenar tarefas por status e simplificar note dialog
Tarefas pendentes agora aparecem primeiro, concluídas por último,
tanto nos cards quanto nos modais (details e edit).

Note dialog mais minimalista: remove labels redundantes, contadores
de caracteres, descriptions verbosas. Tarefas com line-through
quando concluídas, botão de remover mais sutil.

Cards de anotação agora usam grid responsivo (1/2/3 colunas)
igual aos cards de cartões, em vez de largura fixa 440px.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:44:02 +00:00
Felipe Coutinho
edd5b8627d fix: corrigir hooks com dependências exaustivas
- magnet-lines: move useEffect antes do early return (hooks não podem
  ser chamados condicionalmente), adiciona disabled aos deps
- use-month-period: memoiza [...MONTH_NAMES] com useMemo
- lancamentos-filters: handleFilterChange em useCallback
- inbox-page: sortByTimestamp em useCallback, atualiza deps dos useMemo
- note-card: remove formattedDate não utilizado do useMemo

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:23:37 +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
8de22b9930 refactor: remover código morto e exports não utilizados
Remove 6 componentes não utilizados (dashboard-grid, expenses/income
by category widgets, installment analysis panels, fatura-warning-dialog).

Remove funções/tipos não utilizados: successResult, generateApiToken,
validateApiToken, getTodayUTC/Local, formatDateForDb, getDateInfo,
calculatePercentage, roundToDecimals, safeParseInt/Float, isPeriodValid,
getLastPeriods, normalizeWhitespace, formatCurrency wrapper,
InboxItemInput, InboxBatchInput, ProcessInboxInput, DiscardInboxInput,
LancamentosColumnId, 5 funções de anticipation-helpers.

Redireciona imports de formatCurrency para lib/lancamentos/formatting-helpers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-26 17:19:33 +00:00
Felipe Coutinho
4ca037d6b2 style: animação suave nos dialogs via CSS keyframes
Substitui classes do tailwindcss-animate (não instalado) por keyframes
CSS nativos. Efeito de fade + scale (96%→100%) ao abrir e fechar,
sem conflito com o posicionamento translate do Tailwind v4.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-24 16:57:32 +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
af7dd6f737 refactor: reestruturar links da topbar em 5 grupos lógicos
- dashboard (direto)
- lançamentos▾ → lançamentos / pré-lançamentos / calendário
- finanças▾ → cartões / contas / orçamentos
- organização▾ → pagadores / categorias / anotações
- análise▾ → insights / tendências / uso de cartões

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 23:01:59 +00:00
Felipe Coutinho
811aa2d730 style: lowercase nos triggers com subitem
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:56:07 +00:00
Felipe Coutinho
2632849134 style: links da topbar em lowercase
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:54:46 +00:00
Felipe Coutinho
274ac61a2b design: bg-card sem borda, shadow-xs sutil
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:52:01 +00:00
Felipe Coutinho
fdb5782b8b design: refatorar topbar para visual neutro refinado
- bg-background + border-b (sem cor primária no fundo)
- Links: pill arredondado, hover bg-accent suave, sem underline
- Link ativo: pill bg-primary/10 text-primary
- Trigger aberto: mesma aparência do hover
- Mobile: mesmo padrão de ativo com pill primário

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:51:54 +00:00
Felipe Coutinho
d24157ed5b refactor: desacoplar componentes do top-nav-menu em arquivos separados
- nav-styles.ts: constantes de estilo (linkBase, linkIdle, linkActive, triggerClass)
- simple-nav-link.tsx: link direto com estado ativo
- dropdown-link-list.tsx: lista de itens de dropdown com tipo DropdownLinkItem
- mobile-nav-link.tsx: MobileNavLink e MobileSectionLabel para o Sheet mobile
- top-nav-menu.tsx: apenas TopNavMenu, importa dos arquivos acima

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:38:29 +00:00
Felipe Coutinho
87f919b9f5 fix: reverter espaçamento dos links para px-3 original
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:32:11 +00:00
Felipe Coutinho
ba11a71892 fix: aumentar opacidade dos links da topbar de /70 para /90
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:29:04 +00:00
Felipe Coutinho
72ef572f11 fix: equalizar espaçamento entre links com e sem seta
Links simples recebem pr-7 (28px) para compensar os 16px da
seta (ml-1 + size-3) dos triggers com dropdown.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:28:26 +00:00
Felipe Coutinho
8d3bdb53b5 fix: esconder seta dos triggers para alinhar com links simples
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:26:25 +00:00
Felipe Coutinho
7064351845 feat: ajustar estilo dos links da topbar
- Link ativo: só text-primary, sem fundo
- Hover: text-foreground + underline (sem fundo)
- Espaçamento uniforme px-3 em links e triggers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 22:21:58 +00:00
Felipe Coutinho
8054fa4a85 fix: corrigir posicionamento dos dropdowns da topbar
viewport={false} faz cada dropdown abrir abaixo do seu trigger
ao invés de sempre na posição inicial do NavigationMenu.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 21:31:04 +00:00
Felipe Coutinho
bb16fe7e18 feat: mudar background da topbar para bg-card com borda inferior
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 21:23:37 +00:00
Felipe Coutinho
417d608b77 feat: trocar cores da topbar de primary-foreground para foreground
Links, triggers, ícones e ações passam a usar text-foreground
e hover:bg-foreground/10, removendo o override de CSS vars.
Logo text usa dark:invert ao invés de invert sempre.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 21:23:29 +00:00
Felipe Coutinho
32b7f7b687 feat: centralizar conteúdo da topbar no max-w-8xl
Envolve logo, nav e ações num container max-w-8xl mx-auto
para alinhar com a largura do conteúdo das páginas.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-22 20:39:12 +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
446ab0bb38 Adicionado botão para atualizar a pagina 2026-02-21 21:28:36 +00:00
Guilherme Bano
7b3979ad8e Feito uma correção de bug onde o diálogo principal de nova conta fechava inesperadamente 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
4084f8b9d0 feat: reformulação completa da landing page
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>
2026-02-16 20:49:20 +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