Dev log
Faster images, faster site: every trick, with examples
Resize your images, save them as WebP or AVIF, lazy-load everything below the first screen, and let a CDN and caching deliver them. Here's how to do each one.
10 min read
Dev
Technical notes on WordPress, Shopify, PHP, JavaScript and the other tools I build with every day.
Dev log
Faster images, faster site: every trick, with examples
Resize your images, save them as WebP or AVIF, lazy-load everything below the first screen, and let a CDN and caching deliver them. Here's how to do each one.
10 min read
Dev log
Build a scroll ruler sidebar with letter-by-letter titles
Section titles that ride a ruler and swing into place one letter at a time, rebuilt from the ArtCraft site with CSS and a short script.
10 min read
Dev log
Canonical URLs: fix duplicate pages for better SEO
When one page opens at several addresses, a canonical tag tells Google which one is real. Here's how to set it up and test it on WordPress and Shopify.
8 min read
Dev log
CSS anchor positioning: move elements on hover, no JavaScript
Give the hovered element an anchor-name, make another element follow it with position-anchor, and add a transition. It slides there, no JavaScript.
8 min read
Dev log
Core Web Vitals in plain English: LCP, INP and CLS
What the three Core Web Vitals measure, the numbers that count as good, how to measure them on real visitors, and the fixes that help most on WordPress sites.
5 min read
Dev log
Security headers for WordPress, without a plugin
Five HTTP headers that close common holes in a WordPress site. The few lines of PHP I use to send them, and how to check they work.
4 min read
Advertisement
Dev log
WCAG 2.2: the nine new success criteria and how to meet them
WCAG 2.2 added nine new rules and removed one. Here is what each new rule asks for, which ones count at level AA, and the code I use to meet them.
6 min read
Dev log
How AI search finds your site: crawlers, robots.txt and llms.txt
AI answers start with a crawler. I explain which bots fetch your pages, which ones train models, and how I let AI search in without giving away content.
5 min read
Dev log
Fix the Shopify app ERR_INVALID_ARG_TYPE “key” error
The "key argument must be of type string... Received undefined" error in a Shopify app means your API secret isn't loaded. I explain why, and how to fix it.
4 min read
Dev log
How to increase the PHP memory limit (and WordPress too)
Fix "Allowed memory size exhausted" by raising memory_limit in php.ini, .user.ini or .htaccess, or WP_MEMORY_LIMIT in wp-config.php. Then check which one wins.
4 min read
Dev log
How to add /blog/ to WordPress post URLs
Put /blog/ in front of every post URL with a custom permalink structure. Keep custom post types out of it with with_front, and keep old links working.
4 min read