The events
| Event | When it fires | Default |
|---|---|---|
| team.activity | invite / role change / remove | Slack |
| billing.change | Stripe subscription / payment events | |
| briefing.daily | Every 6h cron tick for each pinned topic | |
| trend.alert | Pinned topic volume > 2× prior-mean | Slack |
| publish.succeeded | A clip ships to a platform | Email + Slack |
| publish.failed | Token expired, platform API error | Email + Slack |
| summary.weekly | Weekly roll-up Monday 7am your timezone | |
| product.news | Features + changes (manual broadcast) | Opt-in |
Configuring channels
Under Settings → Notifications, you get a grid — rows are events, columns are email / Slack / push. Toggle any cell. Save changeswrites your prefs to User.notificationPrefs and every dispatcher reads them on the next fire.
Connecting Slack
- Same panel → Connect Slack
- Slack OAuth v2 flow; pick the channel you want notifications in
- ClipUnity stores the incoming-webhook URL on your User row
- Send test posts a formatted block to verify
Disconnect any time — we remove the webhook and stop fanning out. You can reconnect instantly.
Email channel
Emails come from notifications@clipunity.aivia AWS SES. As long as SES is out of sandbox mode for our account, any user’s verified email gets the fan-out. If you don’t see emails, check spam first — and then yell at Drew.
The bell
Inbox on the top-right bell. Polls every 30s while the tab is open. Click a notification to mark it read + jump to the linked surface; dismiss removes it from the list. TTL: 90 days, then the row expires automatically (DDB TTL).