Larkfield Analytics used to learn about broken charts two ways, both bad: a Slack DM with a blurry phone photo, or a customer quietly churning a month after the error that scared them off. Now bug reports arrive with an annotated screenshot and the exact page path, and errors show up in the same dashboard the moment they happen — they wired both into their React app in one afternoon, and caught their first error about five minutes later.
Larkfield is a seed-stage analytics startup — twelve engineers, a single React single-page app that renders dashboards over customers' data. The product is charts, so the failures are visual: a filter that silently drops a row, an axis that flips, a number that's off by a comma. Two gaps made those failures expensive. There was no structured way for a user to say "this chart looks wrong" — they got the occasional Slack DM, screenshotted on a phone, with no page URL and no idea which filter was applied. And on the error side, they only found out something had broken when a customer mentioned it, or didn't, and left.
As a team of twelve, the last thing they wanted was five vendors — one for feedback, one for errors, one to glue them together. They wanted one place to look.
They added two Catch SDKs to the same app in an afternoon. For errors, @catch.dev/react — npm install, drop in the access token, and frontend exceptions started grouping into issues, sorted by how many users each one hit. For feedback, the @catch.dev/feedback widget, about 8 kB gzipped, rendered in a Shadow DOM so it couldn't collide with their chart CSS. A user clicks the floating launcher, the browser captures the current tab, they draw a circle around the wrong number, type a sentence, and send.
import { CatchDev } from '@catch.dev/feedback';
CatchDev.start('ck_your_key', { environment: 'production', shortcut: 'ctrl+shift+f' });
Both report into the same dashboard, under the same App. A bug report and the error it came from sit side by side — the user's annotated screenshot next to the stack trace from the same page.
The honest rough edge: the screenshot uses the browser's native screen-capture, which needs an HTTPS page, a click, and a one-time "share this tab" permission prompt. On mobile browsers it isn't available, so the reporter falls back to a text-only note. Larkfield decided the tab-share prompt was a fair trade for not shipping a heavy DOM-rasterizing dependency, and most of their users are on desktop anyway.
What changed was the shape of the inbound. Bug reports went from a rare, low-context Slack DM to a steady stream — each one carrying the annotated screenshot and the page path, so an engineer can open the exact view without a back-and-forth. The week after launch, an error spike flagged a filter that had quietly broken for a subset of accounts; they saw it in the dashboard and shipped a fix before the affected customer wrote in. Time to first captured error was about five minutes. Setup for both SDKs was one afternoon.
The part that stuck was having both in one view. "The thing I didn't expect was that errors and feedback finally live in the same place," said Dev Okafor, a founding engineer at Larkfield. "Someone reports a chart looks wrong, and the error that caused it is right there underneath. I'm not stitching two tools together at eleven at night anymore."
Next, they're wiring the feedback widget's keyboard shortcut into their internal QA flow so testers can file a report mid-session without hunting for the button, and they're tagging environments so staging noise stays out of the production inbox. For a team of twelve, the win wasn't a dashboard — it was deleting the half-built glue they never had time to maintain.