Личный проект
Gym Tracker — мой пет-проект, PWA-приложение для автоматизированного учёта силовых тренировок. Работает офлайн, хранит данные на устройстве и синхронизируется через CRDT при подключении к серверу. Поддерживает рекомендации по прогрессии весов, историю тренировок и визуализацию оборудования.
Система рассчитывает веса и повторения на основе 1ПМ и периодизации (лёгкие, средние и тяжёлые тренировки). Алгоритм учитывает конфигурацию блинов и шаг веса, подбирая реальный доступный вес и корректируя диапазон повторений. Это избавляет пользователя от рутинных расчётов и поддерживает стабильный прогресс.
Под каждое упражнение можно настроить доступные блины и шаг изменения нагрузки. Рекомендованный вес отображается в наглядном виде — штанга или гантели с конкретным набором блинов. Такой подход снижает риск ошибок и делает приложение ближе к реальному тренировочному процессу.
Приложение сохраняет полную историю занятий, упражнений и подходов, что позволяет отслеживать прогресс на дистанции. Пользователь видит личные рекорды, графики изменения 1ПМ, рабочего веса и общего тренировочного объёма. Такой журнал заменяет блокнот или таблицы, упрощает анализ и делает результаты наглядными.
Gym Tracker полностью работает офлайн: все данные сохраняются в IndexedDB на устройстве пользователя, и приложение остаётся функциональным даже при длительном отсутствии сети. Пользователь может месяцами вести учёт тренировок без интернета, а интерфейс всегда остаётся отзывчивым и мгновенно обновляется при изменении данных.
Синхронизация реализована на базе библиотеки Y.js (CRDT). Поверх неё я написал слой базы данных с запросами, мутациями и хуками для React, что обеспечивает автоматическую репликацию изменений при появлении сети. Даже после длительного офлайна все операции корректно объединяются без конфликтов, сохраняя целостность истории и стабильность работы приложения.