# Manager Phase 1 — Shell, navigation, dashboard, and personal learning ## Delivered - Manager-specific navigation now labels Dashboard, My team, Team learning, Team courses, Reports, Notifications, and Personalization clearly. - `My learning` is permission-aware and appears only with `learning.personal.view`. - Manager personal learning reuses the learner home API and learner player; no second player or learning domain was introduced. - The Manager player route stays under `/manager/my-learning/:assignmentId`, while backend ownership remains tied to the authenticated user's assignment. - The dashboard now provides real compact KPIs for team members, active learners, completion rate, overdue learning, and upcoming deadlines. - Needs Attention remains the main actionable panel and links only to scoped team members. - Team course progress, upcoming deadlines, personal continue-learning, and recent team activity use real backend records. - A manager without an assigned team receives a useful empty state and retains a direct route to personal learning. ## Data contract additions `GET /api/v1/manager/workspace` adds: - `overview.activeLearners` - `overview.dueSoon` - `recentActivity[]` Recent activity is selected only after managed-team member IDs and organization scope are resolved. The query is bounded to eight records and does not add an N+1 query. ## Responsive and accessibility decisions - The dashboard uses existing semantic design tokens for light/dark compatibility. - Navigation keeps icon and text labels, visible focus, keyboard drawer behavior, and minimum touch targets. - Progress visuals now expose `progressbar`, min/max, and current value semantics. - Dense desktop KPI layout reflows to three, then two columns; dashboard panels and personal-learning rows become single-column where needed. - Automated browser checks cover 375, 768, and 1440 pixel widths with no document-level horizontal overflow. - Reduced-motion behavior continues to come from the shared application foundation. ## Behavior intentionally deferred - Send Reminder and team learning assignment remain unavailable until Phase 3 backend permissions and recipient scoping exist. - Skills snapshot is not shown because the Manager workspace does not yet return a verified team skill model; this belongs to Phase 4. - Approvals are not shown because no approval domain/workflow currently exists. - Saved reports and pending approvals are not fabricated. ## Verification - Backend authorization and workspace tests - Manager dashboard and personal-learning component tests - Shared learner player regression tests - Manager navigation permission tests - Full frontend and backend test suites - Frontend lint, TypeScript, and production build - PHP Pint format check - Playwright Manager desktop/tablet/mobile smoke test ## Deferred technical debt ### Medium - The production bundle already reports chunks over 500 kB. Route-level splitting should be handled as a dedicated performance task rather than mixed into Manager Phase 1. ### Low - The local seeded Manager has no personal assignment by default, so the browser smoke test validates the honest empty state. Assigned-course rendering and ownership are covered by frontend and backend automated tests.