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 (Communication Module)

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/reads after 24 h.
  • Audience needs: broadcast-all (AudienceType.ALL), role targeting (AudienceType.ROLEorgMemberModel.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.GRADE and AudienceType.SECTION — resolved via gradeRepo.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 (findOne returns [], 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 (or AudienceType.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 against targetUserIds locally ((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 via AudienceType.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 consumersAnnouncementCreated / AnnouncementPublished payloads (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

CapabilityAishaDanielZainabMrs. OkoroSamuel
Compose announcement
Publish / broadcast
Read receipts view
Feed + mark read
Threads / messages