# Gym Bro 😈 ![License](https://img.shields.io/badge/license-MIT-blue.svg) ![Python](https://img.shields.io/badge/python-3.11+-blue.svg) ![FastAPI](https://img.shields.io/badge/FastAPI-0.104-green.svg) ![Vue/JS](https://img.shields.io/badge/frontend-Vanilla_JS-yellow.svg) ![Docker](https://img.shields.io/badge/docker-ready-2496ED.svg) **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 ### Установка 1. Клонируйте репозиторий: ```bash git clone https://github.com/your-username/gym-bro.git cd gym-bro ``` 2. Настройте секреты (опционально, для продакшена обязательно): ``` bash cp .env.example .env # Отредактируйте .env, замените JWT_SECRET на длинную случайную строку ``` 3. Соберите и запустите: ```bash docker compose up -d --build ``` 4. Откройте браузер: ```text http://localhost ``` 5. Зарегистрируйтесь и начинайте качаться! ### 📂 Структура проекта ``` text 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 приветствуются! 1. Форкните проект. 2. Создайте ветку feature/amazing-feature. 3. Коммитьте изменения. 4. Пушьте в GitHub. 5. Открывайте Pull Request. ### 📄 Лицензия MIT License. ---- Made with ❤️ and heavy weights by ivan-igorevich