Dashboard, sessions, students, drills, and more
Coach Features
The coach dashboard is the primary interface. All coach-facing pages are wrapped in the DashboardLayout component with a collapsible sidebar for navigation.
Dashboard
Route: /dashboard
The dashboard is a widget-based overview of the coach's activity. It includes:
- HeroStats -- Key metrics: total students, total sessions, average ride score
- SessionFeed -- Recent sessions with status indicators
- AthleteHeroCard -- Featured athlete spotlight with recent activity
- PerformanceChart -- Ride score trends over time (Recharts)
- UpcomingSchedule -- Next scheduled lessons
- QuickActions -- Shortcuts to upload, add student, schedule lesson
- ConditionsWidget -- Current surf conditions at home break
- SurfForecastWidget -- Multi-day forecast preview
Sessions
Route: /sessions (list), /sessions/[id] (detail)
Session List
Paginated list of all sessions with:
- Status filters: complete, processing, uploading, failed
- Sort by date (newest/oldest)
- Delete sessions
- Click to open session detail
Session Detail (Coaching Workspace)
The core coaching interface for analyzing session footage:
- VideoPlayer -- HLS-based video player with frame-by-frame controls
- AnnotationPanel -- Add text, drawing, and voice annotations at specific timestamps
- DrawingCanvas -- Freehand drawing overlay on the video frame
- RideScorer -- Score individual rides across criteria (wave selection, positioning, speed, style, power, flow)
- AIInsightsPanel -- AI-generated analysis results (see AI Video Analysis)
- Multi-clip support -- Sessions with multiple clips show a clip selector
Upload
Route: /upload
Two methods for importing session footage:
- Direct Upload -- Drag-and-drop or file picker. Files are compressed client-side using FFmpeg WASM before being sent to the AI processing backend. Concurrent upload pool limited to 2 simultaneous uploads.
- Frame.io Import -- Browse connected Frame.io accounts, navigate folders, and select video assets for import (up to 10 clips per import).
Both methods create a session record with clips and send footage to Modal for AI analysis.
Students (Athletes)
Route: /students (roster), /students/[id] (detail)
Athlete Roster
- Searchable list with skill-level filter (beginner, intermediate, advanced, pro)
- Add Student modal: name, email, age, stance (regular/goofy), skill level
- Click to view individual student profile
Student Detail
- Skill Tree -- Visual taxonomy of surf skills with assessed progress levels
- Ride Scores -- Historical ride scores across sessions
- Session History -- All sessions the student has been linked to
- Equipment -- Gear quiver (boards, fins, wetsuits, etc.)
- Achievements -- Earned badges and milestones
Drills
Route: /drills
A library of exercises categorized by type and difficulty:
- Categories: Water, Land, Mental, Fitness
- Skill Levels: Beginner, Intermediate, Advanced, All
- Full CRUD for creating/editing drills
- Multi-step instructions (stored as JSON)
- Drill images for visual reference
Lessons
Route: /lessons
Lesson scheduling with two views:
- Calendar View -- Monthly calendar with lesson indicators
- List View -- Sortable list of upcoming and past lessons
- Assign students, set location/spot, duration, and notes
- Link drills to lessons for structured session plans
- Surf condition forecast integration for scheduled dates
Analytics
Route: /analytics
Recharts-powered analytics dashboard with date-range filtering:
- Student growth over time
- Session frequency and trends
- Ride score distributions and averages
- Skill assessment progress across the roster
- Lesson and drill assignment activity
Training Plans & Goals
Route: /plans
- Training Plans -- Multi-week structured programs per student with assigned drills and schedule
- Goals -- Metric-based goals (sessions, scores, skills, drills, waves, custom) with target values and milestone checkpoints
Competitions
Route: /competitions (list), /competitions/[id] (detail)
Full competition management:
- Formats: Single elimination, double elimination, round robin, expression session
- Heats -- Create rounds with multiple heats, assign students with jersey colors and seeds
- Scoring -- Wave-by-wave scoring (0--10 scale), interference tracking
- Results -- Automatic placement based on best wave scores
Billing
Route: /billing
- Coaching Packages -- Create packages with pricing, session counts, and duration
- Subscriptions -- Track active student subscriptions
- Payments -- Payment history with status tracking (succeeded, pending, failed, refunded)
Other Features
| Feature | Route | Description |
|---|---|---|
| Messages | /messages | Real-time coach-student messaging with conversation threads |
| Journal | /journal | Session journal entries with mood/energy/confidence ratings (1-5) |
| Highlights | /highlights | Curate highlight reels from session clips, public/private sharing |
| Compare | /compare | Side-by-side synced video comparison of two sessions |
| Community | /community | Leaderboard (ride scores), community posts with likes |
| Reports | /reports/[id] | Shareable session reports (public route) |
| Settings | /settings | Coach profile: name, email, location, home break, bio, avatar |
| Invite | /invite/[token] | Student invite acceptance page (public) |