A comprehensive React Native + Expo mobile application for intelligent fitness tracking, AI-powered coaching, and Apple Watch integration.
Screenshots will be added here showing the main dashboard, onboarding flow, and health data visualization.
- Apple HealthKit Integration - Real-time health data from Apple Watch & iPhone
- Heart Rate Monitoring - Continuous heart rate tracking and analytics
- VOβ Max Analysis - Cardio fitness assessments and trends
- Workout Tracking - Comprehensive exercise logging and history
- Step Counter - Daily activity and movement tracking
- Personalized Recommendations - AI-generated training suggestions
- Daily Check-ins - Smart health assessments with real-time insights
- Performance Analytics - Data-driven coaching recommendations
- Goal Optimization - Intelligent race time and fitness goal adjustments
Note: If the GIF doesn't load, you can view the full video demo at
./assets/images/coach.mp4
- Progressive User Setup - 11-step guided onboarding process
- Health Metrics Collection - Comprehensive fitness and medical history
- Goal Setting - Personalized training objectives
- Device Integration - Seamless Apple Watch pairing
- Health Metrics Overview - Live data from connected devices
- Activity Visualization - Charts and graphs for progress tracking
- Sync Management - Real-time backend synchronization
- Notification Center - Smart alerts and reminders
- Framework: React Native 0.81.4 + Expo SDK 54
- Language: TypeScript 5.0+
- Navigation: Expo Router v6 (file-based routing)
- State Management: Redux Toolkit with Redux Persist
- UI Components: Custom design system with Expo Vector Icons
- Backend Integration: RESTful API with typed client
- Health Integration: react-native-health for HealthKit
- Watch Connectivity: react-native-watch-connectivity
strideiq_mobile_app/
βββ π± app/ # Expo Router file-based routing
β βββ (onboarding)/ # Onboarding flow (11 screens)
β β βββ _layout.tsx # Onboarding layout wrapper
β β βββ index.tsx # Welcome screen
β β βββ name-screen.tsx # Name collection
β β βββ gender-screen.tsx # Gender selection
β β βββ birthday-screen.tsx # Age verification
β β βββ weight-screen.tsx # Weight & body metrics
β β βββ height-screen.tsx # Height measurement
β β βββ goals-screen.tsx # Fitness goals
β β βββ fitness-screen.tsx # Current fitness level
β β βββ medical-screen.tsx # Medical conditions
β β βββ moods-screen.tsx # Mood tracking setup
β β βββ final-onboarding.tsx # Completion
β βββ (tabs)/ # Main app navigation
β β βββ _layout.tsx # Tab bar configuration
β β βββ index.tsx # Dashboard (home)
β β βββ activity.tsx # Health data & analytics
β β βββ metrics.tsx # Performance metrics
β β βββ add.tsx # Manual data entry
β β βββ settings.tsx # User preferences
β βββ dashboard/ # Dashboard sub-screens
β βββ settings/ # Settings sub-screens
βββ π§© src/ # Source code organization
β βββ components/ # Shared React components
β β βββ DailyCheckInModal.tsx # AI check-in interface
β β βββ HealthKitDataDisplay.tsx # Real-time health data
β β βββ ClerkApiSync.tsx # Authentication sync
β βββ features/ # Feature-based modules
β β βββ health/ # HealthKit integration
β β β βββ healthKit.ts # Apple Health API wrapper
β β βββ watch/ # Apple Watch connectivity
β β βββ ExampleWatchUsage.tsx
β βββ hooks/ # Custom React hooks
β β βββ useOnboarding.ts # Onboarding state management
β β βββ useCoachingRecommendations.ts # AI coaching
β β βββ useWarmUpBrowser.ts # OAuth browser warming
β βββ lib/ # Shared utilities
β β βββ api.ts # API client & configuration
β β βββ apiClient.ts # Typed HTTP client
β β βββ healthSync.ts # Health data synchronization
β β βββ onboardingProgress.ts # Progress persistence
β β βββ theme.ts # Design system tokens
β β βββ WatchConnectivity.ts # Watch communication
β βββ store/ # Redux state management
β β βββ index.ts # Store configuration
β β βββ selectors/ # Redux selectors
β β βββ slices/ # Feature slices
β β β βββ authSlice.ts
β β β βββ profileSlice.ts
β β β βββ deviceSlice.ts
β β β βββ onboardingSlice.ts
β β β βββ recommendationsSlice.ts
β β βββ thunks/ # Async actions
β βββ types/ # TypeScript definitions
β βββ ui/ # Reusable UI primitives
β β βββ Button.tsx # Button component system
β β βββ Text.tsx # Typography system
β β βββ modal.tsx # Modal primitives
β β βββ top-stepbar.tsx # Progress indicators
β βββ utils/ # Utility functions
βββ π¨ assets/ # Static assets
β βββ images/ # App icons & splash screens
β βββ dashboard/ # Dashboard-specific assets
β βββ onboarding/ # Onboarding visuals
β βββ genders/ # Gender selection icons
β βββ moods/ # Mood tracking icons
β βββ devices/ # Device connection assets
β βββ socials/ # Social login assets
βββ π§ plugins/ # Expo config plugins
β βββ withHealthKit.js # HealthKit capability plugin
βββ π Documentation
βββ HEALTHKIT_SETUP.md # HealthKit integration guide
βββ HEALTHKIT_INTEGRATION.md # Comprehensive health docs
βββ HEALTHKIT_SETUP_STEPS.md # Step-by-step setup
// Redux Store Structure
{
auth: {
user: User | null;
isAuthenticated: boolean;
isLoading: boolean;
};
profile: {
data: ProfileData;
hasCompletedProfile: boolean;
isLoading: boolean;
};
onboarding: {
currentStep: number;
formData: OnboardingData;
savedSteps: number[];
pendingSync: boolean;
};
device: {
connectedDevices: Device[];
selectedDeviceId: string;
};
recommendations: {
data: Recommendation[];
isLoading: boolean;
lastUpdated: string;
};
}// API Client Structure
class ApiClient {
baseURL: string;
headers: Record<string, string>;
async get<T>(endpoint: string): Promise<ApiResponse<T>>;
async post<T>(endpoint: string, data: any): Promise<ApiResponse<T>>;
async put<T>(endpoint: string, data: any): Promise<ApiResponse<T>>;
async delete<T>(endpoint: string): Promise<ApiResponse<T>>;
}
// Health Data Sync Flow
Apple Watch β iPhone Health β HealthKit β React Native β Backend API- Node.js 18.0+
- npm or yarn
- iOS Development Environment (macOS + Xcode for iOS builds)
- Expo CLI (
npm install -g @expo/cli) - Physical iOS Device (HealthKit requires real device, not simulator)
- Clone the repository
git clone https://github.com/redhawk5200/strideiq_mobile_app-main.git
cd strideiq_mobile_app-main- Install dependencies
npm install- Install iOS dependencies
cd ios && pod install && cd ..- Start development server
npx expo start- Run on device (iOS only for HealthKit)
# For iOS physical device (required for HealthKit)
npx expo run:ios --device
# For iOS simulator (limited functionality)
npx expo run:ios
# For Android (no HealthKit support)
npx expo run:androidCreate .env file in root directory:
# API Configuration
API_BASE_URL=https://stride-api.edgefirm.io
API_VERSION=v1
# Clerk Authentication (Optional)
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_key_here
# Development
NODE_ENV=developmentimport { healthKitManager } from './src/features/health/healthKit';
// Initialize HealthKit
const success = await healthKitManager.initialize();
// Get real-time health data
const heartRate = await healthKitManager.getLatestHeartRate();
const steps = await healthKitManager.getDailySteps();
const vo2Max = await healthKitManager.getLatestVO2Max();
const workouts = await healthKitManager.getWorkouts(startDate);Supported Health Metrics:
- β€οΈ Heart Rate (resting, active, recovery)
- π« VOβ Max (cardio fitness)
- πΆ Daily Steps & Distance
- ποΈ Workout Sessions
- β‘ Heart Rate Variability (HRV)
- π₯ Active Energy Burned
// Daily Check-in Modal with AI Recommendations
<DailyCheckInModal
visible={showCheckIn}
onClose={() => setShowCheckIn(false)}
/>AI Features:
- Real-time health data analysis
- Personalized training recommendations
- Recovery and rest day suggestions
- Goal progression tracking
- Performance optimization tips
11-Step Progressive Setup:
- Welcome & Setup Profile - Initial app introduction
- Name Collection - Personal identification
- Gender Selection - Physiological considerations
- Birthday Entry - Age-based recommendations
- Weight Tracking - Body composition baseline
- Height Measurement - BMI and health calculations
- Goals Setting - Fitness objectives and targets
- Fitness Assessment - Current activity level
- Medical History - Health conditions and limitations
- Mood Tracking - Mental health integration
- Training Preferences - Workout style and schedule
import WatchConnectivity from './src/lib/WatchConnectivity';
// Start workout on Apple Watch
WatchConnectivity.startWorkout('running', 1800); // 30 minutes
// Listen for real-time heart rate updates
WatchConnectivity.onHeartRateUpdate((data) => {
console.log(`Heart Rate: ${data.heartRate} BPM`);
});
// Sync user settings to watch
WatchConnectivity.syncUserSettings({
targetHeartRate: 150,
workoutGoals: { dailySteps: 10000 }
});// Health Data Sync
POST /api/v1/health/heart-rate/batch
POST /api/v1/health/steps/batch
POST /api/v1/health/vo2-max/batch
POST /api/v1/health/workouts/batch
// AI Recommendations
GET /api/v1/recommendations/generate
GET /api/v1/recommendations/quick-actions
POST /api/v1/recommendations/feedback
// User Management
GET /api/v1/user/profile
PUT /api/v1/user/profile
GET /api/v1/user/onboarding-progress
PUT /api/v1/user/onboarding-progress
// Analytics
GET /api/v1/analytics/dashboard
GET /api/v1/analytics/trendsinterface HealthMetrics {
heartRate: number | null;
vo2Max: number | null;
dailySteps: number;
activeCalories: number;
workoutsThisWeek: number;
lastSync: string;
}
interface AIRecommendation {
title: string;
description: string;
category: 'vo2' | 'race' | 'training' | 'recovery';
priority: 'high' | 'medium' | 'low';
actionItems?: string[];
}
interface OnboardingProgress {
currentStep: number;
completedSteps: number[];
formData: OnboardingData;
isCompleted: boolean;
}- Physical iOS device required (HealthKit doesn't work in simulator)
- Enable HealthKit capability in Xcode
- Grant health permissions in iOS Settings
- Pair Apple Watch for optimal data
See HEALTHKIT_SETUP.md for comprehensive setup instructions.
Key Files:
src/features/health/healthKit.ts- Main HealthKit wrappersrc/lib/healthSync.ts- Backend synchronizationplugins/withHealthKit.js- Expo config plugin
# Unit tests
npm test
# iOS simulator testing
npm run ios
# Android emulator testing
npm run android
# Web testing (limited functionality)
npm run web- β Component unit tests
- β Redux store testing
- β API client testing
- β HealthKit mock testing
- β³ E2E testing (planned)
// eas.json
{
"build": {
"development": {
"ios": {
"resourceClass": "m-medium",
"bundleIdentifier": "com.redhawk5200.strideiq.dev"
}
},
"production": {
"ios": {
"resourceClass": "m-medium",
"bundleIdentifier": "com.redhawk5200.strideiq"
}
}
}
}# Development build
eas build --platform ios --profile development
# Production build
eas build --platform ios --profile production
# Submit to App Store
eas submit --platform iosHEALTHKIT_SETUP.md- Quick setup guideHEALTHKIT_INTEGRATION.md- Comprehensive integration docsHEALTHKIT_SETUP_STEPS.md- Step-by-step troubleshooting
.github/copilot-instructions.md- Coding standards.github/prompts/- Development templates
- Fork the repository
- Create feature branch (
git checkout -b feature/amazing-feature) - Follow coding standards in
copilot-instructions.md - Test on physical iOS device for HealthKit features
- Submit pull request
- TypeScript strict mode enabled
- ESLint + Prettier for code formatting
- Component-driven architecture with reusable UI primitives
- Feature-based organization in
src/features/
- β Redux Toolkit for efficient state management
- β React Native Reanimated for smooth animations
- β Expo Router for performant navigation
- β Async data loading with proper loading states
- β Background sync for health data
- β Optimistic updates for better UX
- Batch uploads for efficient API usage
- Incremental sync to avoid duplicate data
- Background processing for seamless UX
- Retry mechanisms for network reliability
This project is licensed under the MIT License - see the LICENSE file for details.
- GitHub Issues - Bug reports and feature requests
- Documentation - Comprehensive guides in
/docsfolder - HealthKit Issues - Check
HEALTHKIT_SETUP.mdfirst
- Developer: @redhawk5200
- Repository: strideiq_mobile_app-main
Built with β€οΈ using React Native, Expo, and Apple HealthKit
πββοΈ StrideIQ - Intelligent Fitness Tracking πββοΈ
