DEV Community

slawekluzny
slawekluzny

Posted on • Originally published at fixflex.co.uk

The Night I Built Sentinel: A Story of Bots, Breakdowns, and Breaking Through

The Night I Built Sentinel: A Story of Bots, Breakdowns, and Breaking Through

It was 3am when I woke up to the alert. My server was under attack.

I opened my laptop, stared at the screen, and felt that familiar sinking feeling in my gut. SSH was timing out. The CPU usage graph looked like a heart attack—flatlining at 100%. Something was wrong.

This wasn’t the first time my server had been hit by bots. But this wasn’t a casual scan or a low-level probing. This was a full-on assault.

By the time I got into the hosting panel, the damage was already done. My contact form had been hammered. Emails had been sent out in a matter of hours. My IPs were blacklisted. My server was toast.

I spent the next week in a fog of exhaustion—days on the construction site, nights trying to salvage what was left. Rate limiting, CAPTCHA, SPF records, DKIM—all the things I should have done before the attack, not after.

But in that mess, something clicked. I started making a list of everything that had gone wrong—everything that could go wrong. And I realised: I didn’t just need to fix this. I needed to prevent it.


The Birth of Sentinel

Sentinel didn’t start as a product. It started as a script. A crude, ugly thing that ran core monitoring roughly every 5 minutes via a long-running systemd daemon with APScheduler interval jobs—cron was intentionally avoided to keep the crontab clean and uncluttered—and checked a list of things:

  • Is the database running?
  • Are the SSL certificates valid?
  • Is the CPU spiking?
  • Are the bots hammering the contact form again?

It wasn’t impressive. But it worked.

Over time, it grew. A dashboard here, a fleet view there. Integration with Fail2Ban. AI-powered checks for anomalies.

Today, Sentinel is one of our core offerings. It’s running on our servers, and it’s running on other people’s servers too. What started as a desperate fix became a product.


Why I Ditched Laravel

I didn’t hate Laravel. But I didn’t understand it either.

The codebase I inherited was a patchwork quilt of freelancer decisions—shortcuts, half-working features, and choices that made sense to someone, somewhere, at some point. But not to me.

So I rewrote it.

From scratch. A modern stack for a platform that needed to be fast, clean, and scalable.

It wasn’t easy. It took months. But when it was done, I understood every line of code. Every decision. Every fix.


The AI Shift

I wasn’t always good at this.

Years ago, I couldn’t tell you what SSH stood for. Today, I’m building SaaS products that people pay for.

The difference? AI.

Not as a crutch, but as a collaborator.

With tools like Claude, I could think out loud. I could describe a problem—badly, imprecisely—and have the imprecision noticed and questioned. I could ask why, not just how.

I learned to verify before implementing. To trust my instincts when something felt off. To push back when the AI suggested something technically correct but fundamentally wrong.

That back-and-forth—human judgment combined with AI capability—was what made the difference.


The Products That Came From Chaos

I didn’t set out to build a company.

Sentinel started as a fix for my own server. 24ad.info started as an idea on a construction site. PostPilot—they all started as tools I needed to solve problems I faced.

Today, they’re products. Real ones. With pricing, documentation, and customers.


The Lessons I’ve Learned

  1. Tools matter less than you think. Find what fits how you work. I tested several different servers, each handling what it did best, but ran into conflicts. Caddy was chosen only after testing as the best overall fit. I stuck with it because it worked.

  2. Breaking things is the education. The things I remember most clearly are the things that went wrong.

  3. AI is a collaborator, not a replacement. The code is better when I understand it. The solutions are better when I push back.

  4. Shipping beats perfecting. Every product I have is imperfect. Every product I have is live.

  5. The story is the product. Authenticity is the differentiator.


The Invitation

If you’re reading this and you have an idea you haven’t started because you don’t have the technical background—start.

Not with a plan to learn everything first. Not with a commitment to do it properly before doing it at all. Just start.

The knowledge follows the doing.

I didn’t learn to manage a server and then build products. I built products and learned to manage a server because I had to.

The credential doesn’t come before the work. It comes from it.


"I don’t know programming languages at an expert level. I don’t need to.

I imagine, describe, verify—AI codes. I decide."

— Slawomir Luzny

Founder, FixFlex LTD • West London

Top comments (0)