Alistair Shepherd
Fixes for Koken Problems
Making a Parallax SVG Landscape - new site part 1
SVG Landscape with live colour theming - new site part 2
Conditionally loading a polyfill for :focus-visible
Conditionally loading a native image lazyload polyfill/library
Front End Web Development Feeds and Newsletters
Web Nostalgia and Lost In Translation
Personal site stack for alistairshepherd.uk
Managing tracking consent with Cead Consent
SVG generative mountain ridge dividers
Async Alpine — Asynchronous Alpine component loading
Code Splitting in Alpine.js
My comments to Competition and Markets Authority on mobile browser competition
My 2022 round-up
GrapheneOS as my daily-driver mobile OS
Displaying Hillwalking routes on the web with GPX files and Leaflet
Searching for a Mastodon app for Android
Simple, cheap GeoIP API using Vercel Edge functions
Simple, cheap GeoIP API using Netlify Edge functions
Bone conduction earphones revolution — Aftershokz Aeropex review
Alternative text for "I'm a Luddite (and So Can You!)"
Interop Priority Game 2024
HTMHell Advent Calendar — Getting started with Web Performance
Web Performance Calendar — Ten optimisation tips for an initial web performance audit
My 2023 round-up
Simple, fast build tooling with live reload for a non-framework website
JS library compilation to browser, esm and cjs using esbuild
Proxying an Image CDN with Cloudflare workers
My response to UK CMA's potential remedies for mobile browser competition
Selling a small front-end web project — what I learned
My day at State of the Browser 2024
Spring and Summer 2024 — Life, links and lmedia
My anti-overlay client letter
HTMHell Advent Calendar — Preloading fonts for web performance with link rel=”preload”
The Blog Questions Challenge
Device notifications via HTTP with ntfy
I displayed an open graph image and had to pay how much?!