the blog
What AI leaves open.
Plain-English writing on the security holes AI coding tools leave behind, and how to close them.
April 23, 2026 · 4 min read
I Turned On 'Auto-Approve Everything' for a Weekend, to Move Faster. That Was the Whole Mistake.
Reviewing every single change an agent proposed felt like it was slowing me down on a deadline. Turning that review off for two days is the part I'd take back if I could.
Read itApril 22, 2026 · 4 min read
Building on a Reputable Platform Doesn't Mean You Inherited Its Security Team
Vercel, AWS, and similar platforms invest heavily in securing their own infrastructure. None of that reaches the access rules, keys, and logic you specifically configured on top of it.
Read itApril 21, 2026 · 4 min read
Does Your Cookie Banner Actually Do Anything, or Just Display Something?
A lot of consent banners look correct and don't actually stop anything from loading before someone clicks accept. That gap defeats the entire purpose of having one.
Read itApril 20, 2026 · 5 min read
Two Separate Lovable Incidents Became Public This Week. They're Not the Same Bug.
One exposed chat history and source code to any authenticated user, fixed in two hours. The other, a permission flaw reported 48 days ago, is still unpatched for older projects as of today. Worth keeping them straight.
Read itApril 19, 2026 · 5 min read
Your Chat Feature's Real-Time Connection Might Not Be Checking Who's on the Other End
A websocket connection stays open for the life of a session, which makes it easy to authenticate once and never check again. That gap is exactly where a live chat or dashboard feature can quietly leak.
Read itApril 18, 2026 · 4 min read
Clearing a Backlog of Security Debt vs Never Letting It Build Up in the First Place
One is a bigger, scarier project you keep postponing. The other is a small habit attached to every feature you already ship. Only one of them actually tends to happen.
Read itApril 17, 2026 · 4 min read
Do You Have to Tell Future Customers About a Security Incident You Already Fixed?
It feels safer to just not bring it up. In practice, how you handle a past incident says more about whether you can be trusted with new data than the incident itself usually does.
Read itApril 16, 2026 · 4 min read
The Apps I'm Seeing Now Look Different Than the Ones From January
Not just more of them. More ambitious ones: real payment flows, real customer data, features that would have felt advanced to attempt solo a year ago. The stakes per app are quietly climbing.
Read itApril 15, 2026 · 4 min read
That 'Are You Sure?' Dialog Might Be the Only Thing Stopping a Dangerous Action
A confirmation popup in the interface feels like a safety check. If the actual permission check lives only in that popup and not on the server behind it, it's decoration, not protection.
Read itApril 14, 2026 · 4 min read
AI Website Builders Have a Smaller Attack Surface Than App Builders, Not a Zero One
Tools that generate a marketing site or a portfolio from a prompt carry a genuinely different, usually smaller, risk than tools that scaffold a full backend. Smaller isn't the same as nothing to check.
Read itApril 13, 2026 · 4 min read
The Demo Environment We Showed to Prospects Was Quietly Running on Real Customer Data
Setting up a sandbox felt like extra work we didn't have time for, so the demo just pointed at production with a few accounts we called 'test.' Nobody planned it that way. It just ended up that way.
Read itApril 12, 2026 · 4 min read
"It's Just a Script Tag" Undersells What a Third-Party Widget Can Actually Do
A chat widget, an analytics snippet, a review embed. Each one you paste into your site runs with almost the same access to the page as your own code, whether or not that feels true.
Read itApril 11, 2026 · 4 min read
Your Cron Job Doesn't Have a Login Screen. It Still Needs the Same Scrutiny.
Background jobs and scheduled tasks run without anyone clicking anything, which is exactly why they often skip the access checks every user-facing feature gets, even though they can touch just as much data.
Read itApril 10, 2026 · 4 min read
What Actually Gets Checked When You Submit to an App Store, and What Doesn't
App review catches a specific, narrow set of problems. It was never designed to catch the access-control mistakes that cause nearly everything else on this blog, and it's worth knowing exactly where that line sits.
Read itApril 9, 2026 · 4 min read
What a Publicly Listable Storage Bucket Actually Hands Someone
Not being able to guess a file's name doesn't matter if someone can just ask your storage to list every file it has. Two different settings, and only checking one of them.
Read itApril 8, 2026 · 4 min read
Should You Build Your Own Login System, or Use One Someone Else Already Built?
Auth feels like a small enough feature to just build yourself. It's also one of the most consequential parts of any app to get subtly wrong, and that combination is worth thinking through before you start typing.
Read itApril 7, 2026 · 4 min read
How Much of a Small Startup's Budget Should Actually Go to Security?
There's no universal percentage that fits every app. There is a reasonable way to think about the question, based on what you're actually holding rather than an arbitrary line item.
Read itApril 6, 2026 · 4 min read
A Year of These Stories In, Here's What I've Actually Noticed About How Founders React
Not panic, and not denial either. Something closer to a quiet, growing habit of asking one extra question before launch, which is exactly the shift that actually moves the needle.
Read itApril 5, 2026 · 4 min read
Is Anything Stopping a Script From Filling Out Your Public Form a Thousand Times?
A contact form, a waitlist signup, a review submission. Anything public-facing that accepts input is a target for automated spam unless something specifically stops it, and most fast-built forms have nothing at all.
Read itApril 4, 2026 · 4 min read
Your No-Code Database Tool Has a Sharing Setting, and It's Probably Looser Than You Think
Airtable, Glide, Notion, and similar tools make it easy to turn a spreadsheet-like database into a real app with a shareable view. That shareability is exactly where the risk lives.
Read it