I was just a Laravel dev who wanted to know when his app broke. The pricing pages said no. So I built my own error tracker.
I was three clicks deep into Sentry's pricing page when I did the maths on what monitoring my side project would actually cost. The side project that makes, on a good month, enough to cover its own hosting. Forty bucks a month to watch for errors on an app that serves maybe two hundred people.
I closed the tab.
Tried Flare. Nicer for Laravel, sure. Still felt like I was paying enterprise rent on a studio flat. Nightwatch? Same energy. Every single one of these tools is built for a team with a Jira board and a VP of Engineering and a budget that doesn't make someone physically wince. I'm just a bloke with a Laravel app and a DigitalOcean droplet. I only need to know when something breaks.
That's it. That's the whole requirement. When a thing goes wrong, tell me about it. Maybe group the errors so I'm not drowning in five hundred copies of the same stack trace. Maybe send me a Telegram message so I notice before my users do. The bar is, honestly, not that high.
So of course — of course — my brain did the thing. You know the thing. The thing where you're a developer and you look at a problem and instead of paying someone to solve it, you think: I could build this.
This is almost always a terrible idea. I know this. You know this. We all know this. And yet.
I opened a blank Laravel project on a Tuesday evening. Told myself I'd just prototype the ingestion endpoint. See if I could catch an exception from another Laravel app and store it. Two hours, tops, then I'd come to my senses and just pay for Flare.
That was months ago.
The thing I built is called Oopsy, and it's a proper laravel error monitoring tool now, which still surprises me a bit. TALL stack — Tailwind, Alpine, Livewire, Laravel - because that's what I know and I wasn't about to learn React for this. Domain-driven design because the codebase started getting messy around week three and I needed to impose some order before I lost my mind.
Here's what it actually does. On the PHP side, you run composer require on a small Laravel package. It hooks into the exception handler, captures the stack trace with code context, grabs request and user info, collects breadcrumbs from your logs and queries, then fires it off asynchronously. Your app doesn't slow down, doesn't crash if Oopsy is unreachable. It just quietly reports what went wrong.
The bit I'm weirdly proud of is the JavaScript error catching. You add a single script tag. That's it. No npm install, no build step, no configuration file with forty options. The script captures uncaught exceptions, unhandled promise rejections, parses stack traces across Chrome, Firefox, and Safari (which all format them differently, because browsers hate us), records breadcrumbs of what the user clicked and what network requests happened, then sends everything via sendBeacon so it doesn't block the page unload. I spent an embarrassing amount of time getting sendBeacon to work without CORS preflight requests. The trick is sending as text/plain. Anyway.
Errors get grouped by fingerprint — a hash of the exception class, the file, and the line number from the first non-vendor stack frame. So when your PaymentController throws the same StripeException forty times in an hour, you see one issue with a count of forty, not forty separate issues cluttering up your dashboard. You can filter by severity, by environment, by whether it came from PHP or JavaScript. You can mark things resolved, and if they come back, they automatically flip to regressed.
It's laravel error monitoring without the complexity tax. That was the whole point.
Then came the pricing question, which felt strange from the other side. I'd started this project because pricing annoyed me, and now I had to set prices myself.
I kept it simple. Free tier gives you a thousand errors a month, one project, seven days of retention. For most hobby projects, that's probably enough. For five dollars a month — the Hobby plan — you get fifty thousand errors, five projects, thirty days. And if you're running something more serious, nineteen dollars a month gets you half a million errors, unlimited projects, ninety days of retention, unlimited team members.
I don't know if those numbers are right. I genuinely don't. Maybe the free tier is too generous and I'll bleed money on infrastructure. Maybe the Pro tier is too cheap and I'm leaving money on the table. But I kept coming back to the feeling I had on that Sentry pricing page — that sinking this isn't for people like me feeling — and I figured I'd rather err on the side of affordable.
(There's a joke in there about erring on the side of errors. I'm choosing not to make it. You're welcome.)
The honest bit, the bit I almost didn't write: I have no idea if this works as a business. The economics of running a laravel error monitoring SaaS are not straightforward. You're ingesting potentially huge volumes of data, storing stack traces and breadcrumbs, running background jobs to process and group everything. The free tier users generate real costs. Hosting isn't free. My time isn't free, even though I keep pretending it is.
But it works as a tool. I use it on my own projects. When something breaks at 2am, my phone buzzes with a Telegram message that tells me exactly what happened, which file, which line, what the user was doing. I fix it in the morning. Nobody writes me an angry email.
And look, maybe that's enough for now. Not everything has to be a venture-scale business. Sometimes you build a thing because the existing options made you feel like you couldn't afford to be a professional developer, and you think other people might feel that way too. Sometimes the "I could build this" impulse, against all odds, produces something that actually works and that you're actually a little bit proud of.
Sometimes the terrible idea turns out fine.
Oopsy is at oopsy.dev if you want to poke at it. Free tier, no credit card, takes about two minutes to set up. If you're doing laravel error monitoring on a budget — or just on principle — maybe it's useful to you. Maybe it's not. I'm not going to pretend I've solved monitoring forever.
I just wanted to know when my app broke.
Dan
Top comments (0)