ZAPFIT — это приложение для анализа спортивных активностей, управления тренировочными планами и отслеживания здоровья с применением AI.
Живое демо — открывается в браузере с тестовыми данными, Electron не нужен.
- Автоматическая генерация 12-недельных оптимизированных планов
- Периодизация: Linear / Block / Undulating
- Фазы: Build → Peak → Taper
- Автоматическое планирование сессий
- Анализ данных из Strava (интеграция)
- CTL/ATL/TSB метрики (Chronic Training Load)
- Карты маршрутов с GPX поддержкой
- История всех активностей
- SMART цели (Specific, Measurable, Achievable, Relevant, Time-bound)
- Типы: Distance, Duration, Elevation, Power, HR-based
- Отслеживание прогресса в реальном времени
- Архив завершенных целей
- 70 предзагруженных блюд с БЖУ
- Холодильник для создания кастомных рецептов
- Категоризация и фильтрация
- Расчет питательных показателей
- Ежедневный счетчик (синхронизирован)
- История потребления
- Уведомления о нормах
- Визуализация тренировок из плана
- История активностей
- Вода и соревнования
- День подробно
- Сохранение фото активностей
- Галерея маршрутов
- Экспорт
- Node.js ≥ 16.0.0
- npm ≥ 8.0.0
- Electron 42.0.1 (устанавливается автоматически)
# Клонировать репозиторий
git clone https://github.com/yourname/zapfit.git
cd zapfit
# Установить зависимости
npm install
# Запустить dev сервер + Electron
npm run electron:dev# Собрать ЕХЕ для Windows
npm run electron:build
# Только Vite build
npm run build
# Preview Vite build
npm run previewГотовый установщик будет в папке release/
# Собрать образ
docker build -t zapfit:1.1.0 .
# Запустить контейнер
docker run -p 8000:5000 zapfit:1.1.0Приложение будет доступно на http://localhost:8000
docker-compose up -dzapfit/
├── src/
│ ├── main/ # Electron Main Process
│ │ ├── index.js # App entry point
│ │ ├── db.js # SQLite БД (sql.js)
│ │ └── ipcHandlers.js # IPC handlers (500+ LOC)
│ ├── preload/
│ │ └── index.js # Preload script (API expose)
│ └── renderer/ # React компоненты
│ ├── App.jsx
│ ├── components/
│ │ ├── Dashboard.jsx # Главная страница
│ │ ├── Health.jsx # Здоровье (вода, питание, сон)
│ │ ├── Calendar.jsx # Календарь тренировок
│ │ ├── GoalSetting.jsx # Настройка целей
│ │ ├── TrainingPlans.jsx # Планы тренировок
│ │ ├── RideModal.jsx # Детали активности
│ │ └── health-tabs/ # Компоненты вкладок
│ ├── services/
│ │ └── EventEmitter.js # Event bus
│ └── styles/
│ └── index.css
├── tools/ # Вспомогательные скрипты
├── scripts/ # Migration скрипты
├── docker/ # Docker конфиг
├── release/ # Собранные ЕХЕ
├── vite.config.js # Vite конфиг
├── electron-builder.json # Electron Builder конфиг
├── tailwind.config.js # Tailwind CSS
├── postcss.config.cjs # PostCSS
└── package.json
- sql.js (SQLite в памяти с сохранением на диск)
- Расположение:
~/.config/zapfit/ZAPFIT.db(Linux/Mac) или%APPDATA%/zapfit/ZAPFIT.db(Windows)
| Таблица | Назначение | Ключевые колонки |
|---|---|---|
activities |
Активности из Strava | id, date, distance, duration, type |
training_plans |
Тренировочные планы | id, name, start_date, end_date |
training_weeks |
Недели плана | id, plan_id, week_number, focus_type |
training_sessions |
Сессии тренировок | id, week_id, session_type, intensity |
goals |
Цели пользователя | id, goal_type, target_value, progress |
water |
Дневная вода | date, ml |
water_entries |
История воды | id, amount, time |
nutrition_data |
Питание | date, dish_name, calories, protein |
standard_dishes |
Шаблоны блюд | id, name, category, calories, protein |
sleep_data |
Сон | date, duration, quality |
fitness_data |
Fitness метрики | date, ctl, atl, tsb |
competitions |
Соревнования | date, name, type |
gears |
Снаряжение | id, name, type |
window.electronAPI.getRides() // Получить все активности
window.electronAPI.refreshStravaToken() // Обновить токен Strava
window.electronAPI.importStrava() // Импортировать из Stravawindow.electronAPI.generateAIPlan(params) // Генерация AI плана 🆕
window.electronAPI.createTrainingPlan(data) // Создать план
window.electronAPI.getTrainingPlans() // Получить все планы
window.electronAPI.getTrainingPlanDetail(id) // Детали плана
window.electronAPI.updateTrainingPlan(id, data) // Обновить планwindow.electronAPI.addGoal(goal) // Добавить цель
window.electronAPI.getGoals() // Получить цели
window.electronAPI.updateGoal(id, data) // Обновить цель
window.electronAPI.deleteGoal(id) // Удалить цельwindow.electronAPI.addWater(amount) // Добавить воду
window.electronAPI.getWater() // Получить дневную воду
window.electronAPI.getWaterHistory() // История воды
window.electronAPI.updateWater(id, amount) // Обновить запись
window.electronAPI.deleteWater(id) // Удалить записьwindow.electronAPI.getStandardDishes(category) // Получить блюда
window.electronAPI.getDishCategories() // Категории блюд
window.electronAPI.addDishCategory(name) // Добавить категорию
window.electronAPI.query(sql, params) // Прямой SQL запрос
window.electronAPI.run(sql, params) // Прямое SQL выполнениеwindow.electronAPI.updateActivityPhotos(id, photos) // Сохранить фото 🆕При обновлении с v1.0.x на v1.1.0 автоматически выполняются:
-- Добавление колонок в goals
ALTER TABLE goals ADD COLUMN goal_type TEXT DEFAULT "distance";
ALTER TABLE goals ADD COLUMN unit TEXT DEFAULT "км";
ALTER TABLE goals ADD COLUMN start_date TEXT;
ALTER TABLE goals ADD COLUMN target_date TEXT;
ALTER TABLE goals ADD COLUMN progress_percent REAL DEFAULT 0;
-- Добавление фото в activities
ALTER TABLE activities ADD COLUMN photos TEXT;
-- Добавление fitness метрик
ALTER TABLE fitness_data ADD COLUMN ctl REAL DEFAULT 0;
ALTER TABLE fitness_data ADD COLUMN atl REAL DEFAULT 0;
ALTER TABLE fitness_data ADD COLUMN tsb REAL DEFAULT 0;Создайте .env в корне проекта:
# Strava API
VITE_STRAVA_CLIENT_ID=your_client_id
VITE_STRAVA_CLIENT_SECRET=your_client_secret
# БД путь (опционально, по-умолчанию ~/.config/zapfit)
DB_PATH=~/.config/zapfit/ZAPFIT.db
# AI План (опционально)
OPENAI_API_KEY=sk-...import { eventEmitter } from './services/EventEmitter';
// Слушать событие
eventEmitter.on('training-plan-updated', (data) => {
console.log('План обновлен:', data);
});
// Отправить событие
eventEmitter.emit('training-plan-updated', {
planId: 123,
action: 'create'
});Поддерживаемые события:
training-plan-updated- План изменилсяwater-updated- Вода добавлена/удаленаgoal-created- Цель созданаcompetitions-updated- Соревнования изменились
- ✅ Фиксирована синхронизация воды между Dashboard и Water страницей
- ✅ Фиксированы блюда без названий (проблема с prepare())
- ✅ Добавлена поддержка загрузки фото
- ✅ Тренировочные планы теперь синхронизируются с календарем
- ✅ Добавлена полная система целей с отслеживанием прогресса
- ✅ Исправлены missing tables ошибки (sleep_data, training_weeks, dish_categories)
- Создать таблицу в
src/main/db.js - Добавить IPC handler в
src/main/ipcHandlers.js - Expose в
src/preload/index.js - Использовать в React компонентах
# Включить dev tools
npm run electron:dev # Автоматически открывает DevTools
# Посмотреть логи
tail -f ~/.config/zapfit/logs.txt # Linux/Mac
Get-Content $env:APPDATA\zapfit\logs.txt -Tail 50 # PowerShell# Выполнить скрипт инспекции
node scripts/inspect_db.js- Скачать
ZAPFIT Setup 1.1.0.exe - Запустить установщик
- Выбрать папку установки
- Завершить
docker run -d \
--name zapfit \
-p 8000:5000 \
-v /data/zapfit:/app/data \
zapfit:1.1.0Готовые образы для:
- Docker Hub
- GitHub Container Registry
- AWS ECR
- Issues: GitHub Issues
- Email: support@zapfit.dev
- Docs: Full Documentation
Спасибо:
- Strava за API
- React сообществу
- Electron разработчикам
- Всем тестировщикам и контрибьюторам
UNLICENSED - Все права защищены © 2026 ZAPFIT Team
Текущая версия: 1.1.0
Последнее обновление: 15 мая 2026
Автор: mrSaT13
Repository: GitHub