Alerts
Alert states
| State | Meaning |
|---|---|
open | Anomaly is currently active |
resolved | Event rate has returned to normal |
Severity levels
| Severity | Visual | Meaning |
|---|---|---|
warning | Amber | Rate below expected but not critically low |
critical | Red | Rate severely below expected, or complete silence |
Severity can escalate from warning to critical within a single alert if the situation worsens between cron runs.
Alert channels
Heartbeet supports sending notifications to multiple destinations per organisation. These are stored in the alert_channels table.
| Channel | Status |
|---|---|
| Email (via Resend) | Available |
| Slack (incoming webhook) | Coming soon |
Default channel
When you create an organisation, a default email channel is seeded automatically using the email address you signed up with. You can add additional email addresses or Slack webhook URLs from the settings page.
Adding a channel manually
insert into alert_channels (org_id, channel, destination, enabled)
values ('<org-id>', 'email', 'team@example.com', true);Notification content
Alert opened email
- Severity badge (WARNING / CRITICAL)
- Beet name and time of detection
- Expected vs actual event count and percentage drop
- Link to the beet detail page and AI explanation
Alert resolved email
- RESOLVED badge
- Beet name and recovery time
- Alert duration
- Link to the beet detail page
Viewing alert history
The beet detail page shows a chronological list of past alerts for that beet. The admin dashboard shows recent alerts across all organisations.