πŸ‹οΈ

STRAVA

OAuth’d Strava β†’ recent activities on WhatsApp

Neo asks @zion strava; Zion calls the Strava API with stored OAuth tokens, pulls the latest runs/rides/walks, computes pace where needed, formats compact β€œworkout cards,” and answers in WhatsApp. Logic lives alongside other constructs inside zion.py.

A Real Conversation

Coach Dinesh asks in group β€” Zion pulls real March 2026 stats: 136 km, 12 runs

GROUP CHAT STRAVA Dinesh Mohapatra, Coach @Zion Strava how many kms did Manav ran in March 2026 12:28 PM [Zion] Strava β€” March 2026 Runs: 12 😊 Distance: 136.07 km Time: 840 min (14.0 hrs) Longest: 24.57 km Elevation: 4059.6 m Avg Pace: 6:10 /km 12:28 PM βœ“βœ“ Dinesh: You should increase to 160km πŸƒ 12:30 PM πŸ” click to read full brief πŸ“± group chat β€” coach asks ZION handler: strava zion.py route STRAVA API OAuth access + refresh GET /athlete/activities recent + named athlete NORMALIZE distance Β· moving time pace = time / km type emoji + labels WhatsApp reply [Zion] πŸ‹οΈ cards Bridge /api/send compact activity digest TOKEN VAULT Strava OAuth β€” refresh on expiry stored server-side only Integrated in zion.py β€” Strava client + formatters

Capability Map

Strava construct β€” four spokes on the activity hub

πŸ‹οΈ STRAVA DATA Strava REST API runs Β· rides Β· walks distance Β· elevation Β· pace moving time vs elapsed COMMANDS @zion strava @zion strava <name> multi-athlete aware defaults to Neo’s token FORMAT workout cards + emojis pace calc per activity truncate for mobile [Zion] branded prefix AUTH Strava OAuth2 access + refresh tokens silent refresh path server-side secret storage

Tech Stack

RuntimePython 3 β€” handlers inside zion.py
APIStrava v3 REST β€” activities, athlete context
AuthOAuth2 with refresh token rotation
Mathpace from moving_time / distance_km
DeliveryWhatsApp Bridge /api/send
KeyIntegrated Strava module in zion.py
βœ•
πŸ‹οΈ STRAVA
Dinesh Mohapatra, Coach
@Zion Strava how many kms did Manav ran in March 2026
12:28 PM
[Zion]
Strava β€” March 2026
Runs: 12
😊 Distance: 136.07 km
Time: 840 min (14.0 hrs)
Longest: 24.57 km
Elevation: 4059.6 m
Avg Pace: 6:10 /km
12:28 PM βœ“βœ“
Dinesh:
You should increase to 160km πŸƒ
12:30 PM
[Zion]
Noted, Coach! πŸ“‹ Will talk to Neo about the 160km target πŸ’ͺ
12:30 PM βœ“βœ“
Anyone in group can ask @zion
Strava works for any athlete name