The messaging layer (`messages`) bypasses external email latency. It includes a general inbox, job-specific threads mapped to foreign keys, pinned conversations, and a polling engine (`notifications`) for mentions and state changes.
Navigating the Global Inbox
The global inbox aggregates all direct messages and unlinked thread contexts. It supports search, pinning, and unread state counters.
- Click the Messages icon in the topbar or navigate to
messages. - To start a direct message, click New Message and select an internal user from the typeahead.
- To pin a thread for quick access, click the Pin icon on the conversation card. The state is saved in user preferences.
- Messages are dispatched via asynchronous POST requests (
messages send), updating the UI without a full page reload.
Contextual Job Chat
Job-specific threads bind communication directly to the jobs table. This is critical for auditability.
- Open any job in
job single view. - Locate the Job Chat panel on the right side of the layout.
- Type a message and use
@to trigger the mention typeahead for assigned users. - Press Send. This inserts a record into the messaging table with
job_idpopulated, ensuring the message appears in both the global inbox and the job view.
Tuning Notification Preferences
The notification engine polls notifications action to display topbar alerts. Users can configure delivery channels (In-App, Email) in notification preferences.
- Click your avatar in the top right and select Notification Preferences.
- Toggle the checkboxes for event types (e.g., Mentions, Job Assignments, New Uploads).
- Choose between App Alert and Email routing for each event.
- Click Save Preferences (
notification preferences save).