---
name: noticed
description: Build Rails notifications with the noticed gem. Full lifecycle - create notifiers, configure delivery methods (email, Slack, push, SMS, ActionCable), debug, and test. Covers individual and bulk delivery patterns.
---
## How Noticed Works
Noticed is a Rails notification system that delivers notifications across multiple channels simultaneously.
### 1. Notifiers Define What and How
Each notification is a class inheriting from `Noticed::Event`. It defines:
- What params are required
- Which delivery methods to use
- Helper methods via `notification_methods` block
```ruby
class NewCommentNotifier < Noticed::Event
required_params :comment
deliver_by :email do |config|
config.mailer = "CommentMailer"
config.method = :new_comment
end
notification_methods do
def comment
record
end
end
end
```
### 2. Individual vs Bulk Delivery
- **Individual** (`deliver_by`): One notification per recipient
- **Bulk** (`bulk_deliver_by`): One notification for all (e.g., team Slack channel)
### 3. The Record Pattern
Always pass the primary object as `record:`:
```ruby
NewCommentNotifier.with(record: @comment).deliver(@recipients)
```
This enables proper associations and querying from the record side.
### 4. Async by Default
Noticed uses ActiveJob. Ensure you have a background processor (Sidekiq, etc.) running.
**What would you like to do?**
1. Set up noticed in a new project
2. Create a new notifier
3. Add a delivery method to existing notifier
4. Debug notification issues
5. Write tests for notifications
6. Something else
**If creating a notifier, which delivery methods do you need?**
**Available delivery methods:**
- **Email** - ActionMailer integration
- **ActionCable** - Real-time WebSocket
- **Slack** - Slack webhooks (individual or bulk)
- **Microsoft Teams** - Teams webhooks
- **Twilio** - SMS/WhatsApp
- **Vonage** - SMS
- **Apple Push (APNs)** - iOS push notifications
- **FCM** - Firebase Cloud Messaging (Android)
- **Discord** - Discord webhooks (bulk)
- **Bluesky** - Bluesky posts (bulk)
- **Webhook** - Generic HTTP webhooks (bulk)
- **Database only** - In-app notification center, no external delivery
**Then read the matching workflow from `workflows/` and follow it.**
| Response | Workflow |
|----------|----------|
| 1, "setup", "install", "new project" | `workflows/setup-noticed.md` |
| 2, "create", "new notifier", "notification" | `workflows/create-notifier.md` |
| 3, "add", "delivery method", "channel" | `workflows/add-delivery-method.md` |
| 4, "debug", "not working", "fix", "issue" | `workflows/debug-notifications.md` |
| 5, "test", "tests", "testing" | `workflows/write-tests.md` |
| Unsupported delivery method requested | `workflows/create-custom-delivery-method.md` |
## After Every Change
```bash
# 1. Does it build?
bin/rails runner "NewCommentNotifier"
# 2. Do tests pass?
bin/rails test test/notifiers/
# 3. Check job queue
bin/rails runner "puts Sidekiq::Queue.new.size"
```
Report to the user:
- "Notifier loads: ✓"
- "Tests: X pass, Y fail"
- "Ready for you to test delivery"
## Domain Knowledge
All in `references/`:
**Delivery:** delivery-methods.md
**Patterns:** notifier-patterns.md
**Config:** configuration.md
**Database:** database-integration.md
**Mistakes:** anti-patterns.md
## Workflows
All in `workflows/`:
| File | Purpose |
|------|---------|
| setup-noticed.md | Install and configure noticed |
| create-notifier.md | Create new notifier with delivery methods |
| add-delivery-method.md | Add delivery channel to existing notifier |
| create-custom-delivery-method.md | Build custom delivery for unsupported services |
| debug-notifications.md | Troubleshoot delivery issues |
| write-tests.md | Test notifications |