Status (2026-08-28): Parked β Outside two-product focus this week.
Parent-supervised kids fitness for Wear OS, Android, and Flutter web. Built with Flutter and integrated with Samsung Health Sensor SDK where supported.
Documentation lives in
docs/. Start with docs/INDEX.md and AGENTS.md for current status.
FlowFit runs on:
- Galaxy Watch (Wear OS) - heart-rate and workout sessions
- Android Phone - companion tracking, goals, and settings
- Flutter web - landing page, public privacy/deletion pages, and browser preview
- Real-time heart-rate monitoring with Samsung Health Sensor SDK (where supported)
- Inter-beat interval (IBI) data for HRV-oriented sessions
- Workout and wellness tracking (walking, running, resistance, missions)
- Watch β phone sync
- Parent-supervise account path with self-attested age gate
- Supabase backend sync when configured with a live project
βββββββββββββββββββββββββββββββββββββββ
β Galaxy Watch (Wear OS) β
β - Heart rate monitoring β
β - Activity tracking β
β - Sleep tracking β
β - Real-time sensor data β
ββββββββββββββββ¬βββββββββββββββββββββββ
β Wearable Data Layer
β (MessageClient/DataClient)
ββββββββββββββββΌβββββββββββββββββββββββ
β Android Phone (Companion) β
β - Data visualization β
β - Historical analysis β
β - Detailed reports β
β - Settings management β
ββββββββββββββββ¬βββββββββββββββββββββββ
β Supabase API
ββββββββββββββββΌβββββββββββββββββββββββ
β Supabase Backend β
β - PostgreSQL database β
β - Real-time subscriptions β
β - Authentication β
β - Cloud storage β
βββββββββββββββββββββββββββββββββββββββ
Example hardware IDs below are from past local sessions. Always run
flutter devices and adb devices on your machine.
- Model: Galaxy Watch (SM_R930)
- Platform: Wear OS powered by Samsung
- Purpose: Primary health tracking device
- Run Command:
flutter run -d <watch-device-id> -t lib/main_wear.dart
- Purpose: Companion app for data visualization
- Run Command:
pwsh -NoProfile -File scripts/run_phone.ps1orscripts\run_phone.baton Windows
Hardware:
- Galaxy Watch4 or higher (Wear OS 3.0+)
- Android phone (API 23+)
- Both devices paired via Galaxy Wearable app
Software:
- Flutter SDK 3.41.9 stable (CI/release baseline;
pubspec.yamluses Dart SDK constraint^3.10.0) - Android Studio with Kotlin support
- Samsung Health app installed on watch
- Supabase account (for backend)
-
Clone and setup
git clone <repository-url> cd flowfit flutter pub get pwsh scripts/fetch_fonts.ps1 # downloads General Sans (not committed; Fontshare license)
-
Configure Supabase
- Preferred: pass
SUPABASE_URLandSUPABASE_PUBLISHABLE_KEYwith--dart-define. For local phone runs,scripts\run_phone.batreads those values from the environment or ignoredlib/secrets.dartand passes them to Flutter. - Optional local fallback: copy
lib/secrets.dart.exampletolib/secrets.dartfor scripts that read the ignored fallback file. - Do not put service-role or secret keys in the Flutter app
- Preferred: pass
-
Deploy to devices
# Watch app scripts\test-watch.bat # Phone app (in another terminal) scripts\test-phone.bat
Flutter web builds render the FlowFit marketing landing page at /. The app
startup path is still available at /#/app, and direct app routes such as
/#/welcome continue to work for smoke tests and previews. The landing page
uses FLOWFIT_APK_DOWNLOAD_URL for its APK CTA and defaults to the maintained
fork's latest GitHub release page until a signed APK artifact URL is supplied.
Public Pages origin:
https://iron-mark.github.io/Hackathon-FlowFit/
- Start phone app first
- Start watch app
- On watch: tap "Heart Rate" β "START"
- Wait for heart rate reading
- Tap "SEND" β check phone receives data
Troubleshooting? See WATCH_CONNECTION_GUIDE.md
The app uses Samsung Health Sensor SDK for real-time heart rate monitoring. See detailed setup guides:
- docs/QUICK_START.md - 5-minute quick start
- SAMSUNG_HEALTH_SETUP_GUIDE.md - Complete setup guide
import 'package:flowfit/services/watch_bridge.dart';
final watchBridge = WatchBridgeService();
// 1. Request permission
await watchBridge.requestBodySensorPermission();
// 2. Connect to Samsung Health
await watchBridge.connectToWatch();
// 3. Start tracking
await watchBridge.startHeartRateTracking();
// 4. Listen to heart rate data
watchBridge.heartRateStream.listen((data) {
print('Heart Rate: ${data.bpm} BPM');
print('IBI Values: ${data.ibiValues}');
});
// 5. Stop tracking
await watchBridge.stopHeartRateTracking();HeartRateData {
bpm: 72, // Heart rate in beats per minute
ibiValues: [850, 845, 855], // Inter-beat intervals (ms)
timestamp: DateTime.now(), // When reading was taken
status: SensorStatus.active // active, inactive, error
}-
Clean Dashboard (
lib/screens/wear/wear_dashboard.dart)- Compact shortcuts for Heart Rate, Workout, and Relax
- Minimal, focused design with ambient mode kept non-interactive
- Optimized for small screens
-
Heart Rate Monitor (
lib/screens/wear/wear_heart_rate_screen.dart)- Large BPM display (56pt font)
- Simple START/STOP button
- One-tap SEND to phone
- Real-time status indicator
- Samsung Health SDK integration
- IBI data collection
-
Workout and Relax Tools (
lib/screens/wear/workout_screen.dart,lib/screens/wear/relax_screen.dart)- Local workout timer with BPM and calorie estimates
- Guided breathing session timer
- Directly reachable from the Wear dashboard
-
Dashboard (
lib/screens/dashboard_screen.dart)- Overview of all health metrics
- Historical data charts
- Sync status
-
Workout Tracking (
lib/screens/workout/workout_type_selection_screen.dart)- Running, walking, and resistance workout flows
- Workout history
- Performance analytics
The app uses Wearable Data Layer API for real-time data transfer:
// On Watch: Send heart rate data
messageClient.sendMessage(
nodeId,
"/heart_rate",
jsonEncode(heartRateData)
);
// On Phone: Receive data
class DataListenerService extends WearableListenerService {
@override
void onMessageReceived(MessageEvent messageEvent) {
final data = jsonDecode(messageEvent.data);
// Process and display data
}
}When the app is launched with real SUPABASE_URL and
SUPABASE_PUBLISHABLE_KEY values, both devices can sync to Supabase for
persistent storage:
// Save heart rate to Supabase
await supabase.from('heart_rate').insert({
'user_id': userId,
'bpm': heartRateData.bpm,
'timestamp': heartRateData.timestamp.toIso8601String(),
'ibi_values': heartRateData.ibiValues,
});flowfit/
βββ android/
β βββ app/
β β βββ libs/
β β β βββ samsung-health-sensor-api-1.4.1.aar
β β βββ src/main/kotlin/com/msiazondev/flowfit/
β β βββ MainActivity.kt
β β βββ HealthTrackingManager.kt
β βββ build.gradle.kts
βββ lib/
β βββ main.dart # Phone app entry
β βββ main_wear.dart # Watch app entry
β βββ models/
β β βββ heart_rate_data.dart
β β βββ sensor_status.dart
β β βββ workout_session.dart
β βββ services/
β β βββ watch_bridge.dart # Samsung Health SDK bridge
β β βββ supabase_service.dart # Backend service
β β βββ phone_data_listener.dart
β βββ screens/
β βββ wear/ # Watch-specific screens
β βββ workout/
βββ docs/ # Documentation
β βββ QUICK_START.md
β βββ SAMSUNG_HEALTH_SETUP_GUIDE.md
β βββ INSTALLATION_TROUBLESHOOTING.md
β βββ HEART_RATE_DATA_FLOW.md
β βββ WEAR_OS_SETUP.md
βββ scripts/ # Build and run scripts
β βββ build_and_install.bat
β βββ run_watch.bat
β βββ run_phone.bat
βββ pubspec.yaml
βββ README.md
"Unresolved reference: ConnectionListener"
# Clean and rebuild
flutter clean
flutter pub get
pwsh -NoProfile -File scripts\run_phone.ps1 -Device <device-id>"JVM-target compatibility detected"
- Check
android/app/build.gradle.kts - Ensure
jvmTarget = "17"is set
"Connection Failed" on Watch
- Ensure Samsung Health is installed
- Check watch supports Samsung Health Sensor SDK
- Restart watch and try again
"Permission Denied"
- Go to Settings β Apps β FlowFit β Permissions
- Enable "Body sensors" permission
No Heart Rate Data
- Wear watch on wrist (sensor needs skin contact)
- Tighten watch band
- Clean sensor on back of watch
Watch not sending data to phone
- Check both devices are paired
- Verify Galaxy Wearable app is running
- Check network connectivity
Supabase sync failing
- Verify
SUPABASE_URLandSUPABASE_PUBLISHABLE_KEYdart defines, or the ignoredlib/secrets.dartfallback used by release scripts - Check internet connection
- Review Supabase logs
π Complete Documentation Index - Full list of all documentation
- docs/QUICK_START.md - β Start here! Quick guide to run and test the app
- NAVIGATION_GUIDE.md - πΊοΈ How to access heart rate monitoring UI
- GETTING_STARTED.md - Initial setup guide
- WATCH_TO_PHONE_COMPLETE_FLOW.md - Live data flow from watch to phone
- RELEASE_READINESS_RUNBOOK.md - Store/web release readiness and remaining external gates
- TROUBLESHOOTING.md - Connection and general issues
- SMARTWATCH_TO_PHONE_DATA_FLOW.md - Complete data flow guide
BODY_SENSORS- Heart rate and health sensorsFOREGROUND_SERVICE- Background trackingFOREGROUND_SERVICE_HEALTH- Health-specific servicesWAKE_LOCK- Keep device awake during trackingACTIVITY_RECOGNITION- Activity detection
INTERNET- Supabase syncACCESS_NETWORK_STATE- Network statusWAKE_LOCK- Background sync
- Frontend: Flutter 3.41.9 stable
- Language: Dart
- Backend: Supabase (PostgreSQL)
- Watch SDK: Samsung Health Sensor SDK 1.4.1
- Wearable: Wear OS 3.0+
- Communication: Wearable Data Layer API
- State Management: Provider
- Charts: fl_chart
- Location: geolocator, google_maps_flutter
- Sensors: sensors_plus, wear_plus
- Watch-to-phone data transfer path (Wear OS companion builds)
- Add workout heart rate zones
- Implement HRV analysis and trends
- Add resting heart rate calculation
- Background heart rate monitoring
- Heart rate alerts (too high/low)
- Sleep quality scoring
- Nutrition recommendations
- Social features and challenges
Contributions are welcome! Please read the contributing guidelines before submitting PRs.
This project is licensed under the MIT License - see the LICENSE file for details.
- Samsung Health Sensor SDK
- Flutter team
- Supabase team
- VGV (Very Good Ventures) for Wear OS best practices
For issues and questions:
- Check the troubleshooting section above
- Review the documentation files
- Check logcat:
adb logcat | grep -i health - Open an issue on GitHub
# Automated build and install on watch
scripts\build_and_install.bat
# Run on watch
scripts\run_watch.bat
# Run on phone
scripts\run_phone.bat# Watch (SM_R930 - Galaxy Watch)
flutter run -d adb-RFAX21TD0NA-FFYRNh._adb-tls-connect._tcp -t lib/main_wear.dart
# Phone (22101320G)
scripts\run_phone.bat
β οΈ Important: Always use-t lib/main_wear.dartfor watch to get Wear OS UI, not phone UI!
# View logs
adb -s 6ece264d logcat | findstr "FlowFit"
# Check devices
adb devices
# Uninstall
adb -s 6ece264d uninstall com.msiazondev.flowfitFor detailed documentation, see the docs/ folder.