Scheduled email
Outcome
A dashboard view you care about lands in your team's inbox on the configured cadence as a PDF, with a per-recipient list and a sensible quiet-hours rule.
Prerequisites
| Scope | What it lets you do |
|---|---|
reports.dashboard.write | Save schedules on views |
reports.email.send | Send / un-send schedules |
How rendering works
The scheduler is process-level (not pg-boss) — it polls every minute or so and fires on the schedule. Rendering uses headless Chromium to produce a faithful copy of the dashboard view.
Setting up a schedule
Open the view you want to schedule. View picker →
Schedule email.Pick frequency:
Frequency Examples Daily Weekday-only, weekend-only, all-week. Weekly Mondays at 7am, Fridays at end-of-day. Monthly First business day. Cron Expert mode. Pick recipients:
- Distribution list (e.g.
billing-team@). - Individual users.
- Role groups (e.g. all supervisors).
- Distribution list (e.g.
Pick PDF options:
Option Use Page size Letter, A4. Orientation Portrait, landscape. Color theme Light (default), Dark. Cover page Yes / no. Pick quiet-hours:
Quiet Effect None Send any time. Holidays only Skip US/UK holidays (tenant-configured). Off-hours window Skip weekends + nights. Save. The schedule activates immediately; the next firing time is shown.
Managing schedules
/admin/dashboard-schedules lists every schedule:
| Column | Meaning |
|---|---|
| View | The dashboard view rendered. |
| Cadence | When it fires. |
| Recipients | List size. |
| Last sent | Last successful send. |
| Last status | SENT, FAILED. |
Click into a row → run history + edit.
Pause / unpause
Use Pause when:
- You're rebuilding the underlying view (avoid sending half-built).
- A recipient list needs cleanup.
- You're going on extended leave (avoid filling inboxes).
Pause stops firing; resume continues without backfilling missed runs.
Per-recipient overrides
If a recipient wants:
- A different cadence (weekly vs daily) → make a separate schedule.
- A subset of widgets → make a different view + schedule on that.
- No PDF, just a link → the schedule has a Link only mode.
Validation
| Check | Expected |
|---|---|
| Schedule fires at configured time | Yes; logged. |
| PDF renders with the dashboard's filters | Yes. |
| Quiet-hours skips firings | Yes; logged as SKIPPED. |
| Pause stops firing | Yes; resume continues. |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Email never arrives | SMTP credentials, recipient bounced | Check the schedule's run history. |
| PDF is blank | Render timeout, view loaded too slowly | Increase render timeout, or simplify the view. |
| Sent twice | Duplicate firing during retry | Audit log shows both; ping support. |
| Holidays not skipped | Tenant holiday calendar empty | Admin → tenant calendar. |
Where to next
- 8.4 — Drill-through & export — for in-the-moment exports.
- 1.6 — Day 1 as a billing supervisor — the supervisor email playbook.