Ship to main.
Work lands directly on main behind an automated test gate — no approval queues, no theater. You'll see your code in staging minutes after you push, and you own it end to end.
Catch is a small, remote-friendly team building one tiny SDK for in-app feedback, surveys, and crash reports — 4kb gzipped, zero runtime deps, shipped straight to main. No roles are open today. We're telling you anyway, because the people we want rarely arrive on a job posting's schedule. Drop us a note at @catch.dev.
A button doesn't fire. A checkout silently throws. A user shrugs and leaves — and no one on the team ever finds out why.
That's the default state of most software. Errors happen in production, on devices you'll never touch, and the signal almost never makes it home. Teams learn about it from a one-star review, a churned account, or never. We think that's fixable — and that the fix should be small. Not another heavyweight agent that bloats the bundle it's meant to protect, but one tiny SDK that captures feedback, surveys, and crashes, wires them together, and gets out of the way.
Building that well is unglamorous, careful work: shaving kilobytes, symbolicating stack traces, making a Shadow-DOM widget that never collides with someone else's CSS. If that kind of craft sounds satisfying rather than tedious, you'll recognize yourself in the rest of this page.
We're optimizing for shipping product, not process. These aren't aspirations — they're how the repo actually runs today.
Work lands directly on main behind an automated test gate — no approval queues, no theater. You'll see your code in staging minutes after you push, and you own it end to end.
We default to mature, proven tech over the new and shiny: UIKit over SwiftUI, fetch over axios, a 100-line view over a framework. Optimize for the next reader.
Every dependency is a liability we'd force on our users. The SDK is 4kb gzipped with zero runtime deps, and we keep it that way on purpose.
A tiny team means you own whole surfaces — SDK, backend, dashboard — not a sliver of a ticket queue. Scope is yours; so is the outcome.
We don't fabricate metrics, fake testimonials, or ship dark patterns. Our legal pages are drafted from verified facts. If a claim isn't true, it doesn't ship.
Tenant isolation is enforced at compile time — a query that forgets the tenant filter is a type error. The security of what we've built is never the thing we cut.
We're early-stage and we'd rather under-promise. Here's what's genuinely on the table today — and what we won't pretend to offer yet.
Work from wherever you do your best thinking. We already ship across 12+ countries.
Few enough people that your work is load-bearing and visible, and your judgment is trusted from day one.
Pick up the backend, the Nuxt dashboard, or a native SDK and own it — not a sliver of it.
Push to main, the test gate runs, staging deploys. Feedback loops measured in minutes, not sprints.
Tenant-isolation guards in the type system, tests as the safety net, and a hard rule against clever code. You'll enjoy reading it.
No layers between you and the person setting direction. Disagree, propose, decide.
// We don't list benefits we don't have yet. Equity, formal leave, and the rest get built as we grow — ask us where things stand. Real comp happens in a real conversation, not an inflated range posted here.
We respect your time the way we respect bundle size — we keep it small. No eight-round loops, no free-weekend projects. When a role opens that matches an introduction we've kept, here's the whole path.
Send a note via the help center: what you'd want to own and a link or two to something you've built. No cover-letter theater.
Every introduction gets read by someone on the team, not a filter. If there's a spark, we reply to start a conversation.
A call about the work, the trade-offs, and whether the fit is real both ways — how we think about tiny SDKs, tenant isolation, and shipping to main. You're interviewing us too.
A short, paid, realistic problem from our actual domain — not a leetcode marathon. The best signal for everyone, then a clear yes or no, fast. We don't ghost.
We don't post jobs to look busy. We hire when a real need appears and the right person is in front of us — usually in that order. When the work and the person line up, a role appears here, and the people who introduced themselves early are the first we call.
Or see what we're shipping in the changelog.
No invented metrics, no logo wall we can't back up — just the true footprint of what a small team has already shipped.
"I joined when there were no open roles. I just sent a note about a Shadow-DOM bug that had been bugging me — and ended up owning the whole web SDK. [ Your story goes here. ] We'd rather leave this blank than fake it."
// placeholder — we don't fake testimonials. The first real one is yours to write.
If you read this far, you're probably our kind of person. Tell us what you'd want to build — and why a 4kb SDK that catches everything is worth your next few years. We read every note that comes in.