Skip to content

Repository files navigation

FitCore

FitCore — мобильное фитнес-приложение для самостоятельных пользователей и работы с тренером. Приложение объединяет тренировки, питание, ежедневные показатели, рекомендации, прогресс и обмен данными с FastAPI-бэкендом.

Проект находится в активной разработке. Основные пользовательские сценарии уже реализованы, но production-авторизация Apple, публикация сборок и часть серверной инфраструктуры ещё требуют завершения.

Возможности

Для клиента

  • персональный план тренировок;
  • перенос и пропуск занятий с учётом причины;
  • тренировочная сессия с таймером;
  • дневник питания и расчёт КБЖУ;
  • поиск продуктов и сканирование штрихкодов;
  • ежедневные отметки сна, самочувствия и восстановления;
  • отслеживание веса, замеров и фотографий прогресса;
  • привычки, рекомендации, уведомления и недельные отчёты;
  • получение обновлений от тренера.

Для тренера

  • список и карточки клиентов;
  • корректировка тренировок и питания;
  • заметки, сообщения и контроль прогресса;
  • недельные отчёты, аналитика и рекомендации.

Для администратора

  • статистика пользователей и связей тренер–клиент;
  • аудит действий;
  • экспорт данных и резервные копии;
  • управление служебными сценариями backend.

Стек

  • Expo SDK 54;
  • React Native 0.81;
  • TypeScript;
  • Expo Router;
  • Zustand;
  • FastAPI;
  • SQLAlchemy 2;
  • Alembic;
  • SQLite для локальной разработки;
  • PostgreSQL предусмотрен для production;
  • pytest.

Быстрый запуск на Windows

Понадобятся Node.js LTS, Python 3.11–3.13 (рекомендуется Python 3.12) и PowerShell.

Set-ExecutionPolicy -Scope Process Bypass
.\setup.ps1
.\start-dev.ps1

setup.ps1 выполняет следующие действия:

  1. устанавливает frontend-зависимости через npm ci;
  2. создаёт backend\.venv;
  3. устанавливает backend-зависимости;
  4. создаёт локальные .env, если их ещё нет;
  5. применяет миграции Alembic.

start-dev.ps1 открывает frontend и backend в отдельных окнах PowerShell.

После запуска:

  • Expo Dev Tools отображаются в консоли frontend;
  • API доступен по адресу http://127.0.0.1:8000;
  • Swagger доступен по адресу http://127.0.0.1:8000/docs.

Настройка адреса API

Для Android-эмулятора в корневом .env обычно нужен адрес:

EXPO_PUBLIC_FITCORE_API_URL=http://10.0.2.2:8000

Для физического телефона укажите локальный IPv4-адрес компьютера:

EXPO_PUBLIC_FITCORE_API_URL=http://192.168.1.50:8000

Телефон и компьютер должны находиться в одной локальной сети.

Отдельный запуск

Backend:

.\start-backend.ps1

Мобильное приложение:

.\start-app.ps1

Проверки

.\check.ps1

Скрипт запускает:

  • TypeScript-проверку;
  • ESLint;
  • backend-тесты;
  • применение миграций;
  • проверку, что модели SQLAlchemy не расходятся с Alembic.

Отдельные команды:

npm run typecheck
npm run lint

cd backend
.\.venv\Scripts\python.exe -m pytest
.\.venv\Scripts\alembic.exe check

Такие же проверки выполняются в GitHub Actions при каждом push и pull request.

На текущем этапе backend содержит 52 теста с общим покрытием 84%.

Демонстрационный сценарий

После запуска backend можно открыть Swagger и выполнить POST /dev/seed. Маршрут создаёт демонстрационные аккаунты клиента, тренера и администратора вместе с тестовыми данными. Он доступен только в development, local и test; production-среда блокирует /dev/*.

Для проверки приложения удобнее идти в таком порядке:

  1. пройти локальный вход;
  2. открыть dashboard клиента;
  3. добавить тренировку и приём пищи;
  4. заполнить ежедневный check-in;
  5. открыть кабинет тренера и карточку клиента;
  6. проверить недельный отчёт, заметки и сообщения;
  7. открыть административные экраны аналитики, аудита и экспорта.

Состояние проекта

Проверено автоматически:

  • 52 backend-теста;
  • 84% покрытия backend;
  • миграции Alembic и отсутствие расхождений моделей со схемой;
  • TypeScript-проверка;
  • ESLint после чистой установки зависимостей;
  • GitHub Actions для frontend и backend.

Основные ограничения текущей версии:

  • Apple-вход в production намеренно отключён до проверки Identity Token;
  • release-сборки EAS ещё не настроены;
  • SQLite используется только для локальной разработки;
  • фотографии прогресса пока хранят URI, а не загружаются в объектное хранилище.

Миграции базы данных

Создать миграцию после изменения моделей:

cd backend
.\.venv\Scripts\alembic.exe revision --autogenerate -m "описание изменения"
.\.venv\Scripts\alembic.exe upgrade head

Перед коммитом миграцию нужно просмотреть вручную: Alembic корректно определяет большинство изменений схемы, но не понимает бизнес-смысл переименований и преобразования существующих данных.

Авторизация и безопасность

Локальный Apple-вход пока работает как тестовый сценарий по стабильному appleUserId. На production-среде этот маршрут намеренно заблокирован до подключения полноценной проверки Apple Identity Token.

Клиент не может самостоятельно назначить себе роль тренера или администратора. Очередь /sync/push требует JWT и привязывает клиентские записи к авторизованному пользователю; тренер может синхронизировать изменения только для назначенных ему клиентов. Просмотр и очистка диагностической очереди доступны только администратору. Development-заголовок X-Dev-User-Id и маршруты /dev/* доступны только в локальной или тестовой среде.

CSV-экспорт экранирует значения, которые Excel может выполнить как формулы, и возвращается с UTF-8 BOM для корректного открытия русских данных в Windows. Экспорты и резервные копии помечаются Cache-Control: no-store. JSON-снимок базы по умолчанию не включает refresh-токены и Expo push-токены; полная SQLite-копия создаётся согласованно через SQLite backup API. Ручное создание и очистка audit-событий запрещены в production.

Для production необходимо задать:

FITCORE_ENV=production
FITCORE_DATABASE_URL=postgresql+psycopg://user:password@host/database
FITCORE_JWT_SECRET=длинный-случайный-секрет
FITCORE_CORS_ORIGINS=https://ваш-домен

Приложение не запустится в production со стандартным JWT-секретом или открытым CORS *.

Структура

app/                    экраны и маршруты Expo Router
src/components/         переиспользуемые UI-компоненты
src/features/           бизнес-логика, stores, API-клиенты и сервисы
backend/app/api/        FastAPI-маршруты
backend/app/models/     SQLAlchemy-модели
backend/app/schemas/    Pydantic-схемы
backend/app/services/   серверные сервисы
backend/alembic/        миграции базы данных
backend/tests/          backend-тесты

Текущее ограничение

Это ещё не готовый релиз. Перед публикацией необходимо:

  • подключить настоящую проверку Apple Identity Token;
  • постепенно продолжить разделение наиболее крупных пользовательских экранов без изменения поведения;
  • проверить приложение на физических Android- и iOS-устройствах;
  • подготовить собственные иконки и splash screen;
  • настроить EAS Build и production-переменные;
  • провести сквозное тестирование синхронизации, push-уведомлений и сборок на реальных устройствах.

Использование кода

Исходный код опубликован для демонстрации архитектуры, подхода к разработке и использования проекта в портфолио.

Копирование, распространение, модификация и коммерческое использование проекта без письменного разрешения автора не допускаются.

Copyright © 2026 Данила Александров. Все права защищены.

About

Мобильное фитнес-приложение на Expo и FastAPI: тренировки, питание, прогресс, кабинет тренера, аналитика и защищённая синхронизация.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages