Collect feedback without putting a recorder on every page

Most feedback widgets arrive attached to an analytics suite with session replay and heatmaps. If what you wanted was the button — and, when a reporter asks for it, one picture of the page — here is what that alternative looks like.

Behaviour analytics platforms — Hotjar being the best known — bundle a feedback widget alongside heatmaps and session recordings. If you need all of it, that bundle is good value.

If you only ever wanted the button, the bundle is a poor trade. You inherit a consent obligation, a masking policy that has to hold every second of every session, a much larger script that runs continuously, and a category of recorded data you now have to secure — in exchange for a feature you were not going to use.

One frame on a press is not a recording

The obvious objection first, because BugLoop does take screenshots: what is the actual difference?

What runs when nobody is asking. Session replay instruments the page continuously — DOM mutations, mouse movement, scroll position, input events — for the whole visit, whether or not anything ever goes wrong. BugLoop's capture code is not downloaded at all until a reporter presses a button. It then produces exactly one image of the page they were already looking at, and stops.

And who sees it first. A recording is watched later, by you, and the person in it never learns what it contained. A screenshot is masked before it is taken — every field on the page bulleted, every region you marked left undrawn — then shown to the reporter, and attached only if they say so.

That is the whole of the capability. No second frame, no cursor path, no timeline, nothing between presses.

What you give up

The ability to watch what a user did. That is a real loss for diagnosing problems nobody can describe, and it is the honest cost of this choice. A still image of the end state is not the sequence that produced it.

You also give up heatmaps, funnels, and aggregate behavioural reporting. A report-first tool answers "what did someone tell us", not "what did everyone do".

What you get back

  • No cookies and nothing written to the visitor's device, so the widget itself raises no consent requirement
  • No recordings to store, secure, retain, or delete on request — the only image that ever exists is one somebody deliberately made
  • Masking that has to be right for one moment the reporter chose, rather than for every second of every session you never see
  • An always-on script in single-digit kilobytes; the capture library is a separate file that downloads only for the people who use it
  • A much smaller CSP change: one script origin and one connect origin

Where the honest footnote goes

One feature can make a third-party request, and it should be said plainly rather than buried. Dictation puts a microphone button on the description field using the browser's own speech API — and in Chrome, that API streams the audio to Google for transcription.

So it ships off unless you turn it on for a project, the widget discloses it the first time the button is pressed, and it is documented rather than implied. If you want the unqualified "no third-party requests" line in your own privacy policy, leave dictation off and you have it.

They are separable decisions

Nothing stops you running both. If you already have an analytics platform and want feedback routed straight into your issue tracker with structured fields, running a dedicated report-first widget alongside it is a reasonable setup — and a cheaper one than upgrading a plan for a single feature.

Frequently asked

How do you debug without a recording?
By asking, and by looking at the picture. A 1-to-5 severity, an optional screenshot of the page as the reporter saw it, and automatically captured page URL, viewport, and user agent cover the majority of reports. When they do not, you email the reporter — which is why the opt-in email field exists.
Is a screenshot not the same privacy problem in miniature?
It is the same category of risk, at a fraction of the size, with different controls. It happens once on an explicit press rather than continuously; every input and textarea on the page is blanked before the image is rendered, and anything you mark with data-bugloop-mask is not drawn at all; the reporter sees the result before it is attached and can discard it. The image is stored in a private bucket, read only through time-limited signed links, and deleted with the report. It is also not a screen capture: the widget renders your own page, so it can never see another tab or anything else on the reporter's desktop.
Do you plan to add session replay?
No. It is an explicit non-goal. A single confirmed screenshot is the deliberate limit of how far this goes — adding continuous recording would undo the privacy characteristics that are the reason to choose this over a bundled suite.