The Daily
A note a day on APIs and the realities of shipping web applications. Stuff I've actually learned across 25 years of doing the work.
The $50/mo SaaS Trap: When Buying Costs More Than Building
That $50/mo tool looks cheap until you factor in the integration tax, the vendor lock-in, and the afternoon I spent migrating a client off one.
The pitch is always the same: why build it when you can pay $50 a month for something that already exists? Nine times out of ten, that's genuinely good advice. The tenth time, you end up three months later with a client paying $600 a year for a tool that does 70% of what they need, locked into an API that changed…
Read the daily →PHP-FPM Slow Log vs. MariaDB Slow Query Log: You Need Both
Two slow logs, two completely different blind spots. Here's what each one actually catches and why running only one gives you a false sense of confidence.
Most developers know about the MariaDB slow query log. Fewer bother with PHP-FPM's slow log. And almost nobody I've talked to understands that the two instruments measure completely different things — which means relying on only one leaves you half-blind when production starts dragging. I've been burned by this more…
Read the daily →MariaDB Table Partitioning: When It Helps and When It Doesn't
I partitioned a 200M-row audit table expecting a miracle. I got a lesson. Here's what actually works and what just shuffles the pain around.
I've been burned by table partitioning twice in the last five years — once it saved a client's reporting pipeline, and once it made things measurably worse. The difference wasn't the feature, it was whether I actually understood the query patterns before I reached for the hammer. If you're staring at a or table that's…
Read the daily →SendGrid's Click Tracking Rewrites Your URLs — Here's Why That Bites You
SendGrid's click tracking silently rewrites every link in your emails through their redirect domain. That's a DMARC problem and a user trust problem you need to know about.
I've been sending transactional email through SendGrid for years across probably a dozen client projects. It works well enough that I mostly set it up and move on. But click tracking has a quiet behavior that has caused real headaches — once for a healthcare client whose IT security team flagged it, and again when I…
Read the daily →Laravel Vite in Docker: The Manifest Race and Why Build Context Matters
Vite and Docker seem simple until your assets 404 in staging and you're staring at a manifest.json that may or may not exist yet.
Vite's Laravel plugin is genuinely good when it works, and genuinely maddening when it doesn't. The failure mode I've hit most often isn't the code — it's the container build order and what ends up (or doesn't end up) in when PHP tries to read the manifest. What Problem Vite Actually Solves Here Before Vite, Laravel…
Read the daily →