rspace-online/modules
Jeff Emmett cdfe8c5b78 feat: add unified notification system with real-time WS delivery
Persistent, PostgreSQL-backed notification system replacing the in-memory
access request polling. Notifications are created via notify(), persisted
to DB, and delivered in real-time over WebSocket with a 30s polling fallback.

Infrastructure:
- notifications + notification_preferences tables in EncryptID schema
- 10 CRUD functions in db.ts (create, list, count, read, dismiss, etc.)
- notification-service.ts: core notify(), WS registry, notifySpaceAdmins()
- notification-routes.ts: REST API at /api/notifications
- rstack-notification-bell.ts: bell icon component with dropdown panel

Module integration (11 hooks):
- spaces.ts: access_request, access_approved, access_denied, member_joined,
  member_left, role_changed
- index.ts WS handler: ping_user (24h expiry)
- encryptid/server.ts: guardian_accepted, recovery_initiated (owner + guardians),
  recovery_approved

Legacy cleanup:
- Removed access request polling, badge, and approve/deny UI from
  rstack-identity.ts (now handled by notification bell)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:59:09 -08:00
..
rbooks perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rcal feat: add colorful, spatially-enriched calendar event rendering 2026-03-03 18:20:14 -08:00
rcart perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rchoices feat: workflow template, choice components, space settings, EncryptID vault, UI polish 2026-03-03 13:15:13 -08:00
rdata feat: unified space lifecycle & module scoping contract (Phase 0+1) 2026-03-02 13:35:41 -08:00
rdesign feat: add feeds/acceptsFeeds to rsplat, rdesign, rdocs, rschedule 2026-03-03 14:41:55 -08:00
rdocs feat: add feeds/acceptsFeeds to rsplat, rdesign, rdocs, rschedule 2026-03-03 14:41:55 -08:00
rfiles perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rflows feat: add unified notification system with real-time WS delivery 2026-03-03 18:59:09 -08:00
rforum feat: add seed template data for rCart, rChoices, rFiles, rForum, rFunds, rInbox, rSplat 2026-03-02 22:49:21 -08:00
rinbox perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rmaps fix: getApiBase() across all 16 rApp modules for subdomain routing 2026-03-02 21:01:06 -08:00
rnetwork feat: add multi-workspace Twenty CRM support & CRM view component 2026-03-03 18:17:09 -08:00
rnotes feat: add unified notification system with real-time WS delivery 2026-03-03 18:59:09 -08:00
rphotos feat: fall back to demo data when rPhotos/rInbox APIs return empty 2026-03-03 11:16:22 -08:00
rpubs feat: workflow template, choice components, space settings, EncryptID vault, UI polish 2026-03-03 13:15:13 -08:00
rschedule feat: add universal reminders system with calendar integration & cross-module drag 2026-03-03 17:37:54 -08:00
rsocials feat: add thread drafts, shareable permalinks & Twitter card previews 2026-03-03 16:29:52 -08:00
rspace feat: unified space lifecycle & module scoping contract (Phase 0+1) 2026-03-02 13:35:41 -08:00
rsplat feat: add feeds/acceptsFeeds to rsplat, rdesign, rdocs, rschedule 2026-03-03 14:41:55 -08:00
rswag feat: workflow template, choice components, space settings, EncryptID vault, UI polish 2026-03-03 13:15:13 -08:00
rtrips perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rtube feat: unified space lifecycle & module scoping contract (Phase 0+1) 2026-03-02 13:35:41 -08:00
rvote perf: parallelize local-first init — batch IDB loads, cache crypto keys, preload sync states 2026-03-03 14:18:55 -08:00
rwallet fix: getApiBase() across all 16 rApp modules for subdomain routing 2026-03-02 21:01:06 -08:00
rwork feat: add universal reminders system with calendar integration & cross-module drag 2026-03-03 17:37:54 -08:00