Articles
Notes on building things, solving problems and learning as I go. Occasionally, a detour into books, running, cycling or cooking.
-
Making AI show its working
A five-step process to include with AI development requests: agree the change, protect the existing work, test it, provide evidence and confirm the result.
-
AI: The mime of human output, not thought
AI gets us to good enough quickly. My concern is the work we accept without understanding its decisions, and what that means for productivity.
-
Responding to the PHP zero-day across 173-plus websites
Our 21 October PHP security response: patching more than 173 websites, upgrading three servers and taking ecommerce and sensitive-data systems offline.
-
AI and the cost of interrupted focus
The cycle of prompting, waiting and checking could change how we concentrate, learn and experience work. What research tells us, what remains uncertain and how we might protect our attention.
-
How AI is changing my work as a developer
What using AI for Laravel projects and rebuilding my website has taught me about judgement, learning, design and the skills I want to develop next.
-
Why I came back to design
Why I stepped back from design in 2020, returned in 2025, and how branding, application UX and critical thinking now shape my development work.
-
Can an AI agent actually use your website?
What Lighthouse’s agentic browsing checks and WebMCP mean for the way I think about interfaces, forms and building websites people can trust.
-
Building accessible multistep forms with Laravel and Inertia
A practical approach to multistep Laravel and Inertia forms, based on my EDR work: saved drafts, server validation, clear errors and predictable keyboard navigation.
-
Why we built One Base around Gutenberg
Our approach to a shared WordPress base theme: full site editing, native Query Loops, selective CSS loading and a simpler editing experience for clients.
-
Handling custom API integrations in WordPress
A practical approach to WordPress API integrations, based on my work across the Stagecoach UK and Canadian websites: validate responses, preserve stable IDs and keep external requests away from page rendering.
-
Adding category filters to a WordPress Query Loop
Add category links to a native WordPress Query Loop while keeping Gutenberg layouts and pagination. Includes scoped queries, input validation and checks.
-
Loading Gutenberg block CSS only when needed
How I separate global, block and pattern CSS in One Base, with a practical WordPress loading example and checks for the editor and frontend.
-
Launching Pathfinder Analytics
Launching my own planning, time tracking and budgeting application, and bringing a whole team onto one system with room to do their best work.
-
Adding reCAPTCHA v3 to Laravel, React and Inertia forms
A practical reCAPTCHA v3 tutorial based on my EDR forms work: fresh tokens in React, server verification in Laravel, and coverage for login, registration and password resets.
-
A morning spent fixing my NGINX cache
A stale page, a cold coffee and the difference between getting a cache working and knowing how to live with it.
-
How I use Laravel, React and Herd
Notes from building a Pokémon app and task managers: forms, migrations, Inertia and keeping the data moving clearly.
-
Thinking about AI and the work I want to do
Some thoughts from July 2025 on useful tools, uncertainty at work and the responsibilities that remain ours.
-
Reopening the projects I built fifteen years ago
Old backups, sprawling stylesheets and unfinished ideas: a useful reminder of how learning to build websites actually looked.
-
What building my own projects has taught me
What my JavaScript tools, Laravel file manager, React dashboard and Kanban experiments have taught me about data, state, design and learning through building.
-
CSS nesting without hiding the structure
How I approach native CSS nesting: shallow selectors, explicit parent references, specificity and a fallback for browsers that need compiled CSS.
-
Native image lazy-loading in WordPress
A practical approach to native image lazy-loading in WordPress, with attention to the first image, responsive sizes and layout stability.
-
Finding my feet in agency life
Nearing four years at a Suffolk agency: joining remotely, becoming the person behind the websites, helping a junior developer and learning how much can be done with less.
-
GitHub Copilot: where it helps and where review matters
Where GitHub Copilot can support development, how to keep suggestions reviewable, and why useful tests need expectations independent of generated code.
-
WordPress Application Passwords for a small REST integration
How I would connect a small server-side tool to WordPress using Application Passwords, restricted user permissions and clear REST API error handling.