Skip to content

htmujahid/notifro

Repository files navigation

Notifro

Unified notification infrastructure: compose once, deliver everywhere.

Notifro normalizes ten channels behind a single compose-once API. Write a message once and Notifro transforms and delivers it across Slack, email, Microsoft Teams, Discord, WhatsApp, Telegram, web push, webhooks, in-app inbox, and SMS, with routing rules, fallback chains, provider failover, scheduling, rate limiting, and a native MCP server so AI agents can send safely. It runs entirely on Cloudflare's edge and is fully self-hostable.

supasheet

Features

  • Compose-once API: one normalized payload, transformed per channel (Slack Block Kit, HTML email, Teams adaptive cards, Discord embeds, web push, …). Content blocks plus a template engine with variables, conditionals, loops, and i18n.
  • 10 channels: Slack, email (SMTP/SendGrid/Resend), Teams, Discord, WhatsApp, Telegram, web push (VAPID), webhooks (HMAC-signed), SMS (Twilio), and an in-app inbox.
  • Routing & fallback: priority-ordered routing rules, ordered fallback chains, and per-channel provider failover, with dry-run route resolution.
  • Scheduling: send-at with timezone awareness, recurring (cron) sends, quiet hours, delivery windows, and per-channel rate limiting, driven by a cron-trigger sweep.
  • Reliability: a Cloudflare Queue with exponential-backoff retries, a dead-letter queue, idempotency keys, PII redaction, delivery events (delivered/opened/clicked/bounced), open & click tracking, and inbound provider receipts.
  • Templates & content: template editor, version history with restore, and a brand kit.
  • Analytics: delivery stats by channel, status, and date; top topics; and an overview dashboard, backed by a full API request log.
  • Auth & keys: better-auth with email + password, email OTP, Google OAuth, 2FA (TOTP / email OTP / backup codes), phone verification (Twilio), and scoped rk_ API keys.
  • Native MCP server: agents send, schedule, preview, template, and query analytics within granted scopes, behind approval gates and rate limits.

MCP server

Notifro exposes the platform at POST /mcp (authenticated with an rk_ API key), available hosted (Streamable HTTP) and local (stdio via @notifro/mcp).

  • Tools: send_notification, schedule_notification, list_channels, get_delivery_status, create_template, render_preview, query_analytics, approve_action.
  • Resources: notifro://channels, notifro://templates, notifro://recent-deliveries.
  • Safety: per-tool approval gates, key-scoped access, KV rate limiting, idempotency, and every call written to the request log.

Tech stack

Cloudflare Workers · Hono · React 19 · better-auth · Kysely · D1 · Queues · KV · Cloudflare Email · @hono/zod-openapi + Scalar. Tooling: pnpm workspaces + Turborepo.

Monorepo layout

apps/
  api       → Cloudflare Worker: all backend logic (compose, queue, cron, MCP, auth)
  web       → React 19 SPA dashboard
  site      → Astro marketing site
  desktop   → Electron (Forge) wrapper
  ios       → Capacitor iOS wrapper
  android   → Capacitor Android wrapper
packages/
  core         → feature-level UI components & TanStack Query hooks
  views        → page components & platform routers
  app          → cross-platform auth + app context
  api-client   → typed HTTP client
  sdk          → public TypeScript SDK
  cli          → `notifro` CLI
  mcp          → MCP server package
  mailer       → transactional email templates
  templating   → Mustache-style template engine
  ui           → shadcn UI primitives
  ui-primitives→ theme provider
  i18n         → internationalisation stubs

Development

pnpm install
pnpm --filter api db:migrate   # apply migrations to a local D1
pnpm dev                       # turbo dev: api (:8787) + web (:5173) + site (:4321)
pnpm build                     # turbo build
pnpm lint
pnpm typecheck

Self-hosting

Notifro deploys to your own Cloudflare account: a D1 database, two KV namespaces, a delivery queue + dead-letter queue, the Email send binding, and an every-minute cron trigger. In short:

cd apps/api
npx wrangler d1 create notifro
npx wrangler kv namespace create notifro-auth
npx wrangler kv namespace create notifro-rate-limit
npx wrangler queues create delivery-queue
npx wrangler queues create delivery-dlq
# paste the ids into apps/api/wrangler.jsonc, then set secrets:
npx wrangler secret put CONNECTION_ENC_KEY   # + FRONTEND_URL, GOOGLE_*, TWILIO_*, VAPID_PUBLIC_KEY
pnpm --filter api db:migrate:remote
pnpm --filter api deploy

Point the web app at your API (VITE_API_URL) and deploy apps/web (and optionally apps/site) to Cloudflare Pages. The full walkthrough lives on the marketing site's Self-host page.

About

Open-source, self-hostable notification infrastructure on Cloudflare, with a native MCP server for AI agents.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors