Files
rideaware-api/TODO.md

226 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# TODO Features
## User Management
- [x] **User Registration & Login**: Email authentication with JWT tokens
- [x] **User Profile**: Bio, stats, zones (HR/Power), equipment, FTP, weight
- [x] **Password Recovery**: Email-based reset with secure tokens
- [ ] **OAuth Integration**: Google, Apple, Strava, Garmin
- [ ] **Onboarding & Baselines**: Guided setup, baseline tests, auto zone calc
- [ ] **Account Roles**: Athlete, Coach, Admin; team/org workspaces
- [ ] **Multi-device Sessions**: Seamless handoff across web/mobile
## Workout Planning
- [ ] **AI-Powered Planning**: Generate plans by goal, time, fitness level
- [ ] **Adaptive Scheduling**: Auto-reschedule based on missed sessions, fatigue, weather
- [ ] **Workout Scheduling**: Calendar view, drag-drop, ICS sync (Google/Apple/Outlook)
- [ ] **Goal Setting & Tracking**: SMART goals with real-time progress bars
- [x] **Templates Library**: Plan & session templates (endurance, threshold, VO2, strength)
- [x] **Export Structured Workouts**: .zwo (Zwift), Garmin FIT/Workout, Wahoo, TrainerRoad
- [ ] **Race/Event Planner**: Target events, taper builder, gear checklist
## Workout Tracking
- [ ] **Workout Logging**: Exercises, sets/reps/weight; power, HR, cadence, GPS
- [x] **Device Capture**: File upload (FIT/TCX/GPX activity import with metric extraction)
- [ ] **Tags & Notes**: RPE, mood, conditions, injuries, equipment used
- [x] **Equipment Tracking**: Bike/components mileage auto-tracking, service reminders
## Advanced Analytics
- [ ] **Interactive Dashboards**: Charts for load (CTL/ATL/TSB), power curves, trends
- [ ] **Progress Insights (AI)**: Automatic highlights, plateau detection, anomaly alerts
- [ ] **Comparisons**: Before/after, season-over-season, segment/time comparisons
- [ ] **Custom Reports**: Export CSV/PDF; shareable report links
## Training & Coaching
- [ ] **Coaching & Guidance**: Coach portal, athlete assignments, plan reviews
- [ ] **Virtual Training Rides**: Integrations with Zwift/Rouvy/RGT; video routes
- [ ] **Structured Workouts**: Interval builder with targets (%FTP, %HRR, RPE)
- [ ] **Messaging**: Coachathlete chat, comments on sessions, file attachments
## Nutrition & Recovery
- [ ] **Nutrition Planning**: Meal plans, macros, carb periodization
- [ ] **Nutrition Tracking**: Food log, barcode/manual entry, hydration tracking
- [ ] **Recovery Optimization**: Sleep/HRV import, readiness score, rest day prompts
- [ ] **Injury Prevention & Management**: Screeners, red-flag alerts, return-to-ride flow
- [ ] **Supplement & Allergy Flags**: Notes and reminders in plan builder
## Community & Social
- [ ] **Social Sharing**: One-click share to Strava/social with privacy controls
- [ ] **Community Forum**: Topics, groups/clubs, moderation tools
- [ ] **Leaderboards**: Global, club, event, and route/segment leaderboards
- [ ] **Challenges & Streaks**: Time-boxed events, badges, streak protection
## Gamification & Engagement
- [ ] **Achievements & Badges**: Milestones (consistency, PRs, climbing, streaks)
- [ ] **Personalized Recommendations (AI)**: Next best workout, videos, articles
- [ ] **Rewards & Incentives**: Points store, partner discounts, raffles
## Integrations & Data
- [~] **Wearable Sync**: Garmin, Wahoo, COROS, Apple Health, Google Fit (Garmin + Wahoo OAuth & push implemented)
- [ ] **Platform Sync**: Strava, TrainingPeaks, Intervals.icu (calendar + workout push)
- [ ] **Music Integration**: Spotify/Apple Music workout-matched playlists
- [~] **Data Import/Export**: FIT/TCX/GPX activity import implemented; CSV/JSON export & bulk import pending
- [ ] **Public API & Webhooks**: For partners, coaches, clubs
## Notifications & Comms
- [ ] **Reminders**: Email, push, SMS; smart timing
- [ ] **Digest Emails**: Weekly plan, monthly progress
- [ ] **Real-time Alerts**: Overtraining risk, missed session, weather hazard
## Accessibility & Internationalization
- [ ] **A11y**: WCAG 2.2 AA, keyboard nav, screen reader labels
- [ ] **Localization**: i18n framework, units (imperial/metric), timezones
- [ ] **Color-blind Safe Palettes**: Analytics & maps
## Mobile & Apps
- [ ] **PWA Offline Mode**: Log workouts offline; sync when online
- [ ] **Native App Shell**: Background sync, notifications, wearables bridge
## Security, Privacy & Compliance
- [ ] **Privacy Controls**: Public/private by item, club privacy, anonymized leaderboards
- [ ] **Data Protection**: Encryption at rest/in transit, secrets rotation
- [ ] **Compliance**: GDPR/CCPA requests (export/delete), age gating, COPPA checks
- [ ] **Audit Logs**: Admin and coach actions
## Admin, Billing & Ops
- [ ] **Admin Console**: User management, feature flags, content moderation
- [ ] **Subscriptions**: Free/Pro/Coach tiers, trials, coupons, taxes (Stripe)
- [ ] **Telemetry & Observability**: Metrics, tracing, error reporting, uptime SLOs
- [ ] **Scalability**: Queueing for imports/exports, background jobs
- [ ] **Backups & DR**: Automated backups, restore drills, RTO/RPO defined
## Content & Library
- [ ] **Exercise Library**: Strength/mobility videos with cues and progressions
- [ ] **Knowledge Base**: Articles on training, nutrition, recovery
- [ ] **Route Library**: GPX planner/import, elevation profiles, weather overlays
## Possible Future Features
- [ ] **Virtual Reality (VR) Integration**: Immersive rides with real-time metrics
- [ ] **Augmented Reality (AR) Integration**: HUD overlays during rides
- [ ] **Machine Learning (ML) Integration**: Injury risk models, plan optimization, weather-aware ETA and fueling estimates
---
## Completed - Phase 1: Authentication & User Management ✅
### Infrastructure
- [x] Migrated from Python/Flask to Go with Chi router
- [x] Restructured project with clean architecture (`cmd/`, `internal/`, `pkg/`)
- [x] PostgreSQL + GORM ORM setup with migrations
- [x] Docker/Podman containerization with multi-stage builds
### Authentication
- [x] User signup with validation (username, email, password strength)
- [x] User login with JWT tokens (access + refresh)
- [x] Password hashing with bcrypt
- [x] Protected routes with Bearer token authentication
- [x] Password reset flow with email tokens
### User Profiles
- [x] User model with relationships (Profile, PasswordReset, Sessions)
- [x] User profile with stats (HR zones, FTP, weight, total rides, distance, time)
- [x] Email service integration (Resend) for notifications
- [x] Automatic profile creation on user signup
### Code Quality
- [x] Repository pattern for data access
- [x] Service layer for business logic
- [x] Auth middleware for protected routes
- [x] Error handling and validation
- [x] Environment configuration with .env
---
## Completed - Phase 2: User Profiles, Equipment & Workouts ✅
### Profile & Equipment (completed earlier)
- [x] GET/PUT `/api/protected/profile` - Full profile management
- [x] POST/GET/PUT/DELETE `/api/protected/equipment` - Bike/gear CRUD
- [x] GET `/api/protected/zones` - Calculate HR & power training zones
- [x] Equipment tracking (brand, model, weight)
- [x] Equipment usage stats from workouts
### Workouts (completed earlier)
- [x] POST/GET/PUT/DELETE `/api/protected/workouts` - Full workout CRUD
- [x] GET `/api/protected/workouts/month` - Calendar month filtering
- [x] GET `/api/protected/workout-types` - Predefined workout types
- [x] POST `/api/protected/workouts/upload` - ZWO file import & parsing
- [x] Structured workout segments (JSONB) with power/cadence targets
### Stats
- [x] GET `/api/protected/stats/summary` - Overall ride statistics
- [x] GET `/api/protected/stats/weekly` - Weekly aggregated stats
- [x] GET `/api/protected/stats/monthly` - Monthly aggregated stats
- [x] GET `/api/protected/stats/personal-bests` - Personal records
### Workout Templates
- [x] GET `/api/protected/workout-templates` - List predefined templates (with category filter)
- [x] GET `/api/protected/workout-templates/detail` - Get template with full segment data
- [x] POST `/api/protected/workouts/from-template` - Create workout from template
- [x] 11 built-in templates: Recovery, Endurance, Tempo, Sweet Spot, Threshold, Over-Unders, VO2max, Sprint, Ramp Test
---
## Completed - Phase 2.5: Workout Export & Device Integration ✅
### Workout Export
- [x] GET `/api/protected/workouts/export/fit` - FIT workout file export (Garmin-compatible)
- [x] GET `/api/protected/workouts/export/zwo` - ZWO file export (Zwift-compatible)
- [x] Segment-to-FIT mapping (warmup/steady/interval/cooldown/ramp/freeride)
- [x] Power targets converted from %FTP to absolute watts for device display
- [x] `github.com/muktihari/fit` library integration for FIT encoding
### OAuth Infrastructure
- [x] OAuthConnection model with AES-256-GCM token encryption
- [x] OAuthState model for CSRF protection during OAuth flows
- [x] Shared OAuth service (state management, PKCE, token exchange, auto-refresh)
- [x] OAuth config loader from environment variables
### Garmin Connect Integration
- [x] GET `/api/protected/garmin/auth` - OAuth2 PKCE flow initiation
- [x] GET `/api/garmin/callback` - OAuth callback handler
- [x] POST `/api/protected/workouts/push/garmin` - Push workout to Garmin Connect
- [x] GET `/api/protected/garmin/status` - Connection status check
- [x] DELETE `/api/protected/garmin/disconnect` - Revoke connection
### Wahoo Cloud API Integration
- [x] GET `/api/protected/wahoo/auth` - OAuth2 flow initiation
- [x] GET `/api/wahoo/callback` - OAuth callback handler
- [x] POST `/api/protected/workouts/push/wahoo` - Push workout as Wahoo plan
- [x] GET `/api/protected/wahoo/status` - Connection status check
- [x] DELETE `/api/protected/wahoo/disconnect` - Revoke connection
---
## Completed - Phase 2.6: Activity Import & Equipment Mileage ✅
### Activity File Import (FIT/TCX/GPX)
- [x] POST `/api/protected/workouts/import` - Import activity files (multipart upload)
- [x] FIT activity parser using `muktihari/fit` decoder (session-level metrics)
- [x] TCX activity parser (lap aggregation, trackpoint elevation gain)
- [x] GPX activity parser (Haversine distance, elevation gain, extension parsing)
- [x] Extracts: duration, distance, avg/max power, avg/max HR, elevation gain, calories, cadence
- [x] Can create new completed workout or update existing planned workout with actual data
- [x] Supports optional equipment_id assignment on import
### Equipment Mileage & Service Tracking
- [x] Auto-increment equipment mileage when activities are imported with equipment assigned
- [x] Total distance (km), total duration (seconds), total rides tracked per equipment
- [x] Service interval configuration (distance-based and/or duration-based)
- [x] Distance and duration since last service counters
- [x] POST `/api/protected/equipment/service` - Record service (resets counters)
- [x] GET `/api/protected/equipment/service-status` - Check if equipment needs servicing
- [x] Service status in GET `/api/protected/equipment` response (total_distance, total_rides, etc.)
---
## Next Phase: Phase 3 - OAuth Login & Platform Sync
### OAuth Login
- [ ] Google OAuth 2.0 (sign in with Google)
- [ ] Apple Sign-In
- [ ] Strava OAuth (sign in + activity sync)
### Platform Sync
- [ ] Strava activity sync (import completed rides)
- [ ] TrainingPeaks calendar sync
- [ ] Intervals.icu integration