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 (...
Go, React, and MongoDB, OH MY
I’m not sure if I was just incredibly green or if the process has gotten significantly easier but releasing apps to the App and Play store is not nearly as big an ordeal as it once was. Thankfully, xcode even manages keys for you so iOS is arguably easier to work than Android. However, deploying Android apps is still a straight-forward process. In it’s infinite wisdom, the YouTube...
Up And Running With Vagrant And Docker
It’s not uncommon for a new developer to join a project and be required to set up a local dev environment. Depending on the company, there may be little instructions about how they want him to do this. More often than not the most straight-forward way to get this dev environment up and running is to install an XAMP server, then download the latest files from production and copy...
Simplify Your Life With Git Hub Feature Branching
Recently I started working on a fairly complicated, high-volume Magento website. This website had a development and a production server and the client was juggling several different modifications at once in an effort to boost their sales and improve the customer experience. The problem was, that there was only one development server and they would often like to go back and forth...