Criei um dashboard open-source para Claude Code

1 de Janeiro, 20265 min de leitura
Featured image for article: Criei um dashboard open-source para Claude Code - Quanto custa usar o Claude Code sem subscription? CARO! O crescimento das conversas é exponencial ou linear?...
#ai#react#typescript

Eu pensava que o consumo de tokens crescia exponencialmente de acordo com o tamanho da conversa.

Eu estava errado. O crescimento é linear.

Gráfico de consumo de tokens de uma conversa do Claude Code

Após 10 dias sem ligar o notebook, decidi criar algo novo no último dia do ano: um dashboard open-source com métricas de uso para Claude Code.

Funciona completamente offline, baseado nos arquivos que ele salva no seu computador 🗄️.

Vídeo demo:

O que que ele mede?

Não analisa conteúdo, apenas quantidade, volume e tempo ⌛️, sobre os seguintes domínios: projetos, sessões, mensagens e tokens (de entrada, saída e cache).

  • Uso de tokens por sessão/pasta (input e output)
    • Ordenado por: quantidade de token, "novidade/mais recente" ou mensagens
  • Horário de maior atividade
    • Baseado em mensagens, tokens ou sessões
  • Custo estimado (se eu usasse o modo de cobrança por API Key ☠️ ao invés de subscription)

Por que é útil?

Talvez não seja, mas eu gosto de gráficos bonitos e atualizações em tempo-real 😁

Como os dados já estão lá, resolvi fazer, por curiosidade mesmo. Usei a minha stack de estimação: Bun, TypeScript e React.

Continuarei usando o Claude Code, então os números devem subir ⬆️. Número grande = gráfico bonito = pessoa feliz.

Serve também como análise pessoal de uso da ferramenta, e combina com o meu lema de novos projetos para 2026:

Criar algo útil para mim, e então distribuí-lo. Se não é útil para mim, não criar.

Como funciona?

Bun is all you need Diagrama de Sequência explicando como funciona o Dashboard

Bun -> Chokidar -> 👀 -> 💿

Ao executar o arquivo src/server/index.ts, registramos um novo watcher (observador de arquivos) com o Chokidar na pasta global do Claude Code ($HOME/.claude), nos arquivos:

  • stats-cache.json
  • projects/**/**.jsonl
  • history.jsonl

A biblioteca permite cadastrar uma função de callback que será executada quando algum desses arquivos for alterado. Por baixo dos panos, ela utiliza a SYSCALL fsevents no MACOS e inotify no Linux (não sei como funciona no Windows, mas a biblioteca é cross-platform).

Além do watcher, iniciamos também um servidor web com Bun.serve na porta 3190 com alguns endpoints:

  • /ws -> Servidor WebSocket nativo do Bun (para comunicação em tempo real entre FE -> BE)
  • / -> Rota estática com arquivo ../client/index.html (aplicação React)
  • /api/{utils} e /health -> Endpoints úteis para a API

Bun -> WebSocket -> React

Assim que a notificação chega ao Bun, ele lê todos os arquivos e constrói um objeto massivo com as informações necessárias para o dashboard (sim, extremamente ineficiente, mas tem uma explicação), esse objeto é enviado para a aplicação React, que atualiza os gráficos.

Como foi feito?

Uma mistura de Vibe Coding com Vibe Engineering.

Não programei 1 linha de código na mão 😁, isso explica a ineficiência da arquitetura de transmissão de dados e prováveis problemas de qualidade (como a aplicação react viver dentro de um único arquivo index.html), mas o foco do projeto não era qualidade, e sim criar algo funcional o mais rápido possível.

Como estou de recesso nesse fim de ano (🎉), passei ~10 dias sem ligar o computador e hoje tirei 3h30m para finalizar a aplicação e escrever este post.

O primeiro commit foi feito no dia 20/12/2025, mas ficou parado desde então.

Primeiro commit

Vi que, no dia 21/12, lançaram um Claude Code Wrapped que segue uma abordagem parecida, mas resolvi terminar minha versão mesmo assim.

Conclusões

Se eu não pagasse o plano mensal do Claude Code ($20 ou $100), teria gasto quase $2000 dólares com o desenvolvimento dos meus projetos pessoais ☠️ (já que esse é o meu computador pessoal).

Custo estimado

E ainda bem que a CLI usa uma boa estratégia de cache, senão os gastos seriam bem maiores.

Se você conhece alguém que usa modelo de cobrança por API Token no Claude Code, avise-a urgentemente que ela está queimando dinheiro.

Vale MUITO mais a pena pagar 2 planos em contas diferentes e alternar entre elas (usando /login) quando o limite de uma for atingido.

Jamais opte por pagar por token, é simplesmente caro demais.

Com isso, vou ficando por aqui, um grande abraço e feliz começo de ano para você 😁🥂

Ah, se quiser aprender mais sobre como usar o Claude Code, escrevi um guia completo: Claude Code Setup 👀

Referências