all posts

Fiz um app pra parar de treinar com planilha

Next.jsReactTypeScriptTailwind2 min read

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