02 — User Personas (Communication Module)
- 1. Aisha — Org Admin / Principal (
Author-Power) - 2. Daniel — Teacher (
Author-Local) - 3. Zainab — Student (
Recipient) — PRD native-app excluded,(forward-looking) - 4. Mrs. Okoro — Parent (
Recipient-Light) - 5. Samuel — Staff / Receptionist (
Reader+Chatter) - 6. Non-human actors
- 7. Persona → capability matrix
Who composes, publishes, receives, and measures announcements. Backend-verified against
AudienceType(announcement.schema.ts:7-13) and audience resolution (announcement.service.ts:109-148).
1. Aisha — Org Admin / Principal (Author-Power)
- Goals: publish whole-school notices; hold people accountable via read receipts.
- Behavior: writes 2-5 announcements/week (holidays, events, emergencies); expects
draft→publish in seconds; checks
GET /announcements/:id/readsafter 24 h. - Audience needs: broadcast-all (
AudienceType.ALL), role targeting (AudienceType.ROLE→orgMemberModel.find({ roles: value, status: 'active' }),announcement.service.ts:114-119). - Frustrations: can't see who hasn't read; no expiry; no priority pinning
(
(planned)).
2. Daniel — Teacher (Author-Local)
- Goals: announce to exactly his Grade 10 / Section 10-A; no noise elsewhere.
- Behavior: posts homework reminders, test changes; targets one class at a time.
- Audience needs:
AudienceType.GRADEandAudienceType.SECTION— resolved viagradeRepo.findOne({ name })/sectionRepo.findOne({ name })then students of that group (announcement.service.ts:120-135). - Frustrations: audience value is a name string, not an id — typo = empty
audience (
findOnereturns[],announcement.service.ts:122,129).
3. Zainab — Student (Recipient) — PRD native-app excluded, (forward-looking)
- Goals: never miss a school notice; read fast on mobile.
- Behavior: checks feed morning/evening; taps detail; expects unread badge count to clear.
- Needs: feed of announcements whose
targetUserIds(orAudienceType.ALL) include her; one-tap "mark read" (POST /announcements/:id/read). - Frustrations: the feed endpoint does not filter by current user — it returns
all announcements in the tenant (
announcement.service.ts:56-60); client must pre-filter againsttargetUserIdslocally ((forward-looking)).
4. Mrs. Okoro — Parent (Recipient-Light)
- Goals: see school notices for her child; skim, not study.
- Behavior: opens push/email link straight to detail; rarely composes.
- Needs: short titles, clear body, attachments; explicit audience line ("To: Grade 10").
- Frustrations: no per-child delivery — targeting is by student
userId, and parent delivery is only viaAudienceType.ROLE: 'parent'(announcement.service.ts:114-119).
5. Samuel — Staff / Receptionist (Reader+Chatter)
- Goals: read internal notices; message a colleague 1:1.
- Behavior: participates in threads (
threads.controller.ts); reads announcements aimed at staff role. - Needs: tabs "For me / All"; thread list with unread counts.
6. Non-human actors
- EventBus consumers —
AnnouncementCreated/AnnouncementPublishedpayloads (announcement.service.ts:39-51,80-91;communication-events.ts:9-13); queue routing(planned). - Notifications engine — downstream, out of this module's scope
(
04-Modules/Notifications.md).
7. Persona → capability matrix
| Capability | Aisha | Daniel | Zainab | Mrs. Okoro | Samuel |
|---|---|---|---|---|---|
| Compose announcement | ✓ | ✓ | ✗ | ✗ | ✗ |
| Publish / broadcast | ✓ | ✓ | ✗ | ✗ | ✗ |
| Read receipts view | ✓ | ✓ | ✗ | ✗ | ✗ |
| Feed + mark read | ✓ | ✓ | ✓ | ✓ | ✓ |
| Threads / messages | ✓ | ✓ | ✓ | ✓ | ✓ |