728d342a891b32085b516118ea214d5edfe8a91a
Gym Bro 😈
Gym Bro — это легковесный, self-hosted трекер тренировок с поддержкой офлайн-режима, синхронизации и режима тренера. Без лишнего веса, только мышцы. 💪
Особенности
- Offline First: Работает без интернета. Данные сохраняются локально (
localStorage) и синхронизируются при появлении связи. - Multi-user Support: Разделение данных между пользователями (JWT Auth). Каждый видит только свои тренировки.
- Trainer Mode: Режим для тренеров. Ведите несколько клиентов одновременно, присваивайте им уникальные цвета для визуального разделения.
- Dropsets & History: Поддержка дроп-сетов и мгновенная подсказка истории упражнений прямо во время подхода.
- Body Metrics: Гибкая система замеров тела (вес, объёмы, % жира) с историей изменений.
- No Build Step for Frontend: Чистый HTML/CSS/JS. Не нужен Webpack/Vite. Просто открой файл или залей на любой static host.
- Single Binary Deployment: Весь стек упакован в Docker Compose. Один командой поднимается БД, API и Веб-сервер.
🛠 Технологии
- Backend: Python 3.11, FastAPI, SQLAlchemy, SQLite, PyJWT, Bcrypt.
- Frontend: Vanilla JavaScript (ES Modules), CSS Variables, No Frameworks.
- Infrastructure: Docker, Nginx (as reverse proxy & static server).
🚀 Быстрый старт (Docker)
Требования
- Docker Engine
- Docker Compose Plugin
Установка
-
Клонируйте репозиторий:
git clone https://github.com/your-username/gym-bro.git cd gym-bro -
Настройте секреты (опционально, для продакшена обязательно):
cp .env.example .env # Отредактируйте .env, замените JWT_SECRET на длинную случайную строку -
Соберите и запустите:
docker compose up -d --build -
Откройте браузер:
http://localhost -
Зарегистрируйтесь и начинайте качаться!
📂 Структура проекта
gym-bro/
├── backend/ # FastAPI приложение
│ ├── routers/ # API эндпоинты
│ ├── models.py # SQLAlchemy модели
│ ├── schemas.py # Pydantic схемы
│ ├── auth.py # Логика JWT/Bcrypt
│ └── Dockerfile
├── frontend/ # Статические файлы
│ ├── js/ # ES модули логики
│ ├── styles/ # CSS
│ ├── index.html # Точка входа
│ ├── nginx.conf # Конфиг прокси
│ └── Dockerfile
├── data/ # Volume для SQLite (не коммитится!)
├── docker-compose.yml
└── README.md
🔐 Безопасность
- Пароли хэшируются с помощью bcrypt.
- Сессии управляются через JWT токены (HttpOnly cookie опция планируется).
- Все данные изолированы по owner_id на уровне БД.
- Внимание: Для продакшена обязательно измените JWT_SECRET в .env файле.
🤝 Вклад
Pull requests приветствуются!
- Форкните проект.
- Создайте ветку feature/amazing-feature.
- Коммитьте изменения.
- Пушьте в GitHub.
- Открывайте Pull Request.
📄 Лицензия
MIT License.
Made with ❤️ and heavy weights by ivan-igorevich
Description
Languages
JavaScript
51.3%
Python
40.8%
CSS
7.2%
HTML
0.4%
Dockerfile
0.3%