πŸ“„ coach-retool-spec.md 4,040 bytes Sunday 12:22 πŸ“‹ Raw

RTSport β€” Coach Dashboard Retool + AD View Spec

Date: 2026-05-03
Status: Design Decision β€” Pending Implementation
Owner: Daedalus (frontend), Socrates (backend API update)


Problem

Current Coach dashboard shows multi-sport roster. Real coaches only manage ONE sport.

Solution: Two Views

1. Retooled Coach Dashboard (Single-Sport)

Scope: One sport, one team, all athletes in that sport

Header:

RTSport                          🏈 Football (Coach)
                                 ↓ sport selector (dropdown)

Quick Stats:

[ 3 Out ] [ 2 Modified ] [ 45 Cleared ]

Roster Section:

Varsity Football β€” 50 athletes

Jake Larson          🚫 Out      Ankle - Right
Marcus Johnson       🚫 Out      Left Knee ACL Tear
Tyler Wilson         ⚠️ Modified  Knee - Left
Brandon Davis        βœ“ Cleared
Connor Miller        βœ“ Cleared
...

Tap athlete β†’ detail overlay:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Jake Larson                 β”‚
β”‚ Varsity Β· Grade 11 Β· WR     β”‚
β”‚                             β”‚
β”‚ 🚫 OUT β€” Ankle - Right      β”‚
β”‚ Severity: Moderate          β”‚
β”‚ Phase: Active Rehab (2/4)   β”‚
β”‚                             β”‚
β”‚ Milestones:                 β”‚
β”‚ βœ“ Initial Assessment        β”‚
β”‚ β†’ Active Rehab (current)    β”‚
β”‚ β—‹ Return to Play            β”‚
β”‚ β—‹ Full Clearance            β”‚
β”‚                             β”‚
β”‚ [Message AT] [View Timeline]β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Actions:
- Message AT (opens chat/email)
- View full timeline (scroll)

Sport Selector:
- If coach has multiple sports assigned, show dropdown
- Default to primary sport
- Switching reloads roster


2. AD View (Multi-Sport Overview)

Scope: All sports in school, summary level

Header:

RTSport                          πŸ‘€ AD Overview

School Stats:

Total Athletes: 340
Active Cases: 12
Out Today: 3
Modified: 5

Sport Cards:

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 🏈 Football  β”‚ β”‚ πŸ€ Basketballβ”‚
β”‚   50 ath     β”‚ β”‚   15 ath     β”‚
β”‚   3 Out      β”‚ β”‚   0 Out      β”‚
β”‚   2 Modified β”‚ β”‚   1 Modified β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tap sport card β†’ drill to that sport's coach view

Recent Activity Feed:

β€’ 10 min ago β€” Jake Larson (FB) marked Out
β€’ 2 hr ago β€” Tyler Wilson (FB) restriction modified
β€’ Yesterday β€” Marcus Johnson (FB) case opened

API Changes Required

Coach Model Update

class User(BaseModel):
    id: str
    email: str
    role: Literal["at", "coach", "parent", "ad"]
    school_id: str
    assigned_sports: List[str]  # NEW β€” coach's sports
    assigned_teams: List[str]   # NEW β€” coach's teams

New Endpoints

GET /api/v1/dashboard/coach?sport=Football
β†’ Returns roster for that sport

GET /api/v1/dashboard/ad
β†’ Returns all sports summary

GET /api/v1/roster?school_id=X&sport=Football&team=Varsity
β†’ Already supported, use it

Seed Data Update

Add test coaches:

coach_football@preble.k12.wi.us β€” Football only
coach_basketball@preble.k12.wi.us β€” Basketball only
coach_multi@preble.k12.wi.us β€” Football + Basketball

Implementation Order

  1. Backend: Update User model + seed data + new endpoints
  2. Coach Dashboard: Retool to single-sport
  3. AD View: Create new page
  4. Test: Verify with different coach logins

Questions for Matt

  1. Coach sport assignment: Manual by AT? Self-selected? Imported from SIS?
  2. Assistant coaches: Do they see full team or position group only?
  3. AD permissions: Can AD edit cases, or view-only?
  4. Phase 1 priority: Coach retool first, AD view second?