Your tester speaks the bug.
You get a GitHub issue.
One tap on your app captures the replay, the console and their voice — and files a GitHub issue your team can act on.
Free one-week trial — 30 reports a day · No credit card · One script tag
- Tap the button on your app
- Speak “the total is wrong”
- Issue filed replay, logs, transcript
- Assigned labelled, deduplicated, in your tracker
A wrong answer is not a crash.
Error tools wait for an exception. Replay tools wait for a struggle signal. Neither can see a button that worked and did the wrong thing. A person can — so we let a person say it.
What you get
-
Your tester needs no words for it
They tap, they talk. No repro steps, no console, no screenshots to attach.
-
The last 60 seconds come with it
Session replay, console errors and network calls, frozen at the moment they tapped.
-
The issue lands in your repo
Transcribed, fingerprinted, deduplicated. The same bug twice is one issue.
-
Everything is already attached
Replay, console and network, the tester's own words, a screenshot. Nobody has to ask "what did you do?".
This is what lands in your tracker.
Example — the issue LadyBugLoop files, in the format it really writes.
What the tester said
“I opened the page and the little ladybug button just isn’t there. I reloaded and it came back. Nothing looks broken otherwise.”
Top error
manual report — no console error
Environment
Android 14 · Chrome 128 (Blink) · mobile · 360×660 CSS px · DPR 3
What the tester did (last 3 actions)
00:02 NAV /practice
00:07 CLICK button "Start"
00:11 REPORT tapped the report button
Your testers’ sessions stay yours.
A tester presses a button, so we capture a chosen moment — not everything, always.
- Inputs are masked by default What people type is redacted in the replay before it leaves the browser. You opt fields back in.
- One moment, not a firehose The last ~60 seconds of one session, captured when a QA person decided to report. There is no always-on recorder.
- One project cannot read another Row-level security scopes every read to the project that owns it, files included.
- We never touch your code LadyBugLoop files an issue. It has no branch, no commit and no write access to your source — there is nothing here that can change your repo.
- Your ingest key is stored as a hash We keep a SHA-256 of it, never the key itself.
- The SDK cannot break your app Every entry point and patched function is wrapped; on any internal failure it silently does nothing.
Data lives in Supabase (eu-central-1, Frankfurt). Every third party that touches a report is named in the subprocessor list, with what each one receives. We hold no SOC 2 or ISO 27001 audit today — this is how it is built, not a certificate.
One call, then hand it to your tester.
<script src="https://ladybugloop.com/sdk/v13/ladybugloop.iife.js"></script>
<script>BugLoop.init({ key: YOUR_KEY, projectId: YOUR_PROJECT, endpoint: YOUR_INGEST_URL });</script>
One script on your page and that one call. The button appears; nothing else in your app changes, and if the SDK ever fails it does nothing at all.
Live in seconds — 3.8 s measured from pasting those two lines to a working report button.
79 KB gzipped, and it loads after your page — measured on every build, and the build fails if it grows past 80 KB.
Start free. Pay when it pays off.
Free — a one-week trial, 30 reports a day.
$99 a month per workspace — 500 reports, then $2 each.
Unlimited testers either way; they never sign in.
No credit card to start · Annual is ten months · Cancel anytime