Skip to main content

Portal requirements (POR-*)

@enode/portal — the browser-first coach/admin console (responsive, no native shell). Shared behavior (auth flow, i18n, units, error engine) lives in shared.md. See the overview for the ID scheme and status legend. Test cases: portal-system-tests.md.

Areas: AUTH · DASH (dashboard) · PLAN (planner) · DEVICES · USERS · EXER (exercises) · WKT (workout templates) · TAGS · INS (insights) · PROF (profiles/performance) · HIST (history) · MIGR (migration) · EXP (export) · NOTIF (notifications) · RBAC (privilege gating).

Auth & entry (POR-AUTH)

IDRequirementStatusTests
POR-AUTH-01Both One and Pro users can sign in via the shared flow (SHR-AUTH-01); registration is Pro-only; One users are supported primarily to migrate legacy data.stablePOR-ST-1.1..1.3
POR-AUTH-02Device-limit (310), onboarding (311), and invitation (312) responses are handled with their dedicated dialogs/redirects (SHR-AUTH-06..08).stablePOR-ST-1.6..1.8

Dashboard (POR-DASH)

IDRequirementStatusTests
POR-DASH-01The dashboard shows time-range-scoped summaries (active athletes, completed sessions, total volume, sets) with trends vs the prior period.stablePOR-ST-2.1, POR-ST-2.2
POR-DASH-02Top-exercise and athlete-activity rankings and a completed-sessions table are shown for the selected range.stablePOR-ST-2.3, POR-ST-2.4

Planner (POR-PLAN)

Covered in depth by the dedicated Planner manual test protocol.

IDRequirementStatusTests
POR-PLAN-01The planner offers month/week/day calendar views of scheduled and recurring workouts.stablePlanner protocol §1–§5
POR-PLAN-02Workouts can be created, edited, deleted, and rescheduled (including drag & drop); recurring schedules are supported.stablePlanner protocol §6, §8, §9 + POR-ST-3.1
POR-PLAN-03Saving a change to a shared workout plan surfaces the shared-definition conflict dialog (HTTP 313) with fork/update/cancel options.stablePlanner protocol §7

Devices (POR-DEVICES)

IDRequirementStatusTests
POR-DEVICES-01Connected device sessions (stations) can be listed, searched, and removed.stablePOR-ST-4.1, POR-ST-4.2

Users & roster (POR-USERS)

IDRequirementStatusTests
POR-USERS-01Users are listed in a searchable table filterable by role (admin/coach/athlete).stablePOR-ST-5.1
POR-USERS-02A user can be created and edited in the user drawer, including athlete metadata; height/weight respect the metric/imperial setting.stablePOR-ST-5.2, POR-ST-5.6
POR-USERS-03Bulk operations: add tags to multiple users; delete multiple users (with confirmation).stablePOR-ST-5.3, POR-ST-5.4
POR-USERS-04A roster CSV can be uploaded through the wizard: dropzone → parse → column auto-mapping → validation → review → asynchronous creation with live progress. Privilege: featureUserBatchUpload.stablePOR-ST-5.5
POR-USERS-05Per-user actions include data export and viewing upcoming workouts.stablePOR-ST-5.7

Exercises (POR-EXER)

IDRequirementStatusTests
POR-EXER-01The exercise catalogue is searchable by name/tag and filterable by equipment and muscle category; exercises can be favourited.stablePOR-ST-6.1, POR-ST-6.2
POR-EXER-02The exercise detail drawer shows catalogue data and lets the user override name/details with custom values.stablePOR-ST-6.3

Workout templates (POR-WKT)

IDRequirementStatusTests
POR-WKT-01Workout templates are listed as cards with search and tag filtering; templates can be created and edited in a drawer and bulk-deleted. The page is an early build (in-code note: structural first pass).stablePOR-ST-7.1..7.3

Tags (POR-TAGS)

IDRequirementStatusTests
POR-TAGS-01Tags are listed with access-level filter chips; a tag can be created/edited (color, details) and bulk-deleted; tag relations are shown.stablePOR-ST-8.1..8.3

Insights — custom charts (POR-INS)

IDRequirementStatusTests
POR-INS-01Users with the writeCustomCharts privilege can build custom charts (5 chart types) on a draggable board; charts persist per user.stablePOR-ST-9.1..9.3
POR-INS-02The builder preview, empty state, and walkthrough render synthetic example charts (educational visuals, not real data).mocked— (known behaviour)

Profiles — performance matrix (POR-PROF)

IDRequirementStatusTests
POR-PROF-01The Profiles page shows a two-axis athlete × exercise performance matrix with list/grid views (persisted preference), pair detail, and per-athlete trend.stablePOR-ST-10.1..10.3

History & session details (POR-HIST)

IDRequirementStatusTests
POR-HIST-01Completed sessions can be searched with filters and paginated; the default window is the last year.stablePOR-ST-11.1, POR-ST-11.2
POR-HIST-02A session opens in a drawer with a summary tab and technique board.stablePOR-ST-11.3
POR-HIST-03The session summary's zone-distribution and muscle-map cards render from the V2 history-stats DTO; marked WIP in code, zone card limited to conventional-strength exercises.wip— (known behaviour)
POR-HIST-04A dedicated date-range picker is planned for a later milestone (dev-only all-time toggle exists).wip
POR-HIST-05An Archived filter splits the sessions table into disjoint compartments: by default sessions from archived athletes are hidden; the filter shows only those (SHR-ARCH-03). Like the page's other facets it narrows the loaded page only, so the counts are page-scoped.stablePOR-ST-17.2

Migration (POR-MIGR)

IDRequirementStatusTests
POR-MIGR-01A wizard migrates athletes, groups, and history from enode Pro; reachable as a route and as a sidebar drawer. Privilege: featureMigration.stablePOR-ST-12.1, POR-ST-12.2
POR-MIGR-02Exercise mapping during migration is chosen manually by the coach (auto-suggestion intentionally stubbed — backend returns no targets by design).stablePOR-ST-12.3

Export (POR-EXP)

IDRequirementStatusTests
POR-EXP-01The export flow produces data exports (including PDF); reachable as a route (deep-linkable via URL params) and as a sidebar drawer. Privilege: featureDataExport.stablePOR-ST-13.1, POR-ST-13.2

Notifications (POR-NOTIF)

IDRequirementStatusTests
POR-NOTIF-01Notifications arrive live (stream + arrival peek + bell unread badge) and are listed in an inbox with filter segments, mark-read, delete, and deep-link expansion.stablePOR-ST-14.1..14.3
POR-NOTIF-02Long-running roster uploads report progress live (stream host + peek).stablePOR-ST-5.5

Privileges & roles (POR-RBAC)

IDRequirementStatusTests
POR-RBAC-01Navigation entries and routes are gated by privileges (useHasPrivilege): Users pages, Insights, roster upload, migration, and export are hidden/blocked without the corresponding privilege.stablePOR-ST-15.1, POR-ST-15.2
POR-RBAC-02The role model is owner → administrator ("Facility") → coach → athlete; the owner is an all-access singleton excluded from role filters.stablePOR-ST-15.3

Dev-only surfaces

/dashboard/debug, /dashboard/debug/wizard, and /dashboard/debug/benchmark plus the mock-data harness render only in dev builds (render-time guards; all mock setters no-op in production). Not release-tested beyond confirming they are absent in production builds (POR-ST-16.5).