Valet-Linux on WSL Ubuntu: Windows 11

This article will assume you have Ubuntu 24.04 installed on your Windows 11 computer via WSL. You should understand the basics of Ubuntu’s package manager apt, as well as the basics for terminal usage. Valet is Laravel’s tool for local development. It simplifies managing Nginx and PHP when working on multiple projects. I’ve always used […]

WireGuard VPN for an open NAT (wg-easy)

What Is NAT? In the words of a brief Google search: “NAT stands for Network Address Translation, a service that allows private networks to use the internet and cloud. It works by translating private IP addresses to a public IP address before sending packets to an external network.” To translate that description to the problem […]

Dockerise Django and NPM with Multi-Stage Builds

Introduction I’ve recently started learning Django, the popular web development framework for Python. Until now, as a PHP developer, I’ve been rather spoiled with the ease of deploying projects thanks to software such as cPanel or Plesk. Having reached the stage of wanting to deploy my first Django project, I realised that Docker would be […]

Auto-refresh the Browser on File Save with Django

Introduction I’ve recently started learning Python’s Django framework and have brought my favourite JavaScript framework along with me: TailwindCSS. From a development standpoint, I find that TailwindCSS feels much more efficient when I don’t have to refresh the page every time I make a change. At first, I wasn’t entirely certain about how I could […]

How To Correctly Size WordPress Images

Introduction This is a bit of a minefield topic, as there are a lot of plugins and ‘solutions’ out there that require you to pay money or install bloated software to accomplish something WordPress is designed to handle. In this post, I will show you how to have WordPress generate specific sizes for your images […]

Hosting Updateable WordPress Plugins on GitHub

Introduction If, like me, you enjoy writing custom plugins for WordPress, you may know the daunting feeling of managing the versions of your plugins across many websites. While you can use a PHP package manager like Composer for your plugins, this isn’t appropriate for most WordPress deployments. For most, using WordPress’ interface to install and […]

Testing Laravel & Livewire in Github Actions

The Issue We’re Resolving When running a Laravel test suite with Livewire components, the default workflow file provided by GitHub for Laravel likely won’t pass. When using their default config, I was presented with errors such as this: The test in question was simply checking if the component was rendered when a certain page was […]

HTML Page Caching with WordPress & Cloudflare

HTML Caching vs Static Asset Caching If you use Cloudflare to proxy your website, you can take advantage of their various caching services. The most common one is static asset caching. Static asset caching refers to media such as images, CSS files and Javascript files. Between deployments and page reloads, these assets typically don’t change, […]

Remove the ‘Website’ field from the WordPress comment form

Introduction The default WordPress comment form contains the following fields: I’m not a fan of the website field, especially since it’s optional anyway. As such, I like to remove it from my blogs. This is a 3-step process: Remove the Website Field This code snippet uses the comment_form_default_fields hook to remove the url field from […]

Rebuilding a Divi website with a custom Block Theme

Introduction Before the 4th of July 2024, my website (yes, this one) exclusively used the popular WordPress theme Divi. You can read more about this build here. I’ve had a love-hate relationship with Divi over the years. When I was first learning the ropes of WordPress, I found Divi to be an excellent tool to […]