type: decision
status: active
timestamp: 2026-06-20
tags: [decisions, architecture, notifications, push, knock, fcm]

Notifications — FCM (transport) + Knock (orchestration)

Two-layer notifications: Knock + FCM' (in-app + email + SMS + web push); FCM stays as the web-push transport. Free 10K notifs/mo on Knock, free unlimited on FCM.

Notifications — FCM (transport) + Knock (orchestration)

Decision

Notifications are split across two layers:

Knock’s web-push channel dispatches to FCM. Knock’s email channel dispatches to Resend. SMS is pay-per-message via Knock’s bundled providers (no monthly fee).

Why

Implications

Architecture

Channel responsibility

ChannelOwnerWhy this split
In-app feedKnock-hostedDrop-in component; no DB schema needed
Web pushFCM (via Knock)Free unlimited Spark + iOS PWA
EmailResend (via Knock)Already wired transactional
SMSTwilio / MessageBird (via Knock)Pay-per-SMS only, no monthly fee
SlackKnock directOps alerts only; no per-user use

Volume budget

What we don’t do

Cross-refs


Edit on GitHub · Back to index