"The submit button doesn't work" plus a Slack screenshot wastes an hour. A BugJar report has the rrweb replay, the failed XHR, the console TypeError, the user's exact route, and the QA tester's audio narration — landing in your dashboard as one threaded report, with a Slack notification to your team channel and a one-paste link to drop into Linear, GitHub Issues, or your ticket tracker of choice.
The trigger button only mounts when the user is verified. Issue tokens to your QA team via your existing auth; nobody else sees the button. Public visitors aren't confused, support tickets don't ask "what's this BugJar thing", and end-users on production are unaffected.
Toggle Show trigger only to verified users in the dashboard project settings, mint a JWT on your QA-team auth, and pass it into init:
window.addEventListener('bugjar:ready', () => {
BugJar.init({
userToken: '<JWT signed server-side with your project secret>',
});
});
// showWhen: 'verified' comes from your dashboard project settings.
// Flip it in the UI; next page load, public visitors stop seeing
// the trigger. No snippet re-paste needed.
Same primitive your customer-facing app uses for HMAC user identity, just constrained to a private audience. Token expires in 1 hour; refresh on page load.
Tester finds the bug on staging. Clicks the BugJar trigger (only they see it).
Records 90 seconds. Reproduces the bug, narrates what they expected, draws on the page.
Report lands in the inbox. Replay synced to console + network panels; user identity attached (HMAC-verified).
Dispatch to engineering. Slack ships today — the report drops into your channel with the BugJar link. Linear, GitHub Issues, Discord, and a generic webhook (Zapier / n8n / your own service) are on the roadmap.
Or start on Free — 10 captures a month, 1 project, no card required.