Events in. Everything else out.
Sendora is a single event and identity pipeline with 22 modules hanging off it. Every module reads the same stream, so tools stay in sync without glue code.
Track
Drop in a Sendora SDK — Web, iOS, or Android — or POST events to the API. One call identifies a user and starts the event stream.
Route
The event bus fans out to every enabled module. Messaging, analytics, automation, and support see the same shape in real time.
Act
Send a push. Trigger a journey. Open a support ticket. Render a funnel. Every action is a module reading the same events.
One schema. Every module.
Events flow through a single envelope: an actor, a verb, an object, context, and consent. Messaging templates reference the same fields your analytics dashboards do.
- Actor: the user or system doing the thing.
- Verb: an action like
order.placed. - Object: what was acted on (product, doc, session).
- Context: device, locale, IP (hashed), session, page.
- Consent: purpose allowlist at the time of the event.
{
"actor": { "id": "u_123", "email": "sam@acme.co" },
"verb": "order.placed",
"object": { "id": "ord_81", "amount": 4200, "currency": "USD" },
"context": { "ip": "203.0.113.4", "ua": "iPhone/17.2" },
"consent": ["marketing", "analytics"]
}Built on boring, bulletproof tech.
A Cloudflare Worker handles the edge hot path — link redirects and event ingestion — with sub-50ms P99. Core services run Hono + Drizzle on Postgres for durable state and clean transactions. A Next.js dashboard ties it all together.
┌────────── edge ──────────┐
│ Cloudflare Worker │ ← redirects, ingest
└────────────┬─────────────┘
│
┌────────────▼─────────────┐
│ Hono API + Postgres │ ← identity, events, billing
└────────────┬─────────────┘
│
┌────────────▼─────────────┐
│ 22 product modules │ ← read the event stream
└──────────────────────────┘Start in minutes. Scale without switching tools.
The free tier covers most side projects. Every module is turn-key and every SDK is first-party.