Deploy
Railway, or docker compose up.
# two variables, that's it DASHBOARD_USER=you DASHBOARD_PASSWORD=••••••
self-hosted event tracker
Every app's signups. One chart.
Your apps POST /track when something happens. One dashboard shows all of them.
| project | total | unique | volume | last seen |
|---|---|---|---|---|
| hooksense | 96 | 91 | 2m ago | |
| uptimecrow | 74 | 70 | 18m ago | |
| scryver | 44 | 37 | 1h ago |
A tessera is one tile in a mosaic. Each app is a tile.
quickstart
Railway, or docker compose up.
# two variables, that's it DASHBOARD_USER=you DASHBOARD_PASSWORD=••••••
The key pins the project server-side.
TESSERA_URL=https://… TESSERA_KEY=TSR-EXAMPLE…
Fire-and-forget. Never throws, never blocks.
await createUser(…); track("signup", {}, user.id);
what's in the box
Apps POST /track. No SDK, no client bundle.
One TSR-… per app, revocable. A leaked key can't reach another app.
One event across every app, a coloured line each.
Daily trend, event breakdown, the last 50 events.
Old days archive to daily totals in one transaction. Nothing is lost.
An event name and an opaque id. Nowhere to put an email.
honest limits
Counts and trends per app, not per-user journeys. Need that depth? Run PostHog alongside it.