Victor Pasqualini
Todos os projetos

A regra que define o produto

Na planilha, aporte parece saída e rendimento parece entrada. Contabilmente está certo e como relatório é desastroso: somar essas linhas ao fluxo de caixa infla receita e despesa ao mesmo tempo e destrói qualquer noção de quanto você gasta e poupa. Por isso toda linha cai em um de cinco baldes, e só dois alimentam o fluxo de caixa.

src/lib/types.ts: o produto inteiro em uma union
export type Bucket =
  | "income"           // feeds the cash flow, as money in
  | "expense"          // feeds the cash flow, as money out
  | "invest_contrib"   // a contribution is not spending
  | "invest_withdraw"  // a withdrawal is not income
  | "invest_yield";    // a yield is not income either
A tela de investimentos, onde aporte e rendimento são o assunto (dados de demonstração)

Lê a sua planilha, não um formato novo

Cole o link de compartilhamento do OneDrive: o leitor converte em URL de download, adivinha a linha de cabeçalho e as colunas por palavra-chave, e mostra as primeiras linhas para você conferir. .xlsx, .csv e .tsv funcionam igual; o leitor de .xlsx é próprio, escrito sobre o fflate, então a única dependência de verdade é um descompactador de zip.

Formatos brasileiros lidos como estão, sem configuração
date         description        amount        segment      asset
04/09/2026   Mercado            R$ 312,45     Mercado
05/09/2026   Aporte Tesouro     (R$ 500,00)   Investimento Tesouro Selic
10/09/2026   Salário            R$ 8.400,00   Renda

# dd/mm/yyyy, "R$ 1.234,56" and parentheses-as-negative are read as they are.
# The filled "asset" column is the strongest signal that a row is an investment.

Sem banco de dados, de propósito

Nada é importado e nada é armazenado: adicione uma linha na planilha, clique em atualizar, o painel muda. A busca tem cache de 60 segundos e guarda contra SSRF, e o único estado persistido é um arquivo de configuração local: link, aba, mapeamento de colunas e regras de classificação. Apague e o app volta ao estado inicial.

O painel do mês lendo a planilha direto; o cabeçalho diz qual arquivo foi lido

Cinco telas, e gráficos que não escapam da paleta

Painel do mês, tela de investimentos onde aporte e rendimento são o assunto e não ruído, tela de cartões, o extrato completo e filtrável (inclusive as linhas que o leitor não conseguiu interpretar) e a configuração. Os gráficos são SVG escrito à mão e nunca leem hexadecimal: toda cor vem de uma custom property, então tema claro e escuro não divergem e nenhum componente consegue fugir da paleta.

A tela de cartões: SVG escrito à mão, e toda cor vinda da paleta
Próximo projetoPouch

Quase nada funciona; o difícil é saber o quê. Pesquisa primeiro, e só dinheiro de testnet.