Workflow & automation

The platform watches itself —
and tells you.

Every detection is an honest z-score on aggregate data — no ML theater. Alerts are evaluated every minute from ClickHouse rollups, the weekly digest builds itself, and stakeholder reporting is a k-anonymized static snapshot that expires on its own.

Alert rules

6 metrics × 4 operators. Every minute.

MetricWindowOperators
Views1 hourabove · below · %-above baseline · %-below baseline
Errors1 hourabove · below · %-above · %-below
Goals24 hoursabove · below · %-above · %-below
Zero-traffic watch6 hourssilence is the alert
LCP p7524 hoursabove · below · %-above · %-below
Rage clicks24 hoursabove · below · %-above · %-below
Cooldowns

Per-rule, 5–1440 minutes. One incident, one page — not a hundred pings.

Delivery

Slack Incoming Webhooks or any JSON webhook. A test-fire button proves the wiring before you need it.

Audit-logged

Rule changes and firings land in the append-only audit log — always answerable.

Weekly digest

The report writes itself.

Auto-built per site from rollups: views, visits and engaged time, top pages, CWV p75, anomaly cards, frustration hotspots, deploys. Delivered to Slack on schedule — plus a send-now button for the "just this once" requests.

Share snapshots

Stakeholder reporting
without exposure.

One click creates a public, expiring (30-day) snapshot page: k-anonymized views, visits, engaged time, bounce, trend bars, top pages and sources. Static HTML — no live queries, no identities, noindex, XSS-safe. It expires cleanly, for privacy.

No live queries

The snapshot is rendered once — your dashboard credentials never touch the shared page.

k-anonymity holds

The same n ≥ 5 floor applies. Rows below the floor are suppressed in the snapshot too.

Also automated

The rest of the glue.

GA import

Paste or upload the GA4 "Pages and screens" CSV — columns auto-detected, previewed, written to hourly rollups with an import marker. 25-month retention for your history.

Surveys

Score (1–10), NPS (0–10) or text — a self-contained SDK widget triggered via observer('survey', {…}). Responses are aggregate, never linked to identities.

Saved segments

Named filter sets — path, country, device, source — saved per site and reusable across every screen, via a CRUD API.

Set the rules once.
Hear about it first.

Alerts, digest, snapshots and import ship in every tier — on your hardware, without a SaaS subscription.