Push + notifications services
Push + notifications services
The family runs a two-layer notification stack: orchestration on top, transport underneath.
- Knock — orchestration. Owns workflows, channel selection, dedupe, digest windows, per-user preferences, and the in-app feed component.
- FCM — web-push transport. Knock's web-push channel dispatches to FCM, which delivers to the browser. FCM is free unlimited on Firebase Spark + has first-class iOS PWA support.
Email transport behind Knock's email channel is Resend; SMS transport is Knock-bundled (Twilio / MessageBird, pay-per-SMS only).
| Service | Status | One-line role |
|---|---|---|
| knock.md | active | Multi-channel notification orchestration — 10K notifs/mo free |
| fcm.md | active | Web-push transport on Firebase Spark — free unlimited |
Why split orchestration from transport?
- Knock owns workflows — one workflow definition per event type, fans to the right channels in the right order, with dedupe and preference handling. Building this on Workers is months of work.
- FCM owns delivery — free unlimited on Spark, iOS PWA support, tokens already live on Firebase Auth user records. No reason to let Knock re-do delivery.
- Swap cost stays low at both layers — switching orchestrators doesn't force us to re-issue browser push tokens; switching transports doesn't break workflows.