Deploy Your App ships with a dedicated notification microservice (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/nayalsaurav/deploy-your-app/llms.txt
Use this file to discover all available pages before exploring further.
apps/nortification) that listens on the notification-queue BullMQ queue (using the launchdrop queue prefix). When a notification job is dequeued, the service reads the job’s type field and dispatches the message through the matching provider. Four channels are supported out of the box: Email via Resend, Slack via Incoming Webhooks, Discord via channel webhooks, and WhatsApp via Twilio. Every channel is opt-in — configure only the ones you need.
Supported Channels
| Channel | Provider | Required Environment Variable(s) |
|---|---|---|
| Resend | RESEND_API_KEY | |
| Slack | Slack Incoming Webhooks | SLACK_WEBHOOK_URL |
| Discord | Discord Webhooks | DISCORD_WEBHOOK_URL |
| Twilio | TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN, TWILIO_WHATSAPP_FROM |
Email Setup (Resend)
Resend is a developer-focused email API that works without complex SMTP configuration.- Create an account at resend.com and verify your sending domain.
- Generate an API key from the Resend dashboard (API Keys → Create API Key).
- Set the key in your notification service environment:
- Restart the notification service. The service will now send emails when jobs of
type: "email"arrive in the queue.
from address in the current implementation defaults to Acme <onboarding@resend.dev>, which is Resend’s shared testing address. For production deployments, update the from field in apps/nortification/src/services/notification.service.ts to a verified sending address on your domain:
Slack Setup
- Go to api.slack.com/apps and create a new Slack App (or use an existing one).
- Under Features → Incoming Webhooks, enable incoming webhooks and click Add New Webhook to Workspace.
- Choose the channel you want notifications posted to, then copy the generated webhook URL.
- Set it in your notification service environment:
- Restart the notification service.
slackWebhook.send({ text: message }) using the @slack/webhook package. The message appears in your chosen channel as a standard bot post.
Slack job payload shape:
Discord Setup
- Open your Discord server and go to Server Settings → Integrations → Webhooks.
- Click New Webhook, give it a name and select the channel, then click Copy Webhook URL.
- Set it in your notification service environment:
- Restart the notification service.
POST request to the webhook URL with the body { "content": message }, which posts a plain text message to the Discord channel.
Discord job payload shape:
WhatsApp Setup (Twilio)
WhatsApp notifications are sent through the Twilio Messaging API. You need either a Twilio WhatsApp Sandbox (for testing) or a Twilio-approved WhatsApp-enabled number (for production).- Sign in to the Twilio Console and note your Account SID and Auth Token from the dashboard homepage.
- For the sender number, use the Twilio WhatsApp Sandbox number
whatsapp:+14155238886during development, or your approved business number for production. - Set all three variables in your notification service environment:
- Restart the notification service.
twilioClient.messages.create({ body, from, to: \whatsapp:$` })`. The recipient number must be opted in to your WhatsApp Sandbox or approved sender.
WhatsApp job payload shape:
Enqueueing Custom Notifications
You can enqueue notification jobs directly from any service that has access to the same Redis instance — useful for sending alerts from custom scripts or CI pipelines.NotificationJobData interface consumed by the worker is:
All notification channels are completely optional. If a channel’s environment variables are not set, the service logs a warning (e.g.
SLACK_WEBHOOK_URL not configured. Skipping Slack.) and continues processing other jobs without throwing an error. There is no need to set up channels you do not plan to use.The
notification-queue uses the BullMQ queue prefix launchdrop. When connecting an external producer, ensure you pass { prefix: "launchdrop" } in the Queue options so that job keys align with what the notification worker is subscribed to.