02 - User Personas (Transport Module)
- 1. Transport Admin (
transport.*full access) - 2. School Admin / Registrar
- 3. Parent (forward-looking)
- 4. Driver (planned)
- 5. Student (planned)
- Permission matrix (source of truth:
permissions.constants.ts:62-74)
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 (seeAGENTS.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)
| Permission | Admin | Registrar | Parent | Driver |
|---|---|---|---|---|
transport.vehicle.read | yes | yes | no | no |
transport.vehicle.create/update/delete | yes | no | no | no |
transport.route.read | yes | yes | no | no |
transport.route.create/update/delete | yes | no | no | no |
transport.driver.read | yes | yes | no | no |
transport.driver.create/update/delete | yes | no | no | no |
transport.assign | yes | yes | no | no |
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).