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

01 — Product Overview (Communication Module)

StudyLyon — Multi-Tenant ERP & School Management Platform. This package specifies the client-side (Flutter) design for the Communication module against the existing NestJS backend (src/modules/communication/). Backend is the source of truth for routes, contracts, and behavior; shared foundations live in 00-shared/.


1. Purpose

The Communication module lets an institution broadcast announcements to a chosen audience and run lightweight 1:1/group messaging (threads + messages). Announcements are the primary surface: admin/staff compose, publish, and measure read receipts; recipients (students, parents, teachers, staff) read them in a feed.

Backend scope today (docs/IMPLEMENTATION_PLAN.md:85-102, Phase 2): controllers announcements, messages, threads; schemas announcement, message, thread; plus events and repositories.

2. PRD / blueprint scope note (native-app exclusion)

The PRD blueprint (studylyon-blueprint/) targets a web dashboard; it defines no native mobile client. There is no Communication/Announcements doc in studylyon-blueprint/04-Modules/ — the nearest is Notifications.md, which scopes the separate notification engine (notifications, notification_templates, notification_preferences collections). The client docs in this package are therefore written forward-looking: the Flutter app is not in the PRD and must be treated as a design artifact, not a shipped scope. All mobile-only concerns (offline queue, push delivery, local read-state caching) are marked (forward-looking).

3. Business goals

GoalMeasure
Institutional broadcast in secondsDraft → publish ≤ 3 taps from composer
Audience accuracyNo announcement delivered outside its audience
Delivery accountabilityRead receipts per announcement, per recipient
Low operational noiseRecipients see only announcements targeted at them

4. User goals

  • Org Admin / Principal: publish institution-wide or targeted notices; see who has read them.
  • Teacher / Staff: announce to one class/section or a role; follow up with laggards.
  • Student / Parent: never miss a school notice in the feed; open + auto-acknowledge.
  • Anyone: lightweight 1:1/group chat on threads.

5. Why this exists

Schools still run physical notice boards and ad-hoc WhatsApp groups. Announcements consolidate this into one tenant-isolated, auditable channel with targeting and read tracking; threads replace informal group chat. Per docs/IMPLEMENTATION_PLAN.md:174, announcements are also indexed by global search.

6. Module status matrix

CapabilityStatusSource
Create announcement (draft)Implementedannouncements.controller.ts:23-27
List (filter by audience)Implementedannouncements.controller.ts:29-33
Publish + broadcastImplementedannouncements.controller.ts:35-39
Mark readImplementedannouncements.controller.ts:41-45
Read receiptsImplementedannouncements.controller.ts:47-51
Detail GET /announcements/:idGapno route
Update / delete / archiveGapno route
Priority / pinned / expiry(planned)not in announcement.schema.ts
Templates(planned)IMPLEMENTATION_PLAN.md:231
RBAC communication.* permsGapabsent from permissions.constants.ts
Event→queue routingGapabsent from event-queue-map.ts
WebSocket realtime(planned)IMPLEMENTATION_PLAN.md:119

7. Platform dependencies (backend)

  • NestJS 11 strict TS, JWT auth (JwtAuthGuard, communication.module.ts:24,43)
  • MongoDB announcements collection, tenant-scoped via BaseRepository (announcement.schema.ts:31,57)
  • Cross-module reads: GradeRepository, SectionRepository, StudentRepository, OrganizationMember model (announcement.service.ts:6-8,25-26)
  • Domain events via EventBus (AnnouncementCreated / AnnouncementPublished, announcement.service.ts:39-51,80-91) — queue fan-out is not yet wired (event-queue-map.ts has no Announcement routes)

8. Out of scope for this package

Notification engine (channels, preferences, templates) — Notifications module; broadcast templates — (planned); delivery push/email mechanics — handled by the Notifications module consumers of the emitted events.