Most people think world-class service is about fast response times, flawless communication, or throwing in extra perks to “wow” customers. While those things are nice, they aren’t the heart of true service. World-class service is about ensuring your customer’s success—even when it means telling them no. I’ve been a self-employed software developer for over a decade, writing LAMP stack...
New Layout
I’ve decided to switch it up both visually and from a tech perspective. I’m back to using WordPress from using Gatsby. No real reason other than I’ve started offering more WordPress hosting and want to eat my own dog food.
How I Actually Use AI to Code Faster
There’s still a lot of talk about vibe coding. I’ve written about it before, but after watching the Cursor and Claude drama on Twitter, I realized my approach might not match the noise. Programming languages are like spoken languages. There are infinite ways to say or build something, but only a handful of those ways are worth using long-term. Anyone can hack together a feature, but there’s a big...
What I’ve Learned Building My SaaS Since September
When I started building this SaaS in September, I didn’t even want to launch a SaaS. I was working with a local client who had a tight budget and was using a mess of disconnected services that refused to talk to each other. None of them offered a usable API. I realized the only way to get them what they needed was to build something myself. That was the spark. Writing Code Was Less Than 40% of...
Deep State vs Client State: Who’s Really in Control
Who’s running your app — your server, your client, or a silent third party you forgot you even wired in? As I’ve been revamping the API layer for ManageMemberships, I’ve started seeing how layered and political “state” really is. You’ve got tokens, hashes, cookies, headers, and sometimes ghosts from past refactors — all arguing over who gets to say what’s true. This post breaks down some of...
It Works for Me. That Doesn’t Matter.
Yesterday I had one of those moments that every developer dreads. A client using ManageMemberships said a customer couldn’t sign up through the form. I checked the logs—nothing weird. I signed up myself on my phone using a real card—worked perfectly. The client followed up, saying it still wasn’t working. The member got an error message that said “contact info updated.” That exact...
Vibe Coding: When AI Helps You Build Fast — and When It Slows You Down
“Vibe coding” is becoming the default for a lot of developers — and for good reason. When the right tools are in place, you can hit the ground running and move fast. Frameworks like Laravel and Filament paired with AI tools like GitHub Copilot let you focus on building features instead of boilerplate. Code almost writes itself. Development accelerates. And surprisingly often, maintainability...
Weekend Destroyed with PHP Streams
I was going to give this a different name but that would violate the terms of service of the inspiration of this post. IYKYK. This weekend I was taken deep into the darkness that is serialization attacks, gadgets, and rce via iconv. This was part of a puzzle of sorts. It boiled down to a challenge to try to exploit the following: <?php $data = file_get_contents($_POST['file']); if (...
Apple, Driving innovation by being difficult
I’ve been working on adding access control functionality to ManageMemberships. On its surface, it seems like a simple problem. For the first iteration I was wanting to use bluetooth (per the client’s request) to communicate with an esp32 which would then check authentication and allow some sort of electronic lock to disengage. The ESP32 is fantastic and supports bluetooth and wifi out of the...
Skill issue or efficient? Go concurrency and network connections
I was helping a client on a project that involved syncing nzbs between usenet networks. There were open source solutions that did this on a smaller scale, but he wanted to have several terabytes of mirroring happening 24/7. One issue was trying to daemonize these already available services. They all leveraged go’s concurrency to great success but invariably there would be lots of hiccups...