Your users are rage-clicking something right now. Sonder tells you what, why, and when it's actually fixed.
Sonder reads a masked, semantic stream of what users do, groups the friction into a bounded set of tracked issues, diagnoses each one, and then watches the metric until the fix is proven (or the regression is caught).
Install is one command: npx sonder-init <write_key> · first ribbon in about 90 seconds
A system of record, not a feed
Sentry gave exceptions identity: a bounded list, a lifecycle, a resolved state that means something. Sonder does the same for UX friction. Dozens of tracked issues, not thousands of session replays.
Four things the metered, vision-first tools can't copy
These are structural, not marketing. Each one follows from owning a semantic SDK instead of recording video.
Resolved means the metric moved
Every issue ships with the one metric that proves the fix. Sonder tracks it after you deploy, auto-resolves when it lands, and reopens the issue the moment it regresses. Nobody else closes this loop; they optimize for acting, we prove.
rageclicks/tag-session 4.2 → 0.6 · target 1.0 · resolvedWe know what the screen meant
On friction, the SDK captures a tiny structured probe of what the user saw: the visible error text, the empty list, the disabled button. Identical clicks mean opposite things depending on that state. Vision tools burn frames guessing at it; pure event tools never see it.
saw: error "Invalid domain" · empty state · button disabledPriced by issues, never by sessions
Diagnosis runs once per issue, not once per session, so our cost curve is flat as your traffic grows and the pricing is too. No per-session meter, no $500 floor, no surprise bill after a good launch week.
a weekly full analysis run ≈ $0.20 in model costWe recommend. We never act on your users.
No autonomous emails to your customers, no auto-merged PRs, no session video. Sonder hands you (or your coding agent) a diagnosis, a precise fix, and the metric that will prove it. You stay in the loop; we verify the outcome.
output: diagnosis + fix diff + confirm-metric · you ship itThe safest data is the data we never collect
No session video. No screenshots. No DOM capture. No input values, ever. Emails, phones, cards, and SSNs are masked in the browser before transport, then masked again at ingest. Routes are parametrized so raw IDs never leave the page. Read the security overview.
click "Save changes" (button) Billing /settings/:id
input "Work email" (input) Billing value: [masked]
dead_click "Save changes" · saw: error "Email [masked] is invalid"
From landing page to first ribbon without talking to a human
The beta is invite-gated and free: 25 tracked issues, 1 workspace. Have an invite code? You can be watching your first session in minutes.