Role-aware dashboard personas. Access derived from default role permissions
(role.schema.ts:8-65) and dashboard permissions
(permissions.constants.ts:37-38). Views marked (planned) are not
implemented server-side. Personas marked (proposed) are analytics-relevant
only.
Runs the school; sets policy, reviews ops daily. org_admin holds all permissions including dashboard.read and dashboard.widget.manage (role.schema.ts:23; permissions.constants.ts:37-38)
Access today
Full overview — active students, teachers, staff, today's attendance rate, pending invoices, total dues (dashboard.service.ts:50-70)
Job to be done
"What happened today, and what needs my attention, in 30 seconds"
Behaviour
Opens dashboard on login; reads KPI row left-to-right; taps a KPI card to drill into Students/Fees/Attendance screens; pulls-to-refresh when she hears a class was noisy; re-checks dues at month-end
Pain points
Numbers must be current within 60 s (cache TTL Dashboard.md:41); stale data without an indicator erodes trust; no trend column today — "up or down vs yesterday?" is answered by memory
Want (not yet)
Widget layout customization (planned) — dashboard.widget.manage exists (permissions.constants.ts:38) but no server API; coaching KPIs (planned) (IMPLEMENTATION_PLAN.md:645)
dashboard.read must be added to a role the tenant assigns, or the server must allow partial widget visibility per role (blueprint Dashboard.md:52) — design the UI to render a finance-only layout for this persona (planned)
Teaches classes; marks attendance. Default permissions: student.read, attendance.mark, attendance.edit (role.schema.ts:31) — no dashboard permission
Access today
No dashboard. Teacher view (planned) (IMPLEMENTATION_PLAN.md:232)
Derived need
Personal day: my classes today, my attendance summary, timetable link. None of the current aggregates (dashboard.service.ts:50-70) are teacher-scoped — requires a (planned)GET /dashboard/attendance scope by teacher
Behaviour
Would check attendance % at end of each class; wants it to reflect AttendanceMarked immediately (event Dashboard.md:34)
Track child's attendance/dues. Parent: student.read (role.schema.ts:55); student: no permissions (role.schema.ts:63)
Access today
No dashboard
Derived need
Child-scoped attendance %, fee balance, notices. (planned) per IMPLEMENTATION_PLAN.md:232; child-scoping has no server support today — flag in QA (unknown ownership)
Note
Student-visible fees would need fees-related read permission; none exists for the student role (role.schema.ts:63) — (planned) gap
Unknowns: per-role widget filtering rules and the finance-read permission are
not defined in code → (planned); the client must render by what
permissions it has and hide what it doesn't (00-shared/06 §5 403 → hide).