Rewind — capture the bug you already missed

Stop writing bug reports.
Start capturing them.

One click records the screen, the console, the network calls and the exact environment — then AI writes the summary, the likely root cause and the steps to reproduce. The ticket lands in Jira before you've finished describing it.

Free forever plan · No credit card · Works on any site, including localhost

app.bugcatch.dev/bugs/BC-4127 Live triage queue

Checkout crashes on Apply coupon

BC-4127 reported by maya@acme.io · assigned to @dev-raj

Critical
Rewind · 1:47 before the crash

AI analysis

Root cause — POST /api/cart/coupon returned 500 after the discount pushed the total below zero. The client reads res.data.total.toFixed() without a null guard, so the cart component throws and unmounts the checkout tree.

  • 1 Add any item under $10 to the cart
  • 2 Enter coupon WELCOME50
  • 3 Click Apply coupon — page goes blank
Console 3 Network 27 Environment Steps 11
✕ TypeError: Cannot read properties of null (reading 'toFixed')  at CartTotal (Cart.tsx:118:24)⚠ POST /api/cart/coupon → 500  (412 ms)  { code: "NEGATIVE_TOTAL", cartId: "c_9f3a1" }
Pushed to Jira as ACME-2841 · posted in #eng-triage
1 clickFrom "it's broken" to a filed, reproducible ticket
2 minOf screen activity always buffered by Rewind
~4 kBSDK on your own site — no extension needed
6 ways outJira, GitHub, Linear, Slack, webhooks and the REST API
The real cost of a bad bug report

"Works on my machine" is a three-day conversation

A screenshot in Slack starts a negotiation, not a fix. The developer asks which browser. QA asks which build. Somebody asks for the console. By the time the context exists, the tab is closed and the state is gone.

Without BugCatch

  • A cropped screenshot pasted into a thread
  • "What browser? What were you doing?"
  • Console and network state already lost
  • Repro steps written from memory, three hours later
  • Ticket bounces back as cannot reproduce
  • Two engineers, half a sprint, one guess

With BugCatch

  • Video of the failure, plus the two minutes before it
  • Browser, OS, viewport, build and user captured automatically
  • Every console error and failed request attached
  • AI-written summary, root cause and numbered repro
  • Filed in Jira, GitHub or Linear the moment it's reported
  • One engineer opens it once and fixes it
Capture

Everything a developer will ask for, collected before they ask

The reporter clicks once. BugCatch does the interrogation.

Rewind — the bug you already missed

BugCatch keeps a rolling buffer of the last two minutes of screen activity in an isolated offscreen document, capped to bound memory. Something breaks, you hit Rewind, and the recording of what led up to it is already there. No "can you do it again?"

Screenshot & annotation

Grab the full page or a region, then arrow, box, blur and caption it in place. Sensitive fields blur before the capture ever leaves the browser.

Screen recording

Record a tab, a window or the whole desktop with mic and narration. WebM is transcoded to MP4 on the queue so it plays anywhere your team pastes it.

Console & network logs

Errors, warnings, stack traces, failed requests with status codes, timings and payloads — attached to the report automatically, not pasted in by hand.

Environment metadata

Browser and version, OS, viewport and device pixel ratio, URL, release build, locale, timezone and the signed-in user — every field a triage engineer checks first.

Drop-in SDK — no extension required

A ~4 kB browser SDK puts a Report a bug button inside your own product, so customers and non-technical staff file the same complete report — screenshot, console, network and environment — without installing anything. Two lines to initialise, and the widget inherits your theme.

Published on npm as @sphoro/bugcatch-web-sdk — MIT licensed, zero dependencies, ESM or a single script tag.

View on npm
import BugCatch from '@sphoro/bugcatch-web-sdk'

BugCatch.init({
  apiKey: 'bc_live_…',
  projectId: 'prj_8f21c',
  captureConsole: true,
  captureNetwork: true,
})
Triage

AI reads the bug so your team doesn't read every bug

Every report is analysed the moment it lands. BugCatch writes a one-line summary, proposes a root cause from the stack trace and failed requests, drafts numbered reproduction steps, and suggests a severity — then sorts the queue by it.

  • Plain-language summary a PM can read
  • Root cause traced to the failing call and line
  • Numbered repro steps drafted from the session
  • Suggested severity, editable by any triager
  • Duplicates grouped against open bugs on the same project
  • Past resolutions attached to the new report, from your knowledge base
  • One queue across every project, or one project at a time
  • An owner on every bug — assign it, hand it over, or escalate to a second owner with the same authority
See the triage queue
Severity spine14 open
Critical3
High4
Medium5
Low2
Statusthis week
Open 9 In progress 3 Resolved 21 Closed 6
Automation

And then it acts on what it read

Every switch here is off until you turn it on, and the row that stores them does not exist until you do. Nothing on this list overrules a person, hides a report, or writes to a bug by a route that skips your reporter’s timeline.

Severity applied, never overruled

The severity the analysis concluded is applied over “nobody has an opinion yet” and never over one a member or the reporter chose. The record knows which of those it is holding, so automation can tell the difference.

Rules that route it to a person

Ordered rules matching on severity, tag or URL, each handing the report to somebody — or round-robin across the project. The first rule that matches wins, and the timeline says which one did.

Duplicates linked, not buried

Above a confidence floor you set, a repeat report is linked to the one that already says it — linked, not merged and not closed. Both keep their own thread, and the second reporter still hears about the fix.

Response and resolution targets

Per priority, per project, measured against when your team actually first answered. A missed target escalates the report to a second owner and is recorded once — because a sweep that re-alerts every five minutes is how an alert becomes a filter rule.

Reports that went quiet

Nudge the reporter after so many days, settle it after so many more. Nothing else in the system can notice that time has passed — every other job waits for something to arrive, and a report simply sitting there arrives nowhere.

Your tracker can close it

Close the Jira, GitHub or Linear issue where you already are, and the bug settles here: resolution time stamped, the knowledge base told, the reporter’s thread updated. Signed webhooks, on a secret you can rotate.

Close the loop

The person who found it stops asking “any update?”

Most bug tools end at the ticket. BugCatch keeps the reporter in the conversation — one live thread they can answer in, carrying everything your team chooses to share and nothing it doesn’t.

  • A timeline, not a status page. Severity changes, “this has an owner now”, and every shared reply — replayed in order when they come back a week later.
  • Nothing to sign up for. They open /track and get a code at the address they reported from — or read the same thread inside your product, in the widget they filed from.
  • They can answer. Text, screenshots, documents and voice notes, in the same thread. It reaches your dashboard live, attributed to them.
  • Internal stays internal. Comments are private to your team by default and shared one at a time — the toggle names the consequence, not the setting.
  • Your engineers stay unnamed. A reporter is told their report has an owner. Which engineer that is stays inside your team.
Included on every plan, Free too
BC-4127 — what the reporter sees/track

Raised to Critical4 minutes after you reported it

Someone owns this nowYou’ll hear back in this thread

Reproduced it — the coupon takes the total below zero and the cart throws. The fix is in review and ships today.

Shared with you · 11:04

It does it on the annual plan too. Recorded what I did:

0:14 Maya · voice note · 11:09

Same root cause as BC-3902. Check the other coupon paths before we call this one fixed.

Internal — only your team will see this
Institutional memory

Every bug you close makes the next one cheaper

A settled bug is worth more than its fix. BugCatch distils each one into a note and hands it back the next time something similar arrives — to your engineers, and, when you allow it, to the person doing the reporting.

Resolutions that outlive the ticket

When a bug is settled, what actually fixed it is distilled into a short note filed under that project — the thing nobody can find a year later when the same class of failure comes back.

Duplicates found before triage

A new report is matched against the open bugs on the same project the moment it lands, so the third person to hit one crash joins a thread instead of opening a third ticket nobody links up.

Your replies become answers

What your team writes back to a reporter is a second corpus, kept apart from the first. A resolution note names the file that was at fault; an answer names none of it, because it is written for the customer.

Auto-answer, with the brakes left on

Switch it on and a report that closely matches a question you have already answered gets that answer straight away, in the reporter’s own thread. It stays off until you turn it on. It waits behind a confidence floor you set. And every automatic answer is counted on Analytics beside how many of them a person still had to follow — because a deflection rate nobody measures is just a queue you stopped reading.

Auto-answerlast 30 days

34Answered from the knowledge base
6Still needed a person
85%Settled without a reply

Off by default. Team and Enterprise, with your own model key.

How it works

Four steps, and you only do the first one

  1. 01

    Capture

    Hit the extension or the in-app button. Screenshot, recording or Rewind — plus console, network and environment, collected in the same moment.

  2. 02

    Upload

    Media goes straight to object storage over a presigned URL, so a 60 MB recording never queues behind the API. The report is created the instant the upload lands.

  3. 03

    Enrich

    Background workers run AI analysis, redact secrets, transcode the video and push the issue to your tracker. Seconds, not a build step.

  4. 04

    Triage

    It appears in the queue ranked by severity, with the video, the logs and the repro on one screen. Assign, comment, resolve, or share a read-only link.

Integrations

Files the ticket where your team already works

One internal bug shape maps to every tracker through small per-provider adapters — so the same capture becomes a Jira issue, a GitHub issue and a Slack message with the fields each one expects.

JJiraIssue with severity, environment and attachments mapped to your fields
GHGitHubIssue in the right repo with labels, assignee and the video linked
LLinearIssue in the right team and project, with priority from severity
#SlackRich message in the triage channel, threaded on status changes
</>WebhooksSigned JSON on every event, for anything not on this list
APIREST APICreate, query and update bugs directly — the dashboard uses nothing else
Analytics

Numbers you can take into a planning meeting

Per project or across the whole workspace, with one filter row that scopes every figure beneath it — and a written read of the slice you are looking at, from your workspace’s own model.

  • Time to resolution measured from the moment a bug was resolved, never inferred from when the row was last edited
  • Every figure taken from one slice, so a total and the series under it cannot disagree
  • Sample sizes printed beside the medians — nine bugs never masquerade as a trend
  • Open right now is deliberately not windowed: a backlog is a fact about today
  • Where the bugs come from — browser, OS, project, tag and reporter
  • A daily or weekly digest, per member, scoped to the projects that member can see — and never sent when there is nothing in it
All projectslast 30 days
6h 12mMedian time to resolve
from 84 resolved
41mMedian first reply
to the reporter
23Open right now
across 6 projects
Where they come fromby browser
Chrome61
Safari34
Firefox16
Edge9
Why not just a screenshot

The gap isn’t the picture. It’s everything around it.

Every team already has a way of reporting bugs. This is what each one actually hands to the engineer who has to fix it.

What each way of reporting a bug delivers to the developer
What the developer gets Screenshot in a thread A screen recorder BugCatch
The moment it broke A still, usually cropped Video, if recording was already running Video, plus the two minutes before it
Console errors and stack traces Ask, and hope the tab is still open Not captured Attached, with the failing line
Failed network calls Not captured Not captured Status, timing and payload
Browser, OS, viewport, build A follow-up question Sometimes visible in frame Recorded as fields you can filter
Who writes the repro steps The reporter, from memory Nobody Drafted from the session, edited by you
Where the ticket ends up Somebody re-types it Somebody re-types it Jira, GitHub, Linear or Slack on arrival
What the reporter hears back Silence, then a chase Silence, then a chase A live thread they can answer in
Secrets caught in the logs Whatever was on the screen Whatever was on the screen Scrubbed in the browser and again at the API
Who it’s for

Anyone who has ever been asked “can you send a screenshot?”

QA and release

File from staging, localhost or a build behind a login, with the environment already attached. Rewind catches the flaky one you were not recording.

Customer support

Turn “it’s not working” into a reproducible report without a call — then answer the customer in the same thread, from the same screen.

Agencies and studios

A private project per client, grouped in the sidebar, with a read-only link you can share into a review call. Clients report through your app, not your inbox.

Engineering leads

One queue across every project, ranked by severity, with time-to-resolve measured rather than guessed and an owner on every report.

Security & privacy

Bug reports are production data. We treat them that way.

A recording of a checkout flow contains a real cart, a real session and sometimes a real card field. Encryption and redaction are the default, not an enterprise upsell.

Encrypted at rest

On Team and Enterprise, every content column is sealed with AES-256-GCM under a per-workspace data key, itself wrapped by a master key. Ciphertext is self-describing, so a plan change or a half-finished backfill stays readable.

Credentials stripped on every plan

Bearer tokens, API keys, cookies and presigned URLs are removed in the browser, again at the API, and once more when an older report is read back — so a public share link cannot leak a key captured before the rule existed. Card numbers and your own patterns layer on top.

Workspace-scoped access

Every tenant resource is checked against membership. Projects are public to the workspace or restricted to an explicit member list, enforced inside the guard so no endpoint can ship without the check.

Deliberate sharing

A session is private by default and inherits its project's setting. Share one publicly and the API serves a purpose-built payload at a token URL — never the internal record.

Roles that mean something

Owner, admin, member and viewer, applied per workspace with an audit trail on every triage action — and a report can only be edited by the people who actually own it. SSO/SAML and SCIM provisioning on Enterprise.

Retention that actually deletes

A sweep prunes past the window on every plan — 7 days on Free, 90 on Team, 365 on Enterprise — taking the knowledge-base passages first, then the stored media, then the row. It is not sold as a feature and not gated behind one: it is the promise the plan already made. Custom windows, data residency and self-hosted deployment on Enterprise.

Pricing

Per member and per project. Bug reports are always unlimited.

Every limit on this page is enforced by the API, not just printed here.

Billing period

Free

For solo devs and trying things out.

$0/member/mo

One project, and nothing to add on

Start free
  • 1 project
  • Up to 2 members
  • Unlimited bug reports
  • Screenshot + annotation capture
  • Console, network & environment capture
  • Credentials & tokens scrubbed from logs
  • Reporter portal — a two-way thread with the reporter
  • Files and voice notes from the reporter, in that thread
  • Live calls — the reporter talks to whoever is free, browser to browser
  • Android app for the triage queue
  • Two-factor authentication
  • Analytics — trends, severity, time to resolve
  • 7-day retention
  • Community support
Most popular

Team

For product teams shipping every week.

$19/member/mo

+ $9 per additional project /mo

+ $5 per member /mo for the mobile app

Get Team access
  • Everything in Free
  • Up to 25 projects — the first included
  • Up to 20 members
  • Screen recording + Rewind buffer
  • AI analysis — summary, root cause, repro
  • Duplicate detection before you triage
  • Knowledge base — resolved bugs answer the next report
  • Automation — apply the severity, route the bug, chase the quiet reports
  • AI-drafted reporter replies, sent by a human
  • Auto-answer from the knowledge base — off until you enable it
  • AI written read of any analytics slice
  • Connect your own database, so an analysis can check the data behind a bug
  • Jira, GitHub, Linear & Slack
  • Everything encrypted at rest (AES-256-GCM)
  • Private projects & sharing controls
  • Ownership, hand-off and escalation to a second owner
  • Project groups, to keep a long project list navigable
  • Mobile app — a call rings your phone with BugCatch closed, answered from the lock screen
  • 90-day retention
  • Priority email support

Enterprise

For orgs with compliance and scale needs.

Custom

Seats and projects inside the contract

Talk to sales
  • Unlimited projects & members — no per-project charge
  • Everything in Team
  • SSO / SAML + SCIM provisioning
  • Audit log & role-based access
  • Self-hosted or private cloud
  • Custom retention & data residency
  • Dedicated support engineer + SLA

Yearly prices are what you pay each month when billed annually — for members and for projects alike. There is no card form yet: Team is switched on by us, or with a single-use code you redeem in the dashboard, and it converts your existing data in place.

FAQ

Questions worth asking first

Do reporters need to install anything?

Your team installs the Chrome extension, which works on any site including localhost and staging behind auth. For customers and non-technical staff, drop the ~4 kB SDK into your app and they file the same complete report from a button in your own UI — nothing to install.

How does Rewind capture something that already happened?

Once you enable it, BugCatch continuously records into a rolling in-memory buffer holding the last ~2 minutes, discarding everything older. Nothing is uploaded until you press Rewind. If you never press it, nothing ever leaves the machine.

What stops a recording from capturing a password or a card number?

Two layers. In the browser you can mark elements to blur, and password fields are masked by default. Server-side, redaction rules strip tokens, cookies, auth headers and card patterns from logs and payloads before the record is written — and redaction runs before encryption, so the sealed row never contains the secret.

Can the person who reported the bug see what our team says to each other?

No — not unless somebody decides they should. Comments are internal by default and shared one at a time, and the dashboard’s toggle states the consequence rather than the setting: “Only your team will see this” or “Dana will see this”. The reporter’s side of the thread is built from a separate, reviewed object — it carries severity, the fact that the report has an owner, and shared replies. It never carries who the assignee is.

Will automation change our bugs without us knowing?

Every switch is off until you turn it on, and the settings row does not exist until you do — so “has this team configured automation” stays a question with an answer rather than a set of defaults somebody inherited. Once on, it still will not overrule a person: a severity is applied over “nobody has an opinion yet” and never over one a member or the reporter chose, and a duplicate is linked rather than merged or closed, so both reports keep their own thread. Every automatic change is written through the same path a person’s change takes, which means it is attributed as automation, lands on the reporter’s timeline, and replays there like anything else. The one thing that runs whatever you configure is the retention sweep, on every plan including Free — deleting your data on the schedule we sold you is a promise being kept, not a feature.

Can I keep using Jira as the source of truth?

Yes. Plenty of teams treat BugCatch as the capture and evidence layer only: the issue is created in Jira, GitHub or Linear on ingest, and the BugCatch link carries the video, logs and environment. Status changes sync back so the queue doesn't drift.

Can two people own the same bug?

Yes. A bug has an assignee, and it can be escalated to a second owner who carries exactly the same authority — not a watcher. An escalation where the person it was escalated to has to ask the first owner to make every change is the situation escalating is meant to end. Everyone else sees the report; only its owners and workspace admins can edit it, and an unassigned bug offers to be claimed by whoever opens it.

Which AI model writes the analysis, and does it train on my data?

You choose, and you bring the key: Claude (Anthropic) or ChatGPT (OpenAI), set under Settings → Integrations → AI Provider on Team and Enterprise. The plan unlocks the feature; the tokens are billed to your own account at cost rather than marked up into the subscription. The model sees the redacted report — stack traces, failed requests and environment. Without a key, reports are still captured in full and simply aren't analysed.

Why do projects cost extra on Team?

Because a project is what actually costs us to run: its own retention window, its own duplicate index, its own knowledge base. The first project is covered by the member price and each one after it is $9 a month ($7.50 billed yearly), so a team shipping one product isn't paying an average that includes workspaces running twenty. Free is a single project; on Enterprise, projects sit inside the contract and aren't metered.

How do we move onto Team?

Talk to us and we switch the workspace over, or we mint you a single-use code you redeem in the dashboard yourself — same tier either way, the code just lets you pick the moment. Nobody sets their own plan from the browser: Team turns on encryption at rest, and a security posture that changes on an unattended click is one nobody agreed to. Redemption applies immediately and converts your existing data in place.

What happens if I downgrade?

You keep everything you already have. Limits apply when you create something new, so a workspace over its new plan's cap is simply blocked from adding more rather than losing data. Encryption converts in place and is re-runnable in either direction.

Can we self-host?

On Enterprise, yes — in your own cloud or a dedicated private instance, with your object storage and your key management. The stack is Postgres, Redis and a Node API, deployable with Docker Compose or your own orchestration.

Does it work on localhost, or on staging behind a login?

Yes. The extension captures whatever the tab is showing, so a local dev server, a preview deployment and a staging environment behind SSO all work the same as production — nothing has to be publicly reachable for a report to carry its video, console and network log. The SDK works the same way inside your own app.

About us

The people behind BugCatch

BugCatch is built by Sphoro. We spent years on the receiving end of three-line bug reports — reproducing from guesswork, asking for the console log a week after it scrolled away — and decided the report should arrive carrying its own evidence.

Company updates go out on Sphoro on LinkedIn.

Mobile

Triage from your phone

The same queue, the same reports, the same calls with whoever filed them — as an app, so the session survives being left alone and the bug you were reading is still there tomorrow.

Android today — it installs straight from your browser. iOS when there is a build to sign.

The next bug someone finds should file itself

Install the extension, capture one bug, and see what a complete report looks like. Free forever for solo work — no card, no sales call.

Works in Chrome and Edge · Firefox and Safari support in beta