Skip to content
by

Docs

Notifications and email

The bell, email delivery through Resend and editable templates.

ClientOS tells your team and your clients when something needs them, in the app and by email. Every notification has a place in one catalog, every email is sent through your own Resend account from your own domain, and you control both what goes out and what each message says. This page covers the bell, preferences, the event catalog, email settings, deliverability, templates and digests.

Where things live#

ScreenMenu pathRoutePermission
The bellTop bar, both appsEveryone
Your notification preferences (staff)Avatar menu → Security → Your notifications/settings/securityEveryone
A client's preferencesPortal → Settings → Notifications/settings/notificationsEveryone
Sender, switches, bouncesSettings → Emails/settings/emailsEmails
What each email saysSettings → Email templates/settings/email-templatesEmails
Connect ResendSettings → Integrations → Resend/settings/integrationsIntegrations

Three layers decide who hears#

  1. The catalog says who an event is for and which channels it uses by default.
  2. Your workspace switch under Settings → Emails turns each event on or off for everyone, per channel.
  3. Each person's own preference turns their own copy off.

Nobody can switch on what the workspace has switched off. On top of that, an event only reaches people who could see the record anyway: billing events go to clients with Access invoices and staff with the relevant finance permission, order events go to clients with Collaborate on orders, and so on.

The bell#

The bell in the top bar shows an unread count and updates live, without refreshing the page. Open it to see recent notifications, filter Show by All or Unread, and click Mark all read. Clicking a notification opens the record it's about. When there's nothing new, it says you're all caught up.

In-app notifications are never bundled: if fourteen things happened, the bell shows fourteen rows.

Notification preferences#

Each person controls their own copy of every notification they can receive, with one switch in the app and one by email.

  • Clients: portal Settings → Notifications.
  • Staff: avatar menu → Security, under Your notifications.

The list only shows events that can actually reach that person. A role without finance access isn't offered the money events. Events marked "always sent" (such as sign-in codes) can't be switched off.

Event catalog#

ClientOS has 76 notification events, grouped under the same headings you see in Settings → Emails. Here's a summary of the main ones by group:

GroupMain eventsWho hears
AccountWelcome, sign-in code, password reset, team invitation, client invitation (all always sent, email only); team member joinedThe person concerned; team join goes to staff who can see the team
PaymentsPayment receipt, new invoice, overdue reminder, refund issued, account credit, credit paid out, payment needs confirming, card expiring; subscription started, renewal, renewal reminder, payment failed, past due, paused, cancelled; payment disputed; manual payment to confirm, manual payment not found; abandoned checkout (opt-in); referral commission earned and clawed backClients with Access invoices; staff with finance or subscription access
OrdersOrder placed, brief reminder, brief submitted, delivery ready, download ready, delivery accepted, revision requested, order rated, order complete; cancellation requested, approved, declined; custom offer sent and paid; invoice paid, order madeClients with Collaborate on orders; the assignee, followers and staff with order access
SupportTicket opened, message from the team, ticket reply, client replied, internal note, ticket assigned, ticket closed, ticket rated, dashboard ratedClients with Collaborate on tickets; the assignee, followers and staff with ticket access
MessagesClient message, message from the team, mentioned in chat, reminders when a client or the team is waitingThe people in the conversation
FormsForm submission, form request (always sent)Staff who can see forms, plus any "also send to" addresses; the client a form was sent to
SalesNew lead, thanks to the leadStaff with lead access; the lead
TasksTask assigned, task offered to your role, task due, task commentThe people involved
ReportsMonthly reportClients with Collaborate on orders; staff with Reports
SystemBackground job failed, payment without an order, notifications not sending (all always sent)Staff with the relevant settings or finance access

Always sent events can't be switched off by anyone, because people need them to reach their account or because they warn you something is broken. Opt-in events (such as Abandoned checkout) email people who haven't bought anything, so they're off until you turn them on, and never sent for anything that happened before.

Settings → Emails#

Sender#

FieldWhat it does
Sender nameHow mail is signed. Empty uses your company name.
Sender addressThe from address. It must be on a domain Resend has verified; the screen lists your verified domains.
Reply-toWhere replies land. Empty sends replies to the sender address.

A banner at the top tells you whether mail is going out: Sending through Resend, Resend connected but not able to send yet, or Nothing is sending.

Send a test#

Click Send me a test to send a real email to your own address through the same key and sender every notification uses. It reports what Resend answered. A sent test proves the key, the sender and the domain all work. Save your changes first: the test uses what's stored, not what's on screen.

Notifications#

Every event in the catalog is listed by group with an Email and an In app switch. Switching one off stops it for the whole workspace. Each person can still switch off their own copy of anything you leave on. Events marked Always sent have no switch; events marked Opt-in start off.

Sending through Resend#

In production, all email goes through your own Resend account. There is no other mail provider.

  1. Create a Resend account and verify your sending domain there.
  2. Go to Settings → Integrations, open Resend, and paste your API key.
  3. Wait for it to show as connected. ClientOS checks your domain and registers the webhook it needs.
  4. Add the Webhook signing secret from Resend so delivery reports can be trusted.
  5. Go to Settings → Emails, set the sender, and click Send me a test.

Until Resend is connected, nothing sends, including sign-in codes. Connect it before inviting anyone. See First run.

Credentials you paste are sealed (encrypted) before they're stored.

Bounces and complaints#

The Bounces and complaints panel on Settings → Emails shows Resend's delivery reports. When an address bounces for good or marks a mail as spam, it's added to a suppression list automatically and isn't mailed again.

ReasonMeaning
BouncedThe address doesn't accept mail.
Marked as spamThe recipient reported a mail as spam.
UnsubscribedThe recipient unsubscribed.

To mail an address again (after a typo is fixed, for example), remove it from the list and confirm. The panel also shows the Webhook address and whether Resend is reporting deliveries, and warns you if reports are failing the signature check, which usually means the signing secret changed in Resend.

Email templates#

Settings → Email templates lets you rewrite every email the product sends, with a live preview rendered by the same code that sends it.

Edit a template#

  1. Pick a message from the Messages list on the left. Each shows when it's sent; edited ones are marked Custom.

  2. Edit any of the fields:

    FieldWhat it is
    SubjectWhat the inbox shows first. Phones cut it around 40 characters.
    Preview lineThe grey line beside the subject. Say the next thing; never repeat the subject.
    HeadingThe first line inside the message.
    OpeningThe sentence before the details.
    ButtonThe button label. Leave empty to send no button.
    ClosingThe sentence after. Leave empty to end on the button.
  3. Insert variables (see below) by clicking them.

  4. Save.

A field you leave on the built-in wording stays linked to it, so later improvements to the default still reach you. Reset to built-in deletes your words for that message; Discard edits throws away unsaved changes.

Whatever you type is escaped before sending: a pasted HTML tag arrives as text, never as markup.

Variables#

Each template lists the variables it supports, written like {{ invoice.number }}. Click one to copy it, then paste it into any field, and the real value takes its place when the email is sent. A variable with nothing behind it disappears rather than leaving a gap.

Preview#

The Preview shows the message as it will arrive, including the inbox row with your subject and preview line. Switch between:

  • Email and Plain text,
  • Desktop and Phone width,
  • Light and Dark colour scheme,
  • for payment emails, Can pay online or Anyone else, since the wording changes when the reader can pay with a connected gateway.

Click Send me this one to send the selected template to yourself. Save first; the test uses the stored words.

Every email automatically carries your logo, colours, company name and business address from Settings → Company.

Digests#

Bursts of email are bundled so people aren't flooded. The first email of a burst waits a few minutes; anything of the same kind that arrives meanwhile joins it, and they go out together as one digest.

WhatHow it's bundled
Ticket repliesOne email per ticket, sent once the conversation has been quiet for three minutes, never later than 30 minutes after the first reply. Quoted as a conversation.
Chat messagesOne email per conversation, sent after five quiet minutes, never later than 30 minutes after the first. Quoted as a conversation.
Chat mentionsBundled per conversation over five minutes.
Task assignments and offersBundled per task over one minute.
Task commentsBundled per task over five minutes.

If nothing joins, the single email goes out as itself. In-app notifications are never bundled.

Reminders that send themselves#

Some notifications are sent by scheduled checks rather than by someone's action: brief reminders, overdue invoice reminders, renewal reminders, card-expiring notices, tasks due, and chat reminders when a client or your team has been waiting. Each is sent at most a set number of times per record, so nobody is chased endlessly. See Invoices and credit and Messages and files.

Tips#

  • Set a Reply-to that a person reads. Clients reply to notification emails.
  • Turn off events your team doesn't act on rather than training people to ignore them.
  • Rewrite the Welcome and New invoice emails first. They're the ones clients read most.
  • Check Bounces and complaints after any bulk import of clients.