Open-source UX feedback tool

Stop guessing why users leave.
Start hearing why.

Reev detects user frustration in real-time β€” rage clicks, broken links, dead images, form struggles β€” and asks them what went wrong, right then and there. You get their actual words, not another heatmap.

Your website's checkout page

😀

Not working?

We noticed you clicked multiple times. What were you expecting to happen?

The button doesn't respond after I enter my card...

Dismiss
Send

A contextual popover appears the moment frustration is detected

Analytics tell you what happened. Not why.

You know users bounce. You know they don't convert. But you don't know what frustrated them β€” because no one asks.

What you see today

  • "72% bounce rate on /checkout" β€” but why?
  • Heatmap shows clicks on a button β€” did it work?
  • "Average session: 1m 42s" β€” were they confused or done?
  • Funnel shows 30% drop at step 3 β€” what happened there?

What Reev gives you

  • "The submit button doesn't respond after I enter my card" β€” exact words
  • Screenshot of the page at the moment of frustration
  • Console errors, DOM snapshot, and user breadcrumbs attached
  • Device, browser, time on page β€” full context for every report

How it works

Three steps. No build tools. No npm install. Just a script tag.

1

Add one script tag

Drop it before </body>. That's the entire integration.

<script
  src="/tracker.js"
  data-project-id="your-id"></script>
2

Reev watches for frustration

The tracker runs silently, detecting four types of user frustration in real-time:

  • Rage clicks
  • Dead links
  • Broken images
  • Form frustration
3

Users tell you what’s wrong

A non-intrusive popover anchored to the element asks what happened. Users respond because it’s relevant to what they just experienced.

User wrote:

"The coupon code field won't accept my discount code, it just clears every time."

Four frustration signals. Zero manual setup.

Each detection runs automatically. No configuration needed. Everything works out of the box with sensible defaults.

Rage Clicks

Automatic

Catches when a user frantically clicks the same button or link because nothing is happening. A clear sign of a broken or unresponsive element.

How it works

Watches buttons, links, and clickable elements. If the same one gets clicked 3+ times in rapid succession, Reev knows something is wrong.

Example

A user clicks your "Submit Order" button 5 times because the payment processor is hanging and nothing visible happens.

Dead Links

Automatic

Automatically checks every link on your page as soon as it loads. Broken links get flagged before any user even clicks them.

How it works

Quietly verifies all your internal links in the background. If one leads to a 404 or error page, a warning badge appears right on the link.

Example

Your navigation has a link to "/pricing" that broke after a deploy. Users see a warning badge on the link before they even click it.

Broken Images

Automatic

Detects images that fail to load β€” whether from missing files, server errors, or CDN outages. Users see an indicator and can report the issue.

How it works

Scans all images on the page and monitors for load failures. Broken images get an indicator badge so they don't go unnoticed.

Example

A product photo on your catalog page fails because the image CDN is down. Users see an indicator badge on the broken image.

Form Frustration

Automatic

Spots when a user keeps typing into a field, deleting everything, and starting over. A clear pattern of confusion or unclear validation.

How it works

Monitors form fields for the "type, delete, retype" cycle. When it happens repeatedly in a short time, Reev steps in to ask what's confusing.

Example

A user types their email, gets a vague validation error, clears the field, and retypes it differently β€” three times. The popover asks "What's confusing?"

Live on this page

Try it right now

The Reev tracker is running on this page. Interact with the elements below to trigger real detections.

Rage Clicks

Click this button rapidly 3+ times.

Dead Links

This link points to a 404 page β€” look for the badge.

Go to pricing page β†’

Broken Images

These images fail to load β€” look for the indicator badge.

ProductBanner

Form Frustration

Type something, select all + delete, repeat twice.

Every report comes with context

Reev doesn't just collect a message. It captures everything you need to understand and reproduce the issue.

rage_clickDesktopChrome47s on page2 minutes ago

"The submit button doesn't respond after I enter my card details. I clicked it like 5 times."

Page: /checkoutElement: button.btn-submitClicks: 5 in 1.2s

Attached Context

Screenshot captured

Page screenshot at moment of frustration

Console errors

POST /api/payments 500 (Internal Server Error)
Uncaught TypeError: Cannot read properties of null

User breadcrumbs (last 5 actions)

click β†’ input#card-number

click β†’ input#expiry

click β†’ input#cvv

click β†’ button.btn-submit (x5 rage)

navigate β†’ /checkout

User's own words
Page screenshot
DOM snapshot
Console errors
Action breadcrumbs
Device & browser

One line. That's it.

No npm install. No build step. No framework lock-in. Just add a script tag and Reev starts working immediately.

<script
  src="https://your-domain.com/tracker.js"
  data-project-id="your-project-id"
  data-api-url="https://your-domain.com"

  <!-- Optional configuration -->
  data-rage-click="true"
  data-dead-link="true"
  data-broken-image="true"
  data-form-frustration="true"
  data-popover-theme="dark"
></script>

Configuration options

  • Toggle each detection type on/off
  • Choose dark or light popover theme
  • Set max popovers per session
  • Configure cooldown between popovers
  • Enable debug logging

Works with everything

  • React, Vue, Svelte, Angular
  • Next.js, Nuxt, SvelteKit
  • Plain HTML β€” no framework needed
  • Any backend or static site
  • Self-hosted β€” your data stays yours

Your users are frustrated right now.
Find out why.

Add Reev to your site in under a minute. Get your first feedback report the same day.

Free to use. No credit card required.