Appearance
Epic 10 — Notifications
BE-NOTIF-001 — Notification model (MongoDB) and triggers
- [x] Implemented
Files:
- Create:
src/models/mongo/Notification.ts— Mongoose schema - Create:
src/services/notifications/index.ts—createNotification(userId, type, payload),markRead(id),getUnread(userId) - Edit:
src/graphql/schema/index.ts— addNotificationtype,notificationsquery,markNotificationReadmutation - Create:
src/graphql/resolvers/notifications.ts
Notification types: JOB_MATCH, APPLICATION_STATUS_CHANGE, SHORTLISTED, GROUP_INVITE, NEW_JOB_POSTED (for talent matching a saved search), PROFILE_VIEW
Trigger points: Call createNotification() from application, discover, and job services after relevant events.
BE-NOTIF-002 — New notification types for epics 17–23
- [x] Implemented
Files:
- Edit:
src/services/notifications/index.ts— add new type constants and trigger calls - Edit:
src/graphql/schema/index.ts— extendNotificationTypeenum
New types to add:
| Type | Trigger | Target |
|---|---|---|
MESSAGE_RECEIVED | New message sent in a conversation (Epic 17) | Recipient user |
BOUNTY_CLAIMED | Someone claims a producer's bounty (Epic 21) | Producer |
BOUNTY_HIRED | Referred talent is hired — CasTars released (Epic 21) | Claimant |
PROFILE_VIEW_SPIKE | Weekly views ≥ 50% above prior week (Epic 20) | Talent |
CONCIERGE_FULFILLED | Admin fulfils a concierge request (Epic 23) | Requester |
FOLDER_SAVED | Producer saves talent to a folder (Epic 19) | Talent (on pro tier only) |
Wire each trigger into the relevant service: messagingService, bountyService, profileAnalyticsService, conciergeService, folderService.
FE-NOTIF-001 — Notification center UI
- [x] Implemented
Files:
- Create:
apps/app/src/pages/notifications/NotificationsPage.tsx - Create:
apps/app/src/lib/queries/notifications.ts - Create:
apps/app/src/hooks/useNotifications.ts - Edit:
apps/app/src/components/AppShell.tsx— add unread count badge on notification icon in bottom tab bar
Description: Notifications page: list of notifications grouped by date. Unread ones are highlighted. Tap to navigate to the related entity. "Mark all read" action. Shows EmptyState when none. Uses DS Toast for real-time new notifications (poll every 30s or use WebSocket subscription).