Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

02 - User Personas (Transport Module)

Personas for the Transport module client, derived from the module's permission surface (permissions.constants.ts:62-74) and role matrix (docs/user-flows/END_TO_END_USER_FLOWS.md:760-763). All access is JWT-gated; RBAC guards on the actual endpoints are not yet implemented (see AGENTS.md "Not yet implemented").


1. Transport Admin (transport.* full access)

Who: school operations staff who own the fleet and daily commute. Permissions: transport.vehicle.*, transport.route.*, transport.driver.*, transport.assign (read/create/update/delete + assign, permissions.constants.ts:62-74). Goals:

  • Keep the fleet register truthful: no duplicate plates, current vehicle status.
  • Keep routes stable and drivers licensed.
  • Answer "which route does this student ride?" in seconds (GET /transport/assignments/:studentId, transport.controller.ts:126-130). Pain points: duplicate-plate or duplicate-license entries silently created in other systems; deleting a vehicle that is still on a route (backend 409s, transport.service.ts:94-99); no search - paginated lists only (transport.service.ts:69). Frustration threshold: high - operates daily; bulk operations matter.

2. School Admin / Registrar

Who: owns student records including transportRequired flag (student.schema.ts:53-54). Goals: ensure students who need transport are assigned to a route and shift; hand off to transport admin when a student transfers. Permissions: same transport.* set (role matrix docs/user-flows/END_TO_END_USER_FLOWS.md:760-763 grants transport to admin). Pain points: assignment conflicts (student already on the route - 409, transport.service.ts:252-258).

3. Parent (forward-looking)

Who: wants to know where the child's bus is and when it arrives. Goals: read the child's route assignment and stop (GET /transport/assignments/:childId, docs/user-flows/END_TO_END_USER_FLOWS.md:392-406). Permissions: read-own only; transport.* not granted to parents (docs/user-flows/END_TO_END_USER_FLOWS.md:760-763). No parent-facing transport endpoint exists - (forward-looking).

4. Driver (planned)

Who: fleet driver; will see assigned route, vehicle, and stop list ((planned) - driver app surfaces from IMPLEMENTATION_PLAN.md:229 scope). Goals: know today's route, stops in order, students on board ((planned)), report delays/emergencies ((planned)).

5. Student (planned)

Who: rider; sees which bus/stop/shift applies. (planned).


Permission matrix (source of truth: permissions.constants.ts:62-74)

PermissionAdminRegistrarParentDriver
transport.vehicle.readyesyesnono
transport.vehicle.create/update/deleteyesnonono
transport.route.readyesyesnono
transport.route.create/update/deleteyesnonono
transport.driver.readyesyesnono
transport.driver.create/update/deleteyesnonono
transport.assignyesyesnono

Matrix follows docs/user-flows/END_TO_END_USER_FLOWS.md:760-763 (transport.* = admin yes, parent read-own only, no driver/student row today).