Notifications
Overview
Section titled “Overview”The Notifications system delivers real-time alerts across the platform. When someone assigns you a task, mentions you in a note, approves your leave, or any other action that needs your attention — you get a notification through your preferred channels.
Channels
Section titled “Channels”| Channel | Description |
|---|---|
| In-App | Bell icon in the header with unread badge, notification panel, and full notifications page |
| Individual notification emails plus a daily digest summary | |
| Slack | Direct messages via the Slack bot |
| Push | Browser push notifications (requires service worker) |
Notification Types
Section titled “Notification Types”34 notification types organised into 10 categories:
| Category | Types |
|---|---|
| Tasks | Task Assigned, Task Status Changed, Task Comment, Overdue Task |
| Leave | Leave Request Submitted, Leave Approved, Leave Rejected, Leave Approval Needed |
| Time | Time Entry Approved, Time Entry Rejected, Time Entry Reminder |
| Deals | Deal Assigned, Deal Won, Deal Lost |
| Proposals | Proposal Approval Needed, Proposal Approved, Proposal Rejected |
| Contracts | Contract Sent, Contract Signed |
| Performance | Review Assigned, Review Completed, Feedback Requested, Feedback Submitted, Scorecard Reminder |
| Recruitment | Interview Scheduled, Candidate Stage Changed |
| Projects | Added To Project, Sprint Started |
| General | Mentioned In Note, New Announcement, Page Comment |
| Finance | Invoice Created, Invoice Paid |
| Events | Event Confirmed |
Notification Bell
Section titled “Notification Bell”The bell icon in the header bar shows an unread count badge. Clicking it opens a popover panel with your most recent notifications. Each notification shows:
- Actor avatar and name
- Notification title and body
- Relative time (e.g. “5m ago”)
- Unread dot indicator
- Mark as read / archive actions on hover
Notifications Page
Section titled “Notifications Page”Navigate to /notifications for the full notifications experience:
- All — All non-archived notifications
- Unread — Only unread notifications with count badge
- Archived — Soft-archived notifications (no hard deletes)
- Preferences — Per-type channel toggle grid
Actions
Section titled “Actions”- Mark All Read — Marks all unread notifications as read
- Archive Read — Archives all read notifications
Preferences
Section titled “Preferences”Each user controls how they receive each notification type via a grid of toggles:
| In-App | Slack | Push | ||
|---|---|---|---|---|
| Task Assigned | toggle | toggle | toggle | toggle |
| Leave Approved | toggle | toggle | toggle | toggle |
| … | … | … | … | … |
Preferences are set per-user. If a user hasn’t customised a type, the system-wide defaults from the notification types catalog apply.
Push Setup
Section titled “Push Setup”The Preferences tab includes a Push Notifications card at the top:
- Shows current status: Active, Blocked, or available to enable
- Enable registers a service worker and creates a push subscription
- Disable removes the subscription from the browser and server
- If the user denied browser permission, shows “Blocked” with guidance to change browser settings
Permissions
Section titled “Permissions”All authenticated users can view and manage their own notifications. No tool-level permission restriction — notifications are personal.
Scheduled Notifications
Section titled “Scheduled Notifications”A daily cron (Mon–Fri 8am AEST) generates:
- Overdue task reminders — for tasks past their due date
- Stale leave approval nudges — for requests pending 2+ days
- Time entry reminders — for users with no time logged this week
- Daily digest email — summary of unread notifications from the last 24 hours
Squad Notifications
Section titled “Squad Notifications”Squads can be configured with Slack channels and email groups in Settings > Squads:
- Squad Channel — notifications for all squad members
- Leads Channel — notifications for squad leads
- Managers Channel — notifications for squad managers
- Email Group — group email address for squad-wide emails
Portal Users
Section titled “Portal Users”External portal users receive a subset of notifications (types marked supports_portal): task updates, contract signing, invoice creation, project updates. Portal notification preferences support In-App and Email channels only.
Analytics
Section titled “Analytics”Executives can view notification metrics on the Usage > Notifications tab:
- Daily sent volume trend
- Notifications by type breakdown
- Channel distribution (email, Slack, push)
- Read rates by notification type
Email Delivery
Section titled “Email Delivery”Notification emails, the daily digest, team announcements and contract signing emails are all system-originated and delivered through Cloudflare Email Sending (the SEND_EMAIL binding in apps/app/wrangler.toml).
- Sender:
Nucleus <notifications@nucleus.fast> - Transport:
env.SEND_EMAIL.send({ html, text })via a shared template atapps/app/worker/lib/email-template.ts, wrapped byapps/app/worker/lib/system-email.ts - DNS:
nucleus.fastmust have the SPF and DKIM records provisioned in the Cloudflare Email Sending dashboard (dash.cloudflare.com → Email → Email Sending). Destinations are not pre-verified — send to any recipient. - Reply-To: for contract emails the Reply-To is set to the sender’s address so replies route to the human who initiated the contract, not to
notifications@. An inbound CC address is also attached for unified-inbox thread capture.
Person-to-client email (user-composed messages, inbound replies, the Contact tool, report emails and recruitment outreach) still flows through the Gmail API with Google Workspace domain-wide delegation — see apps/app/worker/lib/email-config.ts. That way team members’ messages to external contacts continue to look and thread as personal mail.