V vitor.rocha
todos os projetos // projeto · fullstack

pulso.app

Plataforma de desempenho pessoal com nove seções — dashboard, semana, hábitos, estatísticas, metas, finanças, visão anual, temporizador e configurações — num visual de console de engenharia.

Banner do projeto pulso.app

Visão geral

O pulso.app acompanha hábitos e transforma os registros em análise: streaks, heatmap anual, percentuais por mês, metas com progresso, um módulo de finanças com recorrências e um temporizador de foco. A interface segue a estética de console de engenharia, com tipografia técnica, trilha de grade e tema claro/escuro.

O problema

Acompanhar hábitos de verdade pede mais que uma lista de tarefas: pede métricas calculadas sobre o histórico, visões por dia, semana, mês e ano, e dados que continuem seus — sem depender de um serviço em nuvem de terceiros.

A solução

O front é React 19 com Next.js 15 e Tailwind 4, com animações em Framer Motion, arrastar e soltar com dnd-kit e gráficos em Recharts. O backend é uma API em Go escrita só com a biblioteca padrão, persistindo num arquivo JSON — e o motor de métricas (streaks, metas, finanças com recorrências projetadas) foi portado para o Go, de modo que o cálculo vive junto dos dados.

Funcionalidades

  • Check-ins com streaks, recordes e insights automáticos
  • Heatmap anual e evolução mensal de conclusão
  • Metas com progresso e ordenação própria
  • Finanças com receitas, despesas e recorrências projetadas
  • Temporizador, pomodoro e cronômetro com presets
  • Busca global, seletor de mês que filtra todo o app e temas

Arquitetura

O app é dividido em contexts de dados e de temporizador, páginas por rota no App Router e uma camada de storage que fala com a API Go por HTTP. A lógica de métricas fica em módulos puros e testados (Vitest no front, go test no back), separados da interface — a mesma regra roda idêntica nos dois lados.

Screenshots

Desafios & aprendizados

O desafio central foi manter o motor de métricas idêntico em TypeScript e em Go — cada regra de streak e recorrência precisou de testes espelhados nos dois lados. No caminho, o projeto virou também um exercício de refino de UX: relógio que sincroniza no minuto cheio, foco devolvido ao gatilho ao fechar diálogos e um sistema de tokens de design que sustenta os dois temas.