Notices
A notice is an official announcement the committee broadcasts to the building. Each notice is emailed to every recipient and recorded with a per-recipient read receipt, so the committee can see who has seen it — and, when it matters, require an explicit acknowledgement.
Who can send and receive
Only committee members (chair, secretary, treasurer, and committee members) can create, edit, publish, or delete notices, and only the committee sees the recipient read/acknowledgement table. Every active member of the scheme can receive a notice and view the ones addressed to them.
Notices flow one way: committee → members. Owners, tenants, and strata managers receive notices but do not send them.
Audience targeting
A notice is addressed to one of three audience types, set when it is composed:
| Audience | audience_type | Who it reaches |
|---|---|---|
| Whole building | whole_building | Every active member of the scheme. |
| By role | by_role | Members in the selected roles. The convenience group committee expands to all four committee roles; you can also target owner, tenant, orstrata_manager. |
| Specific lots | specific_lots | The current owners of the chosen lots. Tenants are not yet linked to a lot, so use a whole-building or by-role notice to reach them. |
“Active” means a current membership (not departed) with verification statusself_declared, invited, or admin_verified. Each person receives at most one copy of a notice even if several selected lots include them.
Draft and publish
A notice is created as a draft. Drafts are not sent and can be freely edited or deleted. Publishing is a one-way step:
draft→published- Publishing resolves the audience, freezes the recipient list, stamps
published_at, and queues an email to each recipient. - Published notices cannot be edited or deleted — they are a permanent record.
- Publishing a notice with no matching active recipients is rejected (422).
- You can publish immediately on create, or save a draft and publish later.
Read receipts and acknowledgement
Each recipient gets a notice_recipients row carrying their delivery email, an optional linked lot, and two timestamps:
| Field | Set when |
|---|---|
read_at | The recipient opens the notice in the app, follows the tracked link in the email, or the email itself is opened (open tracking). Set once, on first read. |
acknowledged_at | The recipient explicitly confirms they have read it. Only relevant when the notice hasrequires_acknowledgement set. Acknowledging also marks it read. |
Turn on require acknowledgement when you need a record that recipients actively confirmed — not just that the email was opened. The committee detail view shows per-recipient read and acknowledgement status; the list view rolls these up into recipient_count, read_count, andacknowledged_count.
Acknowledgement is treated as a compliance action, so it remains available even when a scheme is paywalled after its trial.
Email delivery
Notices are sent through the shared notification backbone rather than inline: each recipient email is enqueued in the notifications outbox and dispatched by the cron loop. Because notices are official communications, they bypass individual opt-out preferences, and opens are tracked to drive the read receipt. Addresses on the platform suppression list (hard bounces and spam complaints) are never sent to.
API reference
| Method & route | Purpose |
|---|---|
GET /api/schemes/:id/notices | List notices. Committee sees all with delivery stats; members see only their own published notices. |
GET /api/schemes/:id/notices/:noticeId | Notice detail. Committee sees the recipient table; a recipient sees the content (and their receipt is marked read). |
POST /api/schemes/:id/notices | Create a draft (committee only). Pass publish: true to create and send in one call. |
PATCH /api/schemes/:id/notices/:noticeId | Edit a draft (committee only). Drafts only. |
POST /api/schemes/:id/notices/:noticeId/publish | Publish a draft (committee only). |
POST /api/schemes/:id/notices/:noticeId/acknowledge | Recipient acknowledges. Allowed even when paywalled. |
DELETE /api/schemes/:id/notices/:noticeId | Delete a draft (committee only). Published notices cannot be deleted. |
POST /api/notices/track/:token | Anonymous, token-gated read receipt fired from the tracked link in the email. |