Fiz um app pra parar de treinar com planilha
Heads up — this one's in Portuguese. Your browser's translate button will get you most of the way.

Usei planilha por uns três anos pra anotar treino, e o que mais me irritava era o momento de anotar. Você tá em pé, com uma mão livre, o celular escorregando, e precisa dar zoom pra acertar uma célula minúscula. Mais de uma vez eu digitei a carga na linha do exercício errado e só fui perceber muito depois.
Testei uns apps prontos antes. Todos queriam cadastro, assinatura, feed e notificação. Aí fiz o meu, o Workount.
A ideia
Eu queria uma coisa que não pedisse atenção. Na academia eu tenho pouca paciência e uma mão livre, então o app não pergunta nada que dê pra deduzir sozinho: abre já sabendo qual é o treino de hoje e se eu já fiz ele.
Ele também não comemora nada. Se você bate um recorde, aparece uma marca do lado da série e é isso. Não tem notificação te chamando de volta nem nada social.
E você segue um programa por vez. Dá pra ter vários salvos, mas só um ativo, senão a tela inicial não teria como responder o que treinar hoje sem me perguntar antes.
O que ele faz
Você monta o programa: os dias, os exercícios de cada dia, séries e faixa de reps. Depois registra a sessão a partir dele.
Do lado de cada série ele mostra o que você fez da última vez naquele exercício. Era pra isso que eu abria a planilha, e é quase a única coisa que eu preciso saber durante o treino.
Tem também timer de descanso, histórico e uns gráficos por programa: volume, evolução de carga e frequência.
A stack
Next.js com Supabase, Postgres e login com Google. Tailwind e shadcn/ui na interface, IndexedDB pro estado do treino em andamento, Recharts nos gráficos. Roda como PWA, dá pra instalar na tela inicial. Deploy na Vercel.
Duas coisas que fiz diferente do que tinha imaginado
A tela de treino não faz chamada de rede nenhuma. Ela baixa tudo que precisa na hora que você começa, guarda no IndexedDB e só escreve no servidor quando você finaliza. Com isso o sinal não importa, e dá pra fechar o navegador no meio sem perder nada.
O timer de descanso guarda a hora em que o descanso acaba, em vez de ir descontando segundo a segundo. Um contador trava quando a tela do celular bloqueia, e é aí que ele tá contando.
Quer testar?
Está no ar em workount.luisoila.dev, é só entrar com o Google.
O código está no GitHub sob MIT. Se for olhar, tem uma pasta docs/adr/ com o motivo de cada decisão dessas escrito por extenso.
Related posts

Pare de escrever skeletons na mão
Como gerar skeletons a partir da sua UI real e resolver a parte chata dos loading states.

Como construir um botão com variantes - entendendo o que copiamos e colamos.
Construindo um Button com variantes do zero pra entender o que realmente tem por trás do código que a gente copia do shadcn/ui.