Articles

Development writing worth keeping — WordPress and Laravel how-tos, PHP techniques, and front-end experiments. Older pieces are refreshed with a note on what's changed since, so the code still works today.

AI-Native CMS

Six Verticals, One Engine

A single CMS that produces six wildly different finished sites (allotment, charity, council, museum, scout group, theatre) by tuning an LLM per vertical.

26 May 2026

Castle, Wrapped in Type

Long-form editorial typography that recalculates sixty times a second to wrap around a 3D photogrammetry model of a Spanish castle.

26 May 2026
WordPress

WordPress vs Laravel: Choosing the Best Platform for Your Project (2026)

Matching the tool to the task

A practical, experience-led comparison of WordPress and Laravel — real project examples, admin and performance trade-offs, and how headless setups let the two work together.

WordPress 8 Aug 2025
PHP

Quickly & Reliably Handle Errors in PHP Code

Custom handlers and exceptions

How to handle PHP errors gracefully — from custom error handlers and logging to try/catch exceptions and debug modes.

PHP 16 Dec 2017
WordPress

Add Custom Columns to WordPress Admin Post Lists

Word count and contributor columns

Using the manage_posts_columns and manage_posts_custom_column hooks to add custom data columns — word counts and revision contributors — to the WordPress admin post list.

WordPress 28 Nov 2017
WordPress

Add Custom Content Above & Below WordPress Admin Post Tables

Extending the admin post list

How to inject small pieces of custom content around the WordPress admin post list table — a theme-based PHP template approach with a JavaScript fallback, plus the modern server-side hook that now does it natively.

WordPress 29 Nov 2017
WordPress

Adding Custom WordPress Admin Notifications

Transient-backed admin notices

A simple helper for queuing dismissible WordPress admin notices via transients, with optional CSS animation to make errors and warnings harder to miss.

WordPress 26 Nov 2017
WordPress

Setting Up a Reliable Local WordPress Workflow on Windows with Docker

Isolated, production-like WordPress on Windows

A step-by-step guide to running WordPress locally on Windows with Docker — juggling multiple projects, phpMyAdmin, bind mounts, ngrok sharing and the usual troubleshooting.

WordPress 11 Oct 2025
DevOps

Using git-ftp for Simpler Project Deployments via FTP/SFTP

Git-aware FTP/SFTP deployment

How to use git-ftp to deploy only changed files to FTP/SFTP-only servers, keeping deployment settings in version control — plus its limits and modern CI alternatives.

DevOps 8 Sep 2015
AI

Actionable AI: What the Heck is MCP and Why Should You Care?

Model Context Protocol, explained

What MCP actually is, why it matters, and how to wire LLMs into WordPress, Laravel, your desktop and even your Minecraft server — with every tool kept safely on a leash.

AI 22 May 2025
PHP

Convert HTML to PDF, Word & Excel with PHP

Export documents straight from HTML

Three quick tutorials for generating PDF, Word and Excel files from HTML in PHP, using Composer packages like DomPDF and PHPWord.

PHP 11 Dec 2023
Laravel

Laravel Blog Tutorial: Building a Responsive Livewire Blog

Pagination and instant navigation with Livewire

A step-by-step build of a simple Laravel blog powered by Livewire — models, migrations, seeders, full-page components and wire:navigate. Written for Laravel 10, with 2026 notes for Livewire 3 and Laravel 11/12.

Laravel 1 Dec 2024
JavaScript

The New Bun Runtime: Is It Really 2x Better Than Node.js?

Bun versus Node, benchmarked

A look at the Bun JavaScript runtime — JavaScriptCore, Zig, bundling and ESM — and whether it can really challenge Node.js. With a 'two years on' box on where things actually landed by 2026.

JavaScript 24 Apr 2024
JavaScript

Anime.js: 12 Solid Animated Demos With Real Impact

Twelve practical animation demos

A run through twelve practical Anime.js demos — hero entrances, radial counters, magnetic buttons, 3D card stacks and more — each showing a technique worth stealing.

JavaScript 19 May 2025
WordPress

15 Years a WordPress Developer: Insights & Essential Plugins

Why it still wins, and five must-haves

Reflections on a decade and a half of WordPress work: why it endures, the five plugins I reach for every time, and how hooks, the template hierarchy and custom post types make it so extensible.

WordPress 12 May 2023
CSS

The "Checkbox Hack"

Toggle CSS state, no JavaScript

The classic CSS checkbox hack — toggling states with :checked and the sibling selector, no JavaScript required — with its limitations and the modern :has() replacement.

CSS 1 Sep 2014
WordPress

Webflow vs. WordPress: Choosing Your No-Code/Low-Code Website Builder

No-code freedom vs open-source control

A look at the no-code movement and how Webflow stacks up against WordPress, from CSS-level design control to CMS depth, platform risk and where Elementor fits in.

WordPress 14 Jun 2023
Tooling

18+ Web Development Timesavers to Supercharge Your Workflow

Tools and tips for developers

A grab-bag of the tools, utilities and shortcuts I've leaned on over 15 years of web development, with 2026 notes on what's changed.

Tooling 20 Jul 2023
PHP

Combining PHP with HTML to Power Websites

Mix PHP into your HTML

How PHP and HTML combine to build dynamic pages — mixing tags, generating markup, reading query strings with $_GET and templating with includes.

PHP 1 Jun 2015
WordPress

WordPress Search & Replace with Search Replace DB

Fixing URLs after a site migration

The classic dev-to-live database gotcha — absolute URLs pointing at your staging server — and how to search and replace them safely across a WordPress database.

WordPress 1 Oct 2015
WordPress

WordPress Rewrite Rules: Routing for Pain-Free Permalinks

Decoupled routing beyond permalinks

Why WordPress rewrite rules struggle with complex URLs, and how framework-style routing gives you clean, decoupled control — with a flash-sale example and a raw Rewrite API appendix.

WordPress 1 Sep 2023
PHP

5 PHP DateTime to String Functions

Format dates and times in PHP

Five core PHP date and time functions — time(), date(), mktime(), microtime() and strtotime() — for formatting, generating and benchmarking dates.

PHP 18 Aug 2008
PHP

Understanding PHP Variables (Part 2): Operations, Constants, and Referencing

Operators, constants and references

Part two of the PHP variables series: arithmetic and precedence, constants, predefined variables, referencing by address and variable variables.

PHP 1 Sep 2015
Creative coding

Popcircles: A Dynamic Pop-Art Canvas Background Experiment

A pop-art background in canvas

A creative-coding experiment turning my site's circle motif into a living pop-art canvas background — plus honest notes on where the performance ceiling sits.

Creative coding 3 Aug 2023
CSS

Impossible Isometrics — An Experiment With CSS and Isometric Viewpoints

A Monument Valley scene, CSS only

Building an interactive, Escher-esque isometric structure — clouds, sun, moon and all — with pure CSS transforms and the checkbox hack, and no JavaScript at all.

CSS 1 Mar 2016
Creative coding

Iron Filings & Magnetic Fields Visualised With JavaScript

Magnetic fields in canvas and Pixi.js

Recreating the classic iron-filings-on-a-magnet experiment in the browser, using Pixi.js sprites animated by a real magnetic-field equation — good-enough engineering over pure maths.

Creative coding 1 Sep 2015
CSS

Creating a Text/Cursor Style Highlighted Effect With CSS

A punchier text highlight

How to build a punchy, cursor-style text highlight that survives line breaks — using box-shadow, box-decoration-break: clone and a little positioning — with modern gradient and logical-property alternatives.

CSS 1 May 2016
CSS

Responsive Design for Mobile and Tablet Displays

Progressive enhancement, done right

Why responsive, content-first design matters and how progressive enhancement keeps a site usable on every device. With a 2026 section on container queries, clamp(), dvh units and preference media queries.

CSS 1 May 2015
E-commerce

E-commerce Platforms Explained: WordPress, Statamic, and Custom Builds

Gateways, WooCommerce and bespoke carts

How online payments actually work, and the main routes to a shop: WooCommerce on WordPress, Statamic's e-commerce addons, or a bespoke cart built on a framework like Laravel.

E-commerce 1 Nov 2015
AI

Voice-First AI Writing: 3 Prompts for Authentic Content

Keep your own voice

A voice-first, three-prompt workflow for writing with AI while keeping your authentic voice front and centre. Copy the prompts and go.

AI 8 Aug 2025
Methodology

Test-Driven Development: Building Reliable Software

Red, green, refactor

Why I lean on Test-Driven Development — the red-green-refactor cycle, the tangible benefits, and how it fits my workflow. Updated for Vitest, Pest and TDD in the age of AI agents.

Methodology 18 Nov 2025
PHP

An Introduction to PHP: Getting Started with Web Programming

Your first steps with PHP

A beginner-friendly introduction to PHP: what it's used for, what the name means, and the editors and environments you need to get started.

PHP 8 Aug 2015
PHP

Variables in PHP (Part 1)

Strings, types and heredoc

Part one of the PHP variables series: how variables work, valid names, flexible types, strings, escaping characters and heredoc/nowdoc syntax.

PHP 1 Aug 2015
Methodology

Navigating the World of CMS: Choosing the Right System

Choosing a system that fits

A guide to selecting the right CMS for your project, weighing update frequency, functionality, complexity and team skills — and the factors that matter less than you'd think.

Methodology 8 Aug 2015
WordPress

template_redirect & template_include: Two Great WordPress Hooks

Control where users go and what they see

How template_redirect and template_include give you fine control over WordPress theme output — one for sending users elsewhere, one for swapping the template.

WordPress 1 Oct 2015
Creative coding

Font/Particle Collisions

Particles colliding with live text

A canvas experiment in collision detection: point particles bouncing off live web-font text, driven by a pixel-sampled collision matrix — with notes on knowing when to stop.

Creative coding 1 Sep 2015
CSS

Styled Quotation Boxes

Lean, image-free quote boxes

Turning the plain HTML blockquote into tidy, equal-height quote boxes using generated quote marks and flexbox — no images, no JavaScript, lean markup throughout.

CSS 1 Nov 2015
Methodology

User Stories in Project Planning and Development

Scoping a build with the client

How I use user stories to plan and scope a project — the who, what and why, fostering discussion, and acceptance criteria as an agreed definition of 'done'. Now doubling as briefs for AI agents and the basis for tests.

Methodology 1 Jul 2015
Methodology

The 'Good Enough' Philosophy: Balancing Perfection and Progress in Web Development

When is a project done?

Perfection is a trap. This is the case for defining 'good enough' at the start of a project, and stopping the moment you get there.

Methodology 18 Nov 2025
Opinion

Contact forms are a pain

Funnel and frustration in equal parts

Contact forms are a perfect storm of friction, cost and reward. A short take on CSRF headaches, form SaaS pricing, and when outsourcing the plumbing is worth it.

Opinion 11 Oct 2025
WordPress

Archived Customizing Textbroker WordPress Imports: Auto-Features & Editor Control

Altering XML-RPC imports on the fly

Auto-enabling comments, switching post types and disabling the rich editor for content imported into WordPress over XML-RPC — a legacy technique, flagged for modern PHP stacks.

WordPress 1 Jun 2016
MySQL

Archived Importing Large MySQL Dumps with BigDump

Staggered imports on limited hosts

Using BigDump's staggered importer to get large MySQL dumps into a database on resource-limited hosts — with WP-CLI and the mysql CLI as the modern default.

MySQL 1 Jun 2014
WordPress

Archived WP Engine Disallowed Plugins: Clear Them Out

Pre-transfer plugin check

A lightweight plugin to scan for WP Engine's disallowed plugins before a site transfer — now dated and re-contextualised for the 2024 WPE/Automattic split.

WordPress 15 Sep 2023
E-commerce

Archived WooCommerce Plugin: Easily Reorder Product Page Elements

A drag-and-drop layout experiment

An archived write-up of a small plugin I built to reorder or remove WooCommerce product page elements by drag-and-drop, without editing do_action hooks by hand.

E-commerce 8 Oct 2015
Tooling

Archived 7 Essential Sublime Text Plugins for Enhanced Productivity (That I Actually Use)

A 2017 editor setup

Seven Sublime Text plugins I genuinely used day-to-day, from Emmet and Prettify to DocBlockr. A 2017 period piece, wrapped with a note on how the editor landscape looks in 2026.

Tooling 12 Dec 2017
Laravel

Archived Laravel, WordPress, PHP & JS Dev Available

Freelance capacity, February 2025

A February 2025 note that development time had opened up. Kept as a dated snapshot; for current availability, see the contact page.

Laravel 24 Feb 2025
AI

Archived AI Automation: Slow Progress, High Expectations

A 2025 snapshot

A brief, sceptical note on AI automation's over-promise — and why 'update my Drive doc by voice' was still a punchline in 2025.

AI 11 Oct 2025
Opinion

Archived Cred.blue Score: 431 & Social Ranking

Thoughts on social scoring

A healthy 431 on cred.blue — and a few thoughts on Klout-style social scoring, and rewarding genuine interaction over reach.

Opinion 7 Sep 2025

Let's talk.

I help content-rich organisations understand their data and pull it back into one place. Tell me what specific problems you're having and I'll be happy to talk solutions with you.