Website feedback, built for AI agents. For free.
A pin on your site becomes a real issue in the tracker your agents already read, with the screenshot, the console log and the exact viewport attached.
Three projects free, no credit card, no Cloudflare account. AGPL, so you can self-host it any time.
Set up Burnside Steps on my site. The repo is github.com/greenwichsteps/burnside-steps. Deploy the relay to my Cloudflare account, connect it to my Linear workspace, and add the widget to my site.
Set up Burnside Steps on my site. The repo is github.com/greenwichsteps/burnside-steps. Deploy the relay to my Cloudflare account, connect it to my GitHub repository, and add the widget to my site.
Set up Burnside Steps on my site. The repo is github.com/greenwichsteps/burnside-steps. Deploy the relay to my Cloudflare account, connect it to my GitLab project, and add the widget to my site.
Five steps, and the last one needs the admin panel. This is what the agent does for you.
pnpm --dir relay exec wrangler loginpnpm --dir relay exec wrangler kv namespace create CONFIG, then paste the id it returns intorelay/wrangler.jsoncpnpm --dir relay exec wrangler secret put ADMIN_SETUP_TOKENpnpm deploy- Claim the admin panel, add your tracker token and a project, then add the script tag to your site.
Or let us host it for you: free for three projects, $99 a year for Pro.
- AGPL, source on GitHub
- Runs on your own Cloudflare account
- Linear, GitHub, GitLab
- Free hosted tier, $99 a year for Pro
You are paying for setup.
The tools you would compare this against are hosted subscriptions, and most of what they charge is the cost of somebody else running a server for you, because self-hosting used to need an engineer.
It does not any more. Point a coding agent at an open source repo and the whole setup takes about ten minutes. So we open sourced ours, made the hosted version free for three projects, and charge $99 a year for the rest of it.
How it works
Your client clicks
A floating button on your site. They point at the problem, drop a pin, and type what is wrong.
Your relay files it
The relay checks the request came from your site, uploads the screenshot, and creates the issue. Your API token never reaches the browser.
Your agent picks it up
The issue arrives with the screenshot, the page URL, browser and viewport details, and a buffer of recent console entries. Enough for an agent to reproduce it without asking you a single question.
Or add it by hand once your relay is running:
<script src="https://your-relay.example.com/widget.js" type="module" data-project="site"></script>
Try it, then see what lands
The real widget is running on this page, not a sandbox on another domain. Click the button in the right rail, point at anything here, and send it. Nothing is filed.
Had it been live, this is the issue your tracker would have received. A native issue in the tracker your agents already read, not a notification and not a link back to our dashboard.
The Pay now button is there but you cannot see it until you scroll past it.
| Reporter | Priya |
|---|---|
| Type | Bug |
| Page | /checkout |
| Device | iOS · Safari |
| Screen | 390×844 @3× · pin at 62%, 31% |
Console log (14)
[2026-06-15T12:04:39.008Z] [log] checkout: rendering summary for cart 8812
[2026-06-15T12:04:41.220Z] [error] Uncaught TypeError: cannot read properties of null (reading 'offsetHeight')
[2026-06-15T12:04:41.221Z] [warn] layout shift 0.31 on #pay-now
The Type row is your own vocabulary. Define the tags that fit your work and they arrive as native labels on the issue, not as free text somebody has to tidy up later.
Every other tool in this category shows you screenshots of its own dashboard, because its dashboard is where the work goes. Ours is not. The page URL, the viewport, the pin position, and the console buffer are all there because that is what it takes to reproduce something without a conversation.
How it compares
Marker.io, BugHerd, Feedbucket, Userback, and Usersnap are good products with more features than this one. Here is the part they cannot match, and the part they beat us on.
| Burnside Steps | The others | |
|---|---|---|
| Run it on your own infrastructure | Yes | No |
| Buy it once, keep it | $79 | Subscription only |
| Read and change the source | Yes, AGPL | No |
| Dashboard access | One admin password, shared | Seat caps on entry tiers |
| People who can send feedback | Unlimited, no account needed | Unlimited, no account needed |
| Hosted, per year | $99 | Three to five times that |
| What we do not have | No session replay, no built-in board, three destinations | Session replay, boards, twenty or more destinations |
Among these tools we are the one you can run yourself. Self-hosted feedback tools do exist elsewhere, and if one of them fits you better, use it.
What it touches
Your token never reaches a browser
The API token for your tracker lives on your relay. The widget talks to the relay, the relay talks to Linear, GitHub, or GitLab. Nothing sensitive is ever handed to a visitor's page.
Self-hosted means we never see it
Run the relay yourself and feedback goes from your visitor to your Cloudflare account to your tracker. We are not in that path at all.
It stays out of your CSS
The widget's rail and popover live in a Shadow DOM, so their styles cannot collide with yours. During a screenshot only, a zero specificity stylesheet briefly normalizes bare form controls and then removes itself, and any style you already set still wins.
Pro is $79 once if you host it yourself, or $99 a year if we host it. Full comparison.
Questions
Do my clients need an account or a browser extension?
No. They click the button on your site, point at the problem, and send. There is nothing to install and nothing to sign up for.
Which trackers can it file into?
Linear, GitHub, and GitLab. Those three rather than twenty, because they are the ones coding agents actually read.
What does self-hosting actually involve?
One Cloudflare Worker. At normal volumes it runs inside the free plan, so self-hosting costs nothing beyond the account you probably already have.
Is my API token safe?
The token lives on your relay and never ships to the browser. The widget cannot read it, and neither can anyone viewing your page source.
What does this not do?
No session replay, no video or Figma review, no built-in board, and three destinations rather than twenty. If you need those, Marker.io and BugHerd are good products and we will happily point you at them.