While this page outlines my preferred tech stack, I am always open to learning new languages, frameworks, databases or other technologies that assist in delivering applications or websites. If it weren't for my eagerness to learn and evolve, half of these items wouldn't even be in my list.
PHP
The PHP scripting language has come a long way since I first started using it. While there are many web languages available, I have stuck with PHP for a long time because it still enables me to develop and deploy quickly and solve the kinds of problems I enjoy solving.
Craft CMS
Craft CMS has been my preferred content management system since its launch. I was fortunate enough to get access to alpha and beta versions of the CMS in the early days and have been able to watch it mature into the amazing publishing platform it is today.
Craft allows me to design content schemas that make sense. It makes no assumptions about my content or how it is presented on the front end. It provides me with the ideal amount of flexibility that still enables me to develop quickly.
Laravel
Laravel has been my go-to PHP framework for web application development since the release of Laravel 3. That was a long time ago. While it has changed a lot since Laravel 3, the framework remains well-documented and enables me to rapidly develop prototypes or full-blown web applications without having to spend silly amounts of time solving technical problems that have already been solved thousands of times over.
Laravel Jetstream introduced me to Inertia JS and also got me more interested in Vue. Laravel's Vue starter kit has proven to be even better with the inclusion of the shadcn/vue component library.
Vue / React
I lumped these two together because they are similar in their purpose and I enjoy using either one. Given the choice, I tend to lean towards Vue over React but I think both are great options for developing progressive web applications.
I'll give Alpine.js an honorary mention because it is a great alternative to Vue/React for sites that don't need to be developed as full-blown progressive applications. Alpine.js is a great library for creating drop-in progressive components when necessary.
Tailwind CSS
It is pretty hard to be a mostly back-end web developer without ever having to step foot on the front end. Tailwind's utility class approach has made it easier for me to style front-end components faster than the old days of writing very specific CSS classes for components. The utility class approach allows me to reuse and tweak front-end components I find on sites like Tailblocks or Landingfolio. Hey, I am not a designer and I don't feel like reinventing the wheel.
When I do want some reusable classes for basic components such as menus, buttons or other form inputs, I pair Tailwind CSS with a library such as Daisy UI.
Vite
From Grunt to Gulp to Webpack to Vite. I couldn't stand Webpack but I love Vite for building my assets. It is super fast and is easy to set up in any of the types of projects I do.
DDEV
Using DDEV to provision my local development environments has been a game changer. I no longer use full-blown virtual machines or MAMP. Whether I am working on a Craft CMS website or a Laravel web application, I use DDEV for my development environment.
DDEV also makes it super easy to run Vite in the background of my development environments.
Visual Studio Code (VS Code)
My preferred code editor these days is VS Code. It was a pretty natural transition for me coming from Atom and Sublime Text before that. I tend to disable many of the bells and whistles in my code editors because I find many of the IDE tools to be very distracting or even intrusive. If I have to fight against the editor software in order to get what I want, then the software is doing too much. I feel the same way about any kind of software, for that matter.
I also tend to avoid editors that are tailored towards a single programming/scripting language. Being able to use the same editor for any kind of coding project I do reduces the learning curve and makes it even easier for me to switch gears when I need to.
Claude Code
I keep my agentic-assisted development to a minimum but it can come in handy in tricky situations or when debugging a codebase I didn't write.
Want to add to my preferred tech stack?
I have a proven track record with PHP/MySQL, Craft CMS and Laravel and I am always eager to add more pieces to my tech toolbox.