Boxes. Every rule sits in one of three boxes — PM, Department, or Mass/Reminders — set on the rule's own edit screen ("Box" dropdown). Purely organizational; doesn't change what a rule does.
The On checkbox flips a rule on/off instantly. Edit opens it for changes. ✕ deletes it permanently, including its send history in Recent Activity — there's no undo.
Adding a new rule (+ Add Rule) creates a new instance of one of five existing trigger families — think "another escalation tier" or "another department's assignment email," not a brand-new kind of automation (see the limit at the bottom):
- New task created — fires once, the instant a task with a specific name gets created. Supports repeat/escalation (below) if you want it to keep reminding while that task stays open.
- Task open past due date — fires once a task (a specific name, or any task) has been overdue N+ days. Supports repeat/escalation (below).
- A project condition becomes true — fires when something about a job flips true (new project, over budget, ordered with no payment, receivable overdue, ready for install, install completed). Resolves itself once the condition goes back to false, except the one-time announcements. Supports repeat/escalation (below).
- Daily open-task digest — one email per person listing their own open tasks, sent once a day.
- Admin daily summary — one rollup email to admin (or whoever you set) once a day: per-PM and per-department job/task counts.
New rules save disabled — review the wording, then turn them on.
Recipients / CC — comma-separated tokens; the small "+ Add…" dropdown next to each field inserts the common ones for you (PM, APM, Sales Rep, Admin, etc.) instead of typing them:
role:admin | everyone with that role (also billing, install_manager) |
job:pm | that job's PM (also apm, sales_rep, estimator) |
task:assignee | whoever the specific task is assigned to (task rules only) |
dept:<type> | whoever's assigned in the Task Assignment Matrix for that department (submittals, shop_drawings, insurance, budget, procurement, installation, measurement, electrical, mockup, billing) |
staff:123 | one Staff Directory entry, by ID |
email:x@y.com | one literal email address |
Repeat & escalation (new-task, task-overdue, and project-condition rules) — for a new-task rule this just means "keep reminding while it's still open"; for task-overdue, "Fire once a task is this many days past due" is the initial trigger point. Either way:
- Repeat every N days — resends the reminder every N days while still unresolved.
0 = send once only, never again until it resolves.
- Escalate after N sends — once this many reminders have gone out with no resolution, the next one also goes to Escalate to (and Recent Activity shows it as "escalated" instead of "sent").
0 = never escalate.
Subject / Body tokens: {{job_number}} {{job_name}} {{job_address}} {{job_client}} {{due_date}} {{days_overdue}} {{attempt_number}} {{project_link}}. Wrap contract-value content in {{#financial}}...{{/financial}} so it's silently omitted for anyone without financial permission. (Daily digest / admin summary build their own layout — Subject/Body don't apply to those.)
✉️ Send Test on any rule sends a real preview right now, using real current data (the first job/task/person that actually matches, or one specific job if you enter its job number when asked), to one email address you choose — never your real recipients, and never logged in Recent Activity, so it's safe to run as many times as you want. Works on disabled rules too, so you can check the wording before turning one on. First use asks for the same shared secret the scheduled job uses (kept only in this browser).
Recent Activity at the bottom of the page is the source of truth for what's actually gone out — status, recipients, subject, timestamp — rather than checking Resend's own dashboard.
The one real limit: everything above needs no developer. A genuinely new kind of trigger — something keyed off a field or event nothing currently watches — needs a small code change to supabase/functions/notify-tick/index.ts and a redeploy. Not sure which bucket something falls into? Just ask.