Integration Runtime Layer
notifications
Multi-channel notifications — in-app, email, push, SMS, chat — with self-hosted direct dispatchers and recipient-preference resolution.
Inbox · 3 new
- invoice.paid2m ago
payment received
- user.joined18m ago
new teammate
- alert.triggered1h ago
rate limit hit
In code
notifications.ts
1import { getNotificationProvider } from "@nebutra/notifications";
2
3const notifications = await getNotificationProvider();
4
5await notifications.send({
6 id: crypto.randomUUID(),
7 type: "invoice.paid",
8 recipientId: user.id,
9 tenantId: org.id,
10 channels: ["in_app", "email"],
11 data: { amount: invoice.total, currency: invoice.currency },
12});More in nebutra.com
- admin-toolingSelf-serve operator dashboards — tenants, billing overrides, feature-flag flips — all gated by @nebutra/permissions.
- cacheTag-based cache with Redis, Upstash, or in-memory backend. Same get/set/invalidate(tags) for serverless and self-hosted.
- collabRealtime co-editing primitives — Yjs CRDT, WebSocket transport, presence cursors. The piece every multi-user app eventually needs.
- emailRender React Email templates, dispatch through Resend / SES / SMTP. One sendEmail(template, props, recipient) for every transactional flow.
- event-busIn-process pub/sub with cross-app fanout. Used by audit, billing, and notifications to react to commerce events without circular imports.
- integration-vaultPer-tenant credential store for OAuth integrations and API keys — Creem, Gmail OAuth, Notion API. KMS-wrapped, refresh-rotated.