Markdown Converter
Agent skill for markdown-converter
**WeCoach** is a Garmin Connect IQ **watch app** that acts as a real-time virtual coach. It streams biometric data to a web server where AI generates personalized audio and text coaching. Users pair using a simple 4-digit code displayed on the watch.
Sign in to like and favorite skills
WeCoach is a Garmin Connect IQ watch app that acts as a real-time virtual coach. It streams biometric data to a web server where AI generates personalized audio and text coaching. Users pair using a simple 4-digit code displayed on the watch.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │ GARMIN WATCH │────▶│ SERVER │────▶│ WEB APP │ │ (Watch App) │ │ │ │ │ │ ┌───────────┐ │ │ • Pairing │ │ • Real-time dashboard │ │ │ 7 4 2 1 │ │ │ • Data relay │ │ • AI voice coaching │ │ └───────────┘ │ │ • AI backend │ │ • Personalized text │ │ │ │ │ │ │ │ HR: 72 HRV:45 │ └─────────────────┘ │ 🎧 "Take a deep breath,│ │ State: Engaged │ │ your stress is rising"│ └─────────────────┘ └─────────────────────────┘
| File | Purpose |
|---|---|
| Application entry point, view management |
| Activity recording, session lifecycle, pairing code generation |
| HTTP communication with server, data batching |
| 4-digit code display, connection status |
| Live coaching display, HR, state, coach messages |
| Sensor polling at 1Hz |
| Maps (HR, RMSSD) to (Arousal, Valence) |
| RMSSD calculation with circular buffer |
| HRV stability using Welford's algorithm |
| App manifest (type="watch-app") |
1. Launch App ↓ 2. PairingView • Generate 4-digit code • Display "Enter at fitgpt.vercel.app" • Register session with server • Wait for START button ↓ 3. SessionView • Start ActivityRecording (high-power sensors) • Stream data every 2-3 seconds • Display HR, state, duration • Show coach messages from server • BACK to end session ↓ 4. End Session • Save FIT file • Notify server • Return to PairingView
# Set SDK path $SDK = "C:\Users\guzzi\AppData\Roaming\Garmin\ConnectIQ\Sdks\connectiq-sdk-win-8.4.0-2025-12-03-5122605dc" # Build PRG for specific device (for sideloading/testing) & "$SDK\bin\monkeyc.bat" -f monkey.jungle -o bin/WeCoach.prg -d fenix7 -y developer_key -w # Build universal IQ file (for store upload) & "$SDK\bin\monkeyc.bat" -f monkey.jungle -o bin/WeCoach.iq -y developer_key -r -w # Run in simulator & "$SDK\bin\connectiq.bat" # Start simulator first & "$SDK\bin\monkeydo.bat" bin/WeCoach.prg fenix7
The watch communicates with these endpoints:
Register a new session with the server.
{ "code": 7421, "device": { "id": "...", "model": "..." }, "timestamp": 1234567890 }
Send batched biometric data.
{ "code": 7421, "batch": [ { "ts": 1234567890, "hr": 72, "rmssd": 45.2, "a": 0.3, "v": 0.5, "s": "Engaged" } ] }
Response may include:
{ "message": "Take a deep breath", "vibrate": true }
Notify server that session has ended.
Garmin watches have strict memory limits (~28-64KB depending on device):
| Constant | Value | Purpose |
|---|---|---|
| 3 | Send data every 3 samples |
| 2000ms | Minimum time between HTTP calls |
| 8000ms | How long coach messages show |
| 90 | Circular buffer for RR intervals |
Arousal = (0.6 × Z_HR + 0.4 × (-Z_RMSSD)) / 3
At high arousal: Valence ≈ (Z_RMSSD - 0.5 × max(0, Z_HR)) / 2 At low arousal: Valence ≈ Z_RMSSD / 2
| Quadrant | States (by intensity) |
|---|---|
| High A, +V (Engaged) | Engaged → Excited → Thriving |
| High A, -V (Stressed) | Tense → Stressed → Intense |
| Low A, +V (Calm) | Still → Calm → Serene |
| Low A, -V (Tired) | Resting → Tired → Drained |
For real-time coaching sessions, Watch App is mandatory:
| Aspect | Widget | Watch App ✓ |
|---|---|---|
| Session Duration | OS kicks out after ~60s | Runs until stopped |
| Sensor Mode | Low power, intermittent | High power, continuous |
| HTTP Requests | May sleep | Connection kept "hot" |
| Screen Control | Dimmed/closed by OS | Full control |
| ActivityRecording | Broken in practice | Works correctly |
WeCoachApp must be OUTSIDE any moduleCommunications permission in manifestFitRecording permission is set75+ devices including:
Current Phase: Development