99 lines
4.5 KiB
Markdown
99 lines
4.5 KiB
Markdown
# 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
|
|
|
|
### Установка
|
|
|
|
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
|