NotifKit
One notify() call is all your product needs to reach users on push, email, SMS, chat, and webhooks, with NotifKit deciding how and when each message travels. List the channels in the order you prefer and NotifKit tries each in turn, so a failed push quietly becomes an SMS or an email instead of a lost message. Per-user preferences, consent, and quiet hours in each user's own timezone hold non-urgent sends until morning, while critical messages such as one-time passwords travel their own lane immediately. Templates, multi-step workflows that wait days or block on events, scheduling, throttling, and deduplication all run behind that single call, defined in TypeScript and kept in your repository. Delivery logs record every attempt, and the admin dashboard shows a live activity feed, queue depth per priority lane, workflow runs step by step, and a replayable dead-letter queue. Several products can share one deployment as separate projects with their own API keys, rate limits, and data, and any service can call the REST API without the TypeScript SDK. Ask an AI assistant why a password reset never arrived by connecting the built-in MCP server to Claude Code, Cursor, or another MCP client. Running on a dedicated VPS on RepoCloud with guaranteed CPU, RAM, and SSD, full root SSH access, and a browser serial console. MIT licensed.
Deploy