Text-only 1:1 direct messaging (Instagram/FB-DM style), surfaced via a new bottom-right FAB next to the System Activity gear and book-processing icons, with an unread-count badge and a slide-in drawer.
Visibility / permission rules
admin/staff: see everyone currently online, can message anyone
parents: always see their linked children (with online status) and can message them; cannot see staff in the roster
children: see only their parent(s), nobody else (no other children, no staff)
Anyone may reply within a conversation that was legitimately initiated with them (covers staff→child / staff→parent outreach)
Implementation shape (investigated 2026-07-21)
Existing ChatHub/MultiTenantChatHub are Redis-only (TTL'd) and org-scoped, not family-aware → new durable Mongo collections (direct-conversations, direct-messages) + Messaging domain (CQRS) in the API; real-time delivery reuses the existing /hubs/notifications pipeline (user-{sub} groups), no new hub.
Presence: Redis keys keyed by Keycloak sub, heartbeat via NotificationsHub (ChatHub's 3-min TTL has no refresh — not reused).
Frontend: messaging FAB + drawer at app shell root following book-processing-notifications drawer pattern; unread matBadge; contacts/conversations via httpResource, mutations imperative.
Backend + frontend PRs to follow.
Text-only 1:1 direct messaging (Instagram/FB-DM style), surfaced via a new bottom-right FAB next to the System Activity gear and book-processing icons, with an unread-count badge and a slide-in drawer.
**Visibility / permission rules**
- admin/staff: see everyone currently online, can message anyone
- parents: always see their linked children (with online status) and can message them; cannot see staff in the roster
- children: see only their parent(s), nobody else (no other children, no staff)
- Anyone may reply within a conversation that was legitimately initiated with them (covers staff→child / staff→parent outreach)
**Implementation shape (investigated 2026-07-21)**
- Existing ChatHub/MultiTenantChatHub are Redis-only (TTL'd) and org-scoped, not family-aware → new durable Mongo collections (direct-conversations, direct-messages) + Messaging domain (CQRS) in the API; real-time delivery reuses the existing /hubs/notifications pipeline (user-{sub} groups), no new hub.
- Presence: Redis keys keyed by Keycloak sub, heartbeat via NotificationsHub (ChatHub's 3-min TTL has no refresh — not reused).
- Frontend: messaging FAB + drawer at app shell root following book-processing-notifications drawer pattern; unread matBadge; contacts/conversations via httpResource, mutations imperative.
Backend + frontend PRs to follow.
Implementation up for review: spikersoft-backend PR #440 (Mongo persistence, api/messaging endpoints, permission matrix, NotificationsHub presence + ReceiveDirectMessage fan-out) and spikersoft-angular PR #505 (FAB + drawer, unread badge, heartbeat presence). Backend data layer smoke-tested against live Mongo 8.2.6. Leaving open until both PRs merge.
Implementation up for review: spikersoft-backend PR #440 (Mongo persistence, api/messaging endpoints, permission matrix, NotificationsHub presence + ReceiveDirectMessage fan-out) and spikersoft-angular PR #505 (FAB + drawer, unread badge, heartbeat presence). Backend data layer smoke-tested against live Mongo 8.2.6. Leaving open until both PRs merge.
Feature complete and live: backend #440/#441/#442 + angular #505/#506/#507 all merged and deployed. Verified in prod: role/family-scoped DMs, live badge+ding, presence, roster incl. admin-parent overlap, avatars from MinIO. Closing.
Feature complete and live: backend #440/#441/#442 + angular #505/#506/#507 all merged and deployed. Verified in prod: role/family-scoped DMs, live badge+ding, presence, roster incl. admin-parent overlap, avatars from MinIO. Closing.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Text-only 1:1 direct messaging (Instagram/FB-DM style), surfaced via a new bottom-right FAB next to the System Activity gear and book-processing icons, with an unread-count badge and a slide-in drawer.
Visibility / permission rules
Implementation shape (investigated 2026-07-21)
Backend + frontend PRs to follow.
Implementation up for review: spikersoft-backend PR #440 (Mongo persistence, api/messaging endpoints, permission matrix, NotificationsHub presence + ReceiveDirectMessage fan-out) and spikersoft-angular PR #505 (FAB + drawer, unread badge, heartbeat presence). Backend data layer smoke-tested against live Mongo 8.2.6. Leaving open until both PRs merge.
Feature complete and live: backend #440/#441/#442 + angular #505/#506/#507 all merged and deployed. Verified in prod: role/family-scoped DMs, live badge+ding, presence, roster incl. admin-parent overlap, avatars from MinIO. Closing.