Делаю бесплатное приложение календаря домашних силовых тренировок

В декабре 2023 года я в первый раз в жизни решил попробовать похудеть. На тот момент вес был 116 кг при росте 194 см. Из спорта я всю жизнь играю в мини-футбол на любительском уровне. За питанием никогда не следил, в зал никогда не ходил.

В результате перехода на нормальное питание, работой над образом жизни и началом занятий силовыми тренировками, к сентябрю 2024 года получилось уменьшить вес на 31 кг. Это был минимум.

Сейчас, спустя полгода, вес 89 кг. Нарастить мышечную массу гораздо сложнее, чем избавиться от жира. Надеюсь, что большая часть набранных кг являются мышцами. Косвенные доказательства - улучшение результатов (например, рост подтягиваний с 9 до 11) и визуальная разница на фото до/после, которые я делаю раз в 2-3 месяца.

Август 2024 - 88 кг сверху и март 2025 - 89 кг снизу.
Август 2024 - 88 кг сверху и март 2025 - 89 кг снизу.

Я работаю фронтенд-разработчиком. До этого я уже писал пет проекты, например, делал интернет-магазин https://github.com/dergunovs/mhz и библиотеку компонентов https://github.com/dergunovs/mhz-ui Для того, чтобы разработка шла веселее, параллельно на ютуб канале снимал про это видео и делал трансляции.

5 месяцев назад я начал писать приложение, чтобы сохранять результаты своих тренировок. Особенность в том, что я тренируюсь дома - у меня ограниченный набор оборудования и ещё более ограниченное количество времени, которое я трачу на занятия - судя по статистике в приложении, около 6 часов в месяц. Среднее занятие длится 40-45 минут.

Главная страница
Главная страница

Цель приложения - добавить ценности и осмысленности тренировкам, дать дополнительную мотивацию, сделать нормальное планирование.

https://github.com/dergunovs/fit - исходный код https://vkvideo.ru/playlist/15313879_11 - видео про разработку приложения.

Фронт: Typescript, Vite, Vue, Tanstack Query, Vitest

Бэк: Typescript, Fastify, Mongoose, MongoDB, Swagger

Сейчас в приложении можно регистрироваться, добавлять своё оборудование, выбирать веса для каждого упражнения по-умолчанию.

Профиль пользователя
Профиль пользователя

Вы формируете занятие из доступных упражнений, выбираете вес и количество повторов, можно добавлять сеты из разных упражнений, можно добавлять сразу несколько подходов одного упражнения. Затем сразу начинаете занятие или добавляете его в календарь.

Формирование занятия
Формирование занятия

В процессе выполнения занятия вы запускаете и останавливаете таймер. Благодаря этому сохраняется статистика по среднему времени выполнения каждого упражнения. Это даёт возможность видеть примерную длительность будущих занятий ещё при планировании.

Прохождение занятия
Прохождение занятия

На экране статистики есть календарь, графики и таблица с упражнениями.

Календарь занятий
Календарь занятий
Статистика по занятиям
Статистика по занятиям
Статистика по отдельным упражнениям
Статистика по отдельным упражнениям

Отдельно упомяну таймлайн каждого занятия во всплывающем окне внутри календаря. Наглядно видно, как проходило занятие, какие были перерывы на отдых. Занятия можно копировать, информацию о том, что было внутри одного занятия также можно скопировать в буфер обмена, чтобы, например, скинуть в удобном виде своему тренеру в телеграм.

Подробная информация о пройденном занятии
Подробная информация о пройденном занятии
Админка
Админка

Сейчас функциональность покрывает большинство моих потребностей, но в планах внедрение функциональности:

  • мультиязычность
  • добавление пользователями своих упражнений
  • корректировка веса, использованного в подходе
  • редактирование занятия в процессе его прохождения
  • тип пользователя "Тренер", с возможностью планировать тренировки подопечных
  • оффлайн-режим
  • таймер времени отдыха

Проект бесплатный и с открытым кодом. Я стараюсь учитывать сочетание скорости разработки, будущей расширяемости и появления новой функциональности. Например, архитектура более-менее универсальная, пишу юнит-тесты (уже 370), но слабая обработка ошибок и простейший дизайн.

Всегда буду рад конструктивной обратной связи по коду и функционалу.