Skip to main content
Two related but distinct systems: notifications tell people something happened; messages are correspondence with applicants and employees.

Notifications

The inbox

Every user has an in-app inbox. notifications:view is granted to every role including APPLICANT and SYSTEM_ADMIN — it is self-service over your own inbox and your own subscriptions, not a view of anyone else’s.

The event catalog

Notifications are driven by a catalog of platform events — an absence request awaiting approval, a contract ready to sign, a document overdue, a payroll run locked, a survey closing. Each event has:
  • A default audience, by role.
  • A default set of channels.
  • Per-locale content.

Subscriptions

Users adjust what they receive and how. Defaults come from their role, so a new manager is subscribed to the things managers need without configuring anything, and can then narrow it.

Channels

The dispatcher resolves the recipient’s locale before rendering, so a French-speaking employee receives French regardless of who or what triggered the notification. A notification usually needs to take you somewhere — the request to approve, the contract to sign. Action URLs are generated per notification and resolve to the right surface for that user.
Action links carry no credentials in the URL. Tokens never travel in a Location: header or a query string — servers log both. See Security conventions.

Messages

Correspondence with applicants and employees, threaded against the record it belongs to.

How it works

  • Outbound mail is sent from the shared HR mailbox, so replies come back to a place the whole team can see rather than to a personal inbox.
  • A scheduled scan reads inbound mail over Microsoft Graph and attaches it — with attachments — to the matching application.
  • The full thread is visible on the application or employee record.
messages:view and messages:send are HR_STAFF+. SYSTEM_ADMIN is excluded: correspondence is people data.

Templates

Message templates are authored per locale and versioned. Pipeline stages fire them automatically; HR can also send one ad hoc and edit before sending. Because templates are versioned, a message sent in March renders the wording that existed in March — the sent record is not retroactively rewritten by a template edit.

The feedback dialog

An in-app feedback dialog lets users report a problem or request from inside the product. Submissions create tickets in the team’s issue tracker with a FEEDBACK: prefix, so what users say reaches the backlog without a separate channel.