How it works

From a click
to a shipped fix.

Five steps. Two minutes to set up. From your QA's first click to your AI agent's pull request.

1Install

Drop one script tag.

Paste a single line of HTML inside your site. No SDK, no npm install, no build step. Works with React, Vue, Nuxt, Next.js, Angular, Svelte, Rails, plain HTML, anything that renders in a browser.

Loads asynchronously. ~10kb gzipped. Shadow DOM so it never conflicts with your CSS.

index.html · paste before </body>
<!-- FeedBug widget -->
<script src="https://cdn.feedbug.app/w.js"
data-project="pk_live_xxxxx"
data-pins="true"></script>
React
Vue / Nuxt
HTML
Rails
Next.js
Anything
2Point

Your QA clicks where it breaks.

A discreet toolbar sits at the bottom-right of your app. When something's wrong, your tester clicks the bug icon, then clicks on the broken element. A small form appears to describe the bug. That's it.

The widget is invisible to end-users by default. Only loads on the domains you allow.

Report a bug
3Capture

FeedBug gathers the full context.

At submit, the widget captures a screenshot of the viewport, the URL, the browser, the OS, the screen size, the last 20 console logs, every failed network request, every JS error, and the HTML context of the clicked element: its component name, its CSS selector, its siblings.

You can also configure custom data: cookies, localStorage, sessionStorage keys.

diagnostics · captured at submit
Device
macOS 15.3 · Safari 19.2 · 1440×900
Console
[info] Mounted Dashboard.vue
[warn] Deprecated API: useStore
[error] chart.render is not a function
at MetricCard.vue:42
Network
GET 200/api/projects
GET 500/api/metrics
Element
Component: MetricCard
Selector: div[data-slot="card"]:nth-child(3)
4Ticket

Linear ticket created in 2 seconds.

Everything lands in your Linear team as a new issue with the screenshot embedded, the diagnostics pretty-printed in code blocks, and a link to the live pin on the page. Triage from your usual workflow.

Tickets are attributed to the QA member who reported them. No anonymous bots.

linear.app · PRE-1514
Chart not loading on SafariIn Triage
Device: macOS · Safari 19.2 · 1440×900
URL: app.example.com/dashboard
JS Error: TypeError: chart.render is not a function
Network: GET 500 /api/metrics (342ms)
Session replay · 30s before report
JasonReported by Jason · just now
5Fix

Your AI agent ships the patch.

Plug the MCP server into Claude Code, Cursor, Windsurf or VS Code. Type "fix PRE-1514". Your agent reads the ticket, opens the right file at the right line (thanks to the captured HTML context), proposes the diff, and ships the PR.

One install command. Works with any MCP-compatible client.

claude code · feedbug-mcp
$ fix PRE-1514
→ Fetching ticket from FeedBug...
· Component: MetricCard
· Error: chart.render is not a function
· File: src/components/MetricCard.vue:42
→ Reading MetricCard.vue...
Diagnosis: chart.render() called before DOM mount
✓ Patch applied
Moved chart.render() inside onMounted().
+ 3 lines · - 1 line · src/components/MetricCard.vue
→ Opening PR...
✓ #428 ready for review

Ready in two minutes.

One script tag. Your team clicks the bug, your devs ship the fix.