FitCore — мобильное фитнес-приложение для самостоятельных пользователей и работы с тренером. Приложение объединяет тренировки, питание, ежедневные показатели, рекомендации, прогресс и обмен данными с FastAPI-бэкендом.
Проект находится в активной разработке. Основные пользовательские сценарии уже реализованы, но production-авторизация Apple, публикация сборок и часть серверной инфраструктуры ещё требуют завершения.
- персональный план тренировок;
- перенос и пропуск занятий с учётом причины;
- тренировочная сессия с таймером;
- дневник питания и расчёт КБЖУ;
- поиск продуктов и сканирование штрихкодов;
- ежедневные отметки сна, самочувствия и восстановления;
- отслеживание веса, замеров и фотографий прогресса;
- привычки, рекомендации, уведомления и недельные отчёты;
- получение обновлений от тренера.
- список и карточки клиентов;
- корректировка тренировок и питания;
- заметки, сообщения и контроль прогресса;
- недельные отчёты, аналитика и рекомендации.
- статистика пользователей и связей тренер–клиент;
- аудит действий;
- экспорт данных и резервные копии;
- управление служебными сценариями backend.
- Expo SDK 54;
- React Native 0.81;
- TypeScript;
- Expo Router;
- Zustand;
- FastAPI;
- SQLAlchemy 2;
- Alembic;
- SQLite для локальной разработки;
- PostgreSQL предусмотрен для production;
- pytest.
Понадобятся Node.js LTS, Python 3.11–3.13 (рекомендуется Python 3.12) и PowerShell.
Set-ExecutionPolicy -Scope Process Bypass
.\setup.ps1
.\start-dev.ps1setup.ps1 выполняет следующие действия:
- устанавливает frontend-зависимости через
npm ci; - создаёт
backend\.venv; - устанавливает backend-зависимости;
- создаёт локальные
.env, если их ещё нет; - применяет миграции 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.
Для 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/*.
Для проверки приложения удобнее идти в таком порядке:
- пройти локальный вход;
- открыть dashboard клиента;
- добавить тренировку и приём пищи;
- заполнить ежедневный check-in;
- открыть кабинет тренера и карточку клиента;
- проверить недельный отчёт, заметки и сообщения;
- открыть административные экраны аналитики, аудита и экспорта.
Проверено автоматически:
- 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 Данила Александров. Все права защищены.