alrt is notification infrastructure you host yourself. One trigger fans out to eight channels — in-app, email, Slack, WhatsApp & more — with a visual workflow engine doing the routing.
No provider SDKs, no per-channel plumbing, no separate subscriber sync. One authenticated POST — alrt upserts the recipient, resolves the workflow, and routes across every channel it touches.
curl -X POST alrt.local/events/trigger \-H "Authorization: Bearer alrt_sk_…" \-d '{"workflow": "order.completed","subscriber": { "id": "u_123" },"payload": { "total": "$99.00" }}'
Every channel speaks the same trigger. Bring your own credentials — Fernet-encrypted, scoped per team.
Drag nodes, branch on conditions, add delays, publish. The next matching trigger runs the graph — no redeploy for a copy change, no eng ticket for a new channel.
Create the recipient on the same call that triggers. Zero pre-registration, no sync job.
WebSocket over Redis pub/sub. Build your own bell — zero UI lock-in.
Per-channel queues, exponential backoff, one-click retry from the dashboard.
1,000 subscribers per call. Redis SET NX idempotency, 24h window.
Branch on payload or subscriber props. Schedule with deliver_at.
Your provider keys, Fernet-encrypted at rest, scoped per team.
docker compose up and send your first multi-channel notification before lunch.