[PITCH] FitLogr: projeto de aplicativo web para registro de treinos de musculação

Banner FitLog

O FitLogr é um aplicativo web em que usuários cadastrados podem registrar seus treinos na academia e acompanhar seu histórico e sua evolução na atividade física.

Desenvolvi este projeto full-stack após enfrentar problemas técnicos com o aplicativo mobile gratuito que usava para anotar meus treinos. Ou seja, os bugs me faziam perder tempo e minha concentração entre os exercícios na academia.

Além disso, criar o FitLogr foi uma oportunidade de estudar e rever tecnologias que já estudei, mas que sofreram alterações nos últimos anos. E também desenvolver mais um projeto ligado à utilização no mundo real.

O FitLogr possui duas partes. O front end utiliza React com framework Next.js, além do Tailwind CSS para o design das telas. Já o back end consiste em uma API RESTful desenvolvida utilizando Java e Spring Boot, com os frameworks Spring Security, Spring Data e Spring HATEOAS, e banco de dados MariaDB.

Por conta do manifest.json, o web app pode ser instalado em smartphones ao adicioná-lo à tela inicial do dispositivo pelo navegador, e daí ser utilizado como se fosse um aplicativo convencional.

Ambas as partes do FitLogr rodam em contêineres no Google Cloud Run. A API se comunica com o banco de dados MariaDB localizada em uma máquina virtual do Compute Engine.

Tanto os códigos-fonte da API e do front end do FitLogr estão disponíveis no meu GitHub. Demonstração neste link.

Features do FitLogr

  • Design simples e sem distrações. O foco é no exercício, e não no celular.
  • Login via GitHub ou utilizando login e senha (a autenticação de usuário de demonstração utiliza este método).
  • Autenticação e autorização via JWT
  • Possibilidade de continuar o treino de onde parou após navegar por outras telas do FitLogr ou fechar a aplicação.
  • Visualização das cargas e repetições de exercício em treinos anteriores.
  • Cálculo e visualização do One Repetition Max (1RM) de um exercício no treino atual e nos últimos treinos, utilizando a fórmula de Brzycki.
  • Lista de exercícios disponíveis controlada por administradores para consistência de dados.
  • Três categorias de usuários: administrador, membro e demonstração.
  • Uso de políticas CORS na API para bloquear solicitações fora do ambiente usado pelo front end.

No meu blog conto um pouco mais sobre alguns dos desafios que enfrentei no desenvolvimento desse projeto.

Muito bom aplicativo, testei e gostei muito. Tenho apenas dois comentários (talvez sugestão) com relação a lista de exercicios, não sei se é pertinente ou não:

  1. Não encontrei alguns exercicios que eu faço (usei apenas em demo, talvez já tenha), já pensou em ter uma opção onde o usuário possa cadastrar seus exercicios personalizados? (talvez um recurso pago no app)
  2. Na lista de exercicios a única forma de buscar é rolando a lista, talvez um campo de busca filtrando pelos nomes facilitaria, não sei se pra você faz sentido, mas no meu uso faria.

No mais é isso, o aplicativo ficou muito bom mesmo.

Olá, Rodrigo! Obrigado pelos elogios e sugestões, fico feliz que tenha gostado :) A primeira é proposital, somente administradores podem cadastrar exercícios na lista disponível, por questões de consistência (evitar duplicatas e registros errados). Já a filtragem de exercícios é algo que com certeza será útil, principalmente conforme novos exercícios forem sendo adicionados. Vou ver isso para os futuros commits :)

Que projeto legal, Matheus. Tive o mesmo problema que você e busquei resolver por conta (mal de dev?). https://www.treinoeasy.com.br/ apenas te permite criar o treino e gera um link final que te permite acessá-lo diretamente, ou baixar um PDF (tem ajudado bastante alguns amigos que são personal trainers na hora de criarem os treinos dos alunos). Sem dúvidas, tu resolveu de maneira muito mais elegante e completa. Se quiser conferir como um treino é renderizado sem precisar cadastrar, dê uma olhada no meu treino: https://www.treinoeasy.com.br/training/32c270e3-d2b5-41e8-b1c4-9a87f0142529 Parabéns e desejo que seu projeto voe!

Obrigado, José. Resolver por conta é coisa de dev mesmo, ainda mais quando é algo útil na vida real 😂 O seu sistema é bastante interessante também, parece ser mais focado para os treinadores.

Ficou muito bom, Matheus! O artigo me chamou muita atenção porque recentemente eu lancei um projeto com o intuito bem semelhante. Na verdade, lancei a versão inicial do que virá a ser um "rastreador de progressão de carga". Se quiser dar uma olhada, aqui está o link: https://gainz-app-nine.vercel.app/

Excelente ferramenta! Parabens pelo trabalho.