Gym Bro 😈

License Python FastAPI Vue/JS Docker

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. Клонируйте репозиторий:

    git clone https://github.com/your-username/gym-bro.git
    cd gym-bro
    
  2. Настройте секреты (опционально, для продакшена обязательно):

    cp .env.example .env
    # Отредактируйте .env, замените JWT_SECRET на длинную случайную строку
    
  3. Соберите и запустите:

    docker compose up -d --build
    
  4. Откройте браузер:

    http://localhost
    
  5. Зарегистрируйтесь и начинайте качаться!

📂 Структура проекта

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

S
Description
No description provided
Readme 183 KiB
Languages
JavaScript 51.3%
Python 40.8%
CSS 7.2%
HTML 0.4%
Dockerfile 0.3%