HowlCastHowlCast
Configure

Notifications

Two Discord webhooks, fired on go-live and stream-end.

HowlCast does one thing for outbound notifications: fire two Discord webhooks. Public + private. Per-event toggles for "live started" and "stream ended". That's the entire surface area.

Why only Discord

Discord webhook URLs are the cheapest possible "notify N humans of one event" primitive — no SMTP, no API key, no rate-limit math, no auth. One curl POST to a stable URL, you're done. For a single broadcaster's "I'm live" alert, anything more is overkill.

Anything else (email blasts, RSS, web push, SMS) was explicitly removed from scope in DESIGN-DECISIONS.md.

Setup

Create two Discord webhooks

In your Discord server, pick a public channel + a private channel. For each:

  • Channel settings → Integrations → Webhooks → New Webhook
  • Name it (e.g. "HowlCast Public", "HowlCast Den")
  • Copy Webhook URL

Paste them in the dashboard

Dashboard → Notifications. Paste public URL into "Public channel" card, private URL into "Private channel" card. Click Save on each.

Pick events

Two checkboxes per webhook:

  • Notify when live starts — fires on call.live_started / call.session_started
  • Notify when stream ends — fires on call.session_ended / call.ended

Default: both on for the public webhook, both on for the private webhook.

What gets posted

Discord embed format. Example for live start:

🟢 HowlCast is live
[Watch] (button → channel page)

Title: <stream title from dashboard>

Embed color is brand cyan. The full payload is in packages/api/src/lib/discord.ts.

Failure handling

fanOutDiscord is fire-and-forget. Errors get swallowed (logged to worker logs, not propagated). The DB write happens before the webhook fan-out so the LIVE state is correct even if Discord is down.

Webhook errors land in the discord_webhooks.last_error column; the dashboard surfaces them inline.

Streamer Mode masking

When Streamer Mode is on, the webhook URL field shows masked text in the dashboard so you can screen-share without leaking it. Saving requires the URL — toggle Streamer Mode off when editing.

Next: Going live.

On this page