Files
rideaware-api/TODO.md
2026-05-17 20:39:47 -05:00

306 lines
16 KiB
Markdown

# 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
- [x] **Onboarding Wizard**: Guided setup with profile, metrics, equipment, and preferences steps
- [~] **OAuth Integration**: Garmin & Wahoo OAuth implemented; Google, Apple, Strava pending
- [ ] **Account Roles**: Athlete, Coach, Admin; team/org workspaces
- [ ] **Multi-device Sessions**: Seamless handoff across web/mobile
## Workout Planning
- [x] **Workout Scheduling**: Calendar view with monthly navigation, rich workout cards (duration, TSS, zone-colored segment charts, status borders)
- [x] **Templates Library**: 11 built-in templates (Recovery, Endurance, Tempo, Sweet Spot, Threshold, Over-Unders, VO2max, Sprint, Ramp Test) with category browsing
- [x] **Template Scheduling**: Browse and schedule templates directly from calendar Add Workout modal
- [x] **Structured Workout Builder**: Interval builder with warmup/main/cooldown sections, power targets (%FTP), cadence, repeats, rest intervals, and live preview chart
- [x] **Export Structured Workouts**: .zwo (Zwift), Garmin FIT/Workout, Wahoo
- [ ] **AI-Powered Planning**: Generate plans by goal, time, fitness level
- [ ] **Adaptive Scheduling**: Auto-reschedule based on missed sessions, fatigue, weather
- [ ] **Goal Setting & Tracking**: SMART goals with real-time progress bars
- [ ] **Race/Event Planner**: Target events, taper builder, gear checklist
## Workout Tracking
- [x] **Workout CRUD**: Create, read, update, delete workouts with calendar integration
- [x] **Device Capture**: File upload (FIT/TCX/GPX activity import with metric extraction)
- [x] **ZWO Import**: Client-side Zwift workout file parsing
- [x] **Equipment Tracking**: Bike/components mileage auto-tracking, service interval reminders, distance/duration since last service
- [~] **Tags & Notes**: RPE & Notes fields implemented in backend; mood, conditions, injuries, and tag system still pending
- [ ] **Drag-drop Calendar**: Reorder/reschedule workouts by dragging
## Workout Visualization
- [x] **Workout Detail Modal**: Interval chart, auto-generated workout summary, zone distribution, completed metrics, equipment, Garmin/Wahoo push
- [x] **Power Zone System**: 7-zone model (Recovery through Neuromuscular) with color-coded visualization
- [x] **Mini Segment Charts**: Compact zone-colored bars on calendar cards
- [x] **Zone Distribution**: Horizontal stacked bar with time-in-zone breakdown
- [x] **TSS/IF Calculation**: Training Stress Score and Intensity Factor from segment data
## Dashboard
- [x] **Stats Overview**: Total rides, distance, time, elevation gain
- [x] **Calendar Widget**: Compact monthly calendar with workout cards, month navigation
- [x] **Next Workout**: Upcoming workout display with link to calendar
- [x] **Today's Progress**: Completion percentage for daily workouts
- [x] **Profile Display**: Welcome message with first/last name from user profile
- [ ] **Interactive Charts**: Activity trends (CTL/ATL/TSB), power curves
## Advanced Analytics
- [x] **Stats Page**: Summary, weekly, and monthly aggregated statistics
- [x] **Personal Bests**: Personal records tracking
- [ ] **Interactive Dashboards**: Charts for training load, 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
## Workout Library
- [x] **Browse Library**: System and user workouts with search, category, type, and difficulty filters
- [x] **Workout Detail Page**: Full workout view with interval chart and segment breakdown
- [x] **Create Custom Workouts**: Interval builder with warmup/main/cooldown structure
- [x] **My Workouts**: User's custom workout collection
- [x] **Favorites**: Save and browse favorite workouts
- [x] **Ratings**: Star rating system with comments
- [ ] **Community Sharing**: Public/private workout sharing
## Training & Coaching
- [x] **Structured Workouts**: Interval builder with targets (%FTP, cadence, repeats)
- [ ] **Coaching & Guidance**: Coach portal, athlete assignments, plan reviews
- [ ] **Virtual Training Rides**: Integrations with Zwift/Rouvy/RGT; video routes
- [ ] **Messaging**: Coach-athlete chat, comments on sessions, file attachments
## Integrations & Data
- [x] **Garmin Connect**: OAuth2 PKCE flow, push workouts, connection management
- [x] **Wahoo Cloud API**: OAuth2 flow, push workouts as plans, connection management
- [x] **Activity Import**: FIT (session metrics), TCX (lap aggregation), GPX (Haversine distance, elevation)
- [x] **Workout Export**: FIT (Garmin-compatible), ZWO (Zwift-compatible)
- [ ] **Strava Sync**: OAuth login + activity sync
- [ ] **TrainingPeaks**: Calendar + workout push
- [x] **Intervals.icu**: Integration (push workouts + sync activities)
- [ ] **COROS, Apple Health, Google Fit**: Wearable sync
- [ ] **Music Integration**: Spotify/Apple Music workout-matched playlists
- [ ] **Public API & Webhooks**: For partners, coaches, clubs
## 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
## 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: Profiles, Equipment & Workouts
### API Endpoints
- [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] 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] 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
- [x] GET `/api/protected/workout-templates` - List templates (with category filter)
- [x] GET `/api/protected/workout-templates/detail` - Template with full segments
- [x] POST `/api/protected/workouts/from-template` - Create workout from template
---
## Completed - Phase 2.5: 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
---
## Completed - Phase 3: Frontend & Full-Stack Features
### Vue 3 Frontend (Tailwind CSS v4)
- [x] Vue 3 Composition API with `<script setup>`, Pinia stores, Vue Router 4
- [x] Responsive dark/light mode UI with Tailwind CSS
- [x] Docker/Podman containerized with Nginx serving
### Dashboard
- [x] Stats overview cards (rides, distance, time, elevation)
- [x] Compact calendar widget with monthly navigation and workout cards
- [x] Next workout display with today's progress bar
- [x] Profile-aware welcome message (first/last name)
- [x] Workout detail modal from calendar clicks
### Calendar & Workout Management
- [x] Full monthly calendar with TrainingPeaks-style workout cards
- [x] Rich cards: duration, TSS badge, zone-colored mini segment chart, title, status borders
- [x] Add Workout modal with Manual and From Template tabs
- [x] Template browser with category filtering, detail preview (IntervalDisplay), and direct scheduling
- [x] Workout builder (IntervalBuilder) in manual tab with warmup/main/cooldown, power targets, cadence, repeats, presets, live chart preview
- [x] Structure-to-segments conversion for API submission
- [x] File upload support (FIT/TCX/GPX activity import, ZWO workout import)
### Workout Detail & Visualization
- [x] IntervalDisplay chart (section-colored bars, height = power, width = time)
- [x] Auto-generated workout summary text (detects repeat patterns)
- [x] Zone distribution (stacked bar + time-in-zone legend)
- [x] MiniSegmentChart for calendar cells
- [x] 7-zone power model with hex color mapping
- [x] TSS and IF calculation from segments
- [x] Garmin/Wahoo push buttons with connection status
### Workout Library
- [x] Browse system + user workouts with search, filters (type, category, difficulty)
- [x] Workout detail page with interval chart
- [x] Create/edit custom workouts with interval builder
- [x] My Workouts and Favorites collections
- [x] Star rating with comments
### Other Pages
- [x] Equipment management with service tracking, mileage display, record service
- [x] Training zones page (HR & power zones)
- [x] Stats page (summary, weekly, monthly, personal bests)
- [x] Templates browser page with category filter and scheduling
- [x] Onboarding wizard (profile, metrics, equipment, preferences steps)
- [x] Settings: Garmin/Wahoo connections page with OAuth flow
- [x] User profile editor
---
## Next Phase: Phase 4 - 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
- [x] Intervals.icu integration (push workouts + sync activities)
### Calendar Enhancements
- [ ] Drag-and-drop workout rescheduling
- [ ] ICS sync (Google Calendar / Apple Calendar / Outlook)
- [ ] Week view and day view options