Answers “what do I need to know right now?” — not an analytics panel. Deep financial view lives in Earnings, full agenda in Calendar.
Navigation: Home tab root. Bottom nav 5 items. No back chevron. Header = “Home” + notification bell.
Tap targets:
Data dependency: GET /coach/dashboard response needs these fields (extending current spec):
nextEvent — (exists) EventModelpendingRequestsCount — (exists)cashToCollect — new: {count, total, currency}sessionsToReviewCount — new: InttodaySummary — new: {sessionCount, totalValue}weekEarnings — new: {earned, plannedAdditional, bookedCount, cardTotal, cashTotal, cashClientCount, trendVsLastWeek}signals — new array: [{type, ...}] with latestReview + newClientsThisWeekStates (9 total — full coach lifecycle)
Onboarding tiers
Next Session empty variant — one component, copy adapts by backend flag hasHistory:
hasHistory = false → “No sessions booked yet” / “Share your profile to get your first client” / CTAs: Invite a client + Share profilehasHistory = true → “Nothing scheduled” / “Invite a client or reach out to recent ones” / CTAs: Invite a client + See recent clientsCopy rules
Athlete dashboard is a separate build — simpler (next session + requests + balance), no revenue breakdown.
Triage queue for sessions in Review state — events that ended but coach hasn’t marked complete or missed yet.
Why a dedicated list, not calendar: for N > 1 a calendar view forces hunting; the queue presents all pending reviews oldest-first for batch handling. For N = 1 we still land here (consistency > saving one tap).
Entry points
States
Missed styling rationale: low-severity destructive (outlined red) — marking missed is coach’s judgment, reversible within retention window. Not medium (tinted) because no other-user impact at this moment; not high because no data loss.
Backend: needs GET /coach/events?status=review or equivalent filtered endpoint. Bulk actions (select-all → mark complete) deferred until user feedback warrants it.