Skip to content

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.tscreateNotification(userId, type, payload), markRead(id), getUnread(userId)
  • Edit: src/graphql/schema/index.ts — add Notification type, notifications query, markNotificationRead mutation
  • 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 — extend NotificationType enum

New types to add:

TypeTriggerTarget
MESSAGE_RECEIVEDNew message sent in a conversation (Epic 17)Recipient user
BOUNTY_CLAIMEDSomeone claims a producer's bounty (Epic 21)Producer
BOUNTY_HIREDReferred talent is hired — CasTars released (Epic 21)Claimant
PROFILE_VIEW_SPIKEWeekly views ≥ 50% above prior week (Epic 20)Talent
CONCIERGE_FULFILLEDAdmin fulfils a concierge request (Epic 23)Requester
FOLDER_SAVEDProducer 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).