Bug reports that arrive already answered.
One line of JavaScript puts a report button on any site. When a tester files something, it comes with the browser, the screen size, the console errors, the failed requests and what they clicked — so nobody has to ask.
<script src="https://bugs.compass.st/v1/widget.js" data-key="pk_…" defer></script>No package to install, no framework, no build step. It works the same on a React app, a WordPress theme and a legacy admin panel.
The tester writes a sentence. The report writes itself.
- Page
- URL, title, referrer, and your build number if you publish one
- Browser
- User-agent, engine, platform, language
- Screen
- Viewport, screen, pixel ratio, orientation, zoom, scroll position
- Preferences
- Dark mode, reduced motion, forced colours
- Clock
- Timezone and offset — why "yesterday" means different things
- Console
- Errors, warnings, uncaught exceptions with stacks, failed rejections
- Requests
- The last 40 fetch/XHR calls with status and duration
- Actions
- Recent clicks, field changes and navigations
- Network
- Connection type, downlink, round-trip time
- Server-side
- IP, country, network operator, TLS version — added by us, so the page can't fake it
The trail records that
input[name=cardNumber] changed — never the value. Field contents are
where passwords, card numbers and personal data live, and a bug report travels by
email and sits in a database. The field name is enough to reproduce it.
Testers can see it too
The panel has a "what gets sent automatically" disclosure, so whoever files a report can read exactly what goes with it before they press send.
Built to sit on software you didn't write
It can't break your page
The whole interface lives in a closed shadow root, so your CSS can't reach in and ours can't reach out. Every hook calls through to the original and returns exactly what it returned.
Screenshots, if they want
The tester can capture the tab, upload an image, or paste one straight into the description. Always their choice, never automatic.
Collects from load, not from click
By the time somebody decides something is wrong, the error already happened. The console and network buffers start filling the moment the page loads.
Locked to your domains
Each project has an origin allowlist and its own rate limits. The key in your page is public by design and can only ever write — it reads nothing back.
Keyboard and screen-reader ready
Opens on a hotkey, traps focus while open, closes on Escape and puts focus back where it came from. Dark mode follows the host page.
Reports expire
Ninety days by default, then they're deleted along with their screenshots. Anything worth keeping gets pinned.
Tell us what you're testing
We built this for our own projects and we're setting it up for others one at a time — it isn't self-serve yet. Tell us what you're working on and we'll get you a key.
By sending this you agree to our Terms and Privacy Policy. Submitting also records your IP address, country and browser user-agent alongside your message — the ordinary technical information any web request carries.