notification-system
Designs and implements multi-channel notification systems with email, push, and in-app delivery. Use when you need to build a notification service, set up user notification preferences, create delivery pipelines, implement retry logic for failed notifications, or route messages across channels. Trigger words: notification system, push notifications, email notifications, in-app notifications, notification preferences, delivery tracking, unsubscribe, notification routing.
What this skill does
# Notification System
## Overview
This skill enables AI agents to architect, implement, and configure multi-channel notification systems. It covers channel routing, user preference management, template rendering across formats, delivery tracking, retry logic, and compliance requirements like CAN-SPAM unsubscribe.
## Instructions
### 1. Notification Architecture
Every notification system needs these components:
```
Event Source → Notification Router → Channel Adapters → Delivery
↓ ↓
Preference Store Retry Queue
↓
Dead Letter Queue
```
**Notification Router**: Receives a typed event, resolves the user's channel preferences, and dispatches to the appropriate channel adapters.
**Channel Adapters**: Pluggable handlers for each delivery channel. Must implement a common interface:
```typescript
interface ChannelAdapter {
channel: 'email' | 'push' | 'in-app';
send(notification: FormattedNotification): Promise<DeliveryResult>;
validateRecipient(userId: string): Promise<boolean>;
}
```
**Preference Store**: Database-backed user preferences with per-notification-type, per-channel toggles. Some notifications (transactional/security) must be non-disableable.
### 2. Notification Type Classification
Always classify notifications into categories that determine default behavior:
| Category | Examples | Can Disable? | Default Channels |
|----------|----------|-------------|-----------------|
| Security | Password reset, 2FA | No | Email |
| Transactional | Order confirm, receipt | No | Email + In-app |
| Activity | Comments, mentions | Yes | Push + In-app |
| Social | New follower, like | Yes | In-app |
| Marketing | Digest, announcements | Yes | Email |
### 3. Channel-Specific Constraints
**Email**:
- Must include unsubscribe link (CAN-SPAM / GDPR)
- Use `List-Unsubscribe` header for one-click unsubscribe
- HTML + plain text versions
- Sender reputation — batch marketing emails separately from transactional
**Push Notifications**:
- Title: max 65 characters, Body: max 178 characters (iOS truncation)
- Include `data` payload for deep linking
- Handle token expiration and refresh
- Respect OS-level notification settings
**In-App**:
- Store in database with read/unread status
- Deliver in real-time via WebSocket if user is online
- Group related notifications (e.g., "3 people commented on your post")
- Paginate the notification feed
### 4. Retry and Failure Handling
Implement exponential backoff per channel:
- **Email**: 3 retries at 1min, 5min, 30min (provider outages are temporary)
- **Push**: 2 retries at 30s, 2min (invalid tokens should fail fast)
- **In-app**: 0 retries (direct DB write, either succeeds or doesn't)
After max retries, move to dead letter queue with full context for debugging.
### 5. Template Strategy
Use a single data context per notification type that renders differently per channel:
```typescript
interface NotificationContext {
type: 'new-comment';
actor: { name: string; avatarUrl: string };
target: { title: string; url: string };
content: { preview: string; full: string };
}
// → Email: Full HTML with actor avatar, comment preview, and action button
// → Push: "Alex commented: 'Great analysis of the…'"
// → In-app: "Alex commented on Your Post Title" with link
```
### 6. Delivery Tracking
Track these states for every notification:
`queued → sent → delivered → read → failed`
Store in a `notification_deliveries` table with: notification_id, user_id, channel, status, attempted_at, delivered_at, read_at, error_message.
## Examples
### Example 1: Express + BullMQ notification router
**Prompt**: "Build a notification service for my Express app that sends order confirmations via email and in-app."
**Output**: The agent creates a BullMQ-backed router that accepts `{ type: 'order-confirmed', userId, data: { orderId, total, items } }`, checks user preferences, and dispatches to the email adapter (SendGrid) and in-app adapter (PostgreSQL insert + Socket.io emit).
### Example 2: Preference management API
**Prompt**: "Create an API for users to manage their notification preferences with a React settings page."
**Output**: The agent generates REST endpoints for CRUD on notification preferences, a migration for the `notification_preferences` table with a composite unique constraint on (user_id, notification_type, channel), and a React component rendering a matrix of toggles with notification types as rows and channels as columns.
## Guidelines
- Never allow users to disable security notifications (password reset, 2FA codes)
- Always send email notifications from a queue, never synchronously in the request handler
- Batch notification grouping (e.g., "5 new comments") to avoid notification fatigue
- Test with notification-heavy scenarios: a user mentioned in a thread with 50 replies
- Include rate limiting on notifications per user per hour to prevent notification storms
- Log delivery metrics for monitoring: sent/delivered/failed rates by channel
Related in Productivity
gitea-workflow
IncludedOrchestrate agile development workflows for Gitea repositories using the tea CLI. Use when working with Gitea-hosted repos and asking to 'run the workflow', 'continue working', 'what's next', 'complete the task cycle', 'start my day', 'end the sprint', 'implement the next task', or wanting guided step-by-step development assistance. Keywords: workflow, orchestrate, agile, task cycle, sprint, daily, implement, review, PR, standup, retrospective, gitea, tea.
microsoft-graph-gateway
IncludedRoute Microsoft Graph work in this workspace. Use when users want to read or write Outlook mail, calendar events, contacts, OneDrive or SharePoint files, Teams, Planner, To Do, users, groups, directory data, or arbitrary Microsoft Graph endpoints from VS Code. Prefer WorkIQ for common read scenarios. Use Microsoft Graph for write actions and gap-read scenarios that need exact Graph properties, filters, permissions, or endpoints.
copilotkit
IncludedUse when building with CopilotKit — setup, development, integrations, debugging, upgrading, or contributing. Routes to the appropriate specialized skill based on the task.
wordly-wisdom
IncludedProvides calibrated decision analysis using Charlie Munger-style multiple mental models, inversion, incentive mapping, circle-of-competence checks, misjudgment audits, second-order effects, and forecast updates. Use when the user asks for an oracle take, a hard call, a decision memo, a premortem, an outside view, a red-team, a sanity-check, what am I missing, think this through, or wants a strategy, hire, investment, plan, product, partnership, or major life choice analysed. Avoid for simple factual lookups or time-sensitive legal, medical, or market questions without fresh evidence.
swain-session
IncludedSession management and project status dashboard. Owns the full session lifecycle (start/work/close/resume), focus lane, bookmarks, worktree detection, and tab naming. Also serves as the project status dashboard — shows active epics, progress, actionable next steps, blocked items, tasks, GitHub issues, and recommendations. Worktree creation is deferred to swain-do task dispatch (SPEC-195). Triggers on: 'session', 'status', 'what's next', 'dashboard', 'overview', 'where are we', 'what should I work on', 'show me priorities', 'bookmark', 'focus on', 'session info'.
gandi
IncludedComprehensive Gandi domain registrar integration for domain and DNS management. Register and manage domains, create/update/delete DNS records (A, AAAA, CNAME, MX, TXT, SRV, and more), configure email forwarding and aliases, check SSL certificate status, create DNS snapshots for safe rollback, bulk update zone files, and monitor domain expiration. Supports multi-domain management, zone file import/export, and automated DNS backups. Includes both read-only and destructive operations with safety controls.