# Writing

Although I don't get the chance to write often, I do so occasionally and post it here!

01. ## [16 months with Loop Switch 2 earplugs](https://alistairshepherd.uk/writing/16-months-with-loop-switch-2-earplugs/)

25th March 2026
    My thoughts on the Loop Switch 2, the adjustable model of the hyped-up earplugs company. Here are my thoughts using them over the past 18 months!

02. ## [Simple website analytics with Goatcounter](https://alistairshepherd.uk/writing/simple-website-analytics-with-goatcounter/)

24th March 2026
    Using Goatcounter as a simple web analytics tool that is good for privacy, low in cost, lightweight, and simple. This is how I got on with it!

03. ## [I displayed an open graph image and had to pay how much?!](https://alistairshepherd.uk/writing/open-graph-licensing/)

22nd July 2025
    A media company demanded a license fee for an Open Graph image used on my twitter archive. I gave in and paid it, but what does that mean for open graph images and copyright?

04. ## [Device notifications via HTTP with ntfy](https://alistairshepherd.uk/writing/ntfy/)

13th May 2025
    ntfy is a super handy service that makes it easy to send notifications to a device via HTTP requests

05. ## [The Blog Questions Challenge](https://alistairshepherd.uk/writing/blog-questions-challenge/)

12th March 2025
    Some answers to the Blog Questions Challenge — about my experience blogging here and in the past

06. ## [HTMHell Advent Calendar — Preloading fonts for web performance with link rel="preload"](https://htmhell.dev/adventcalendar/2024/25/)

25th December 2024
    A post on the the HTMHell Advent Calendar about how to use rel="preload" to improve font-loading performance!

07. ## [My anti-overlay client letter](https://alistairshepherd.uk/writing/accessibility-overlays-email/)

6th November 2024
    I really dislike accessibility overlays and am often asked about my thoughts or to implement one. This is my email response when that discussion gets serious.

08. ## [Spring and Summer 2024 — Life, links and lmedia](https://alistairshepherd.uk/writing/spring-summer-2024/)

22nd September 2024
    A summary of my past few months, including what I've been up to; blog posts I've written and enjoyed reading; and media I've been enjoying

09. ## [My day at State of the Browser 2024](https://alistairshepherd.uk/writing/state-of-the-browser-2024/)

19th September 2024
    I attended State of the Browser 2024 in London, which had some exceptional talks. These are my thoughts from the day.

10. ## [Selling a small front-end web project — what I learned](https://alistairshepherd.uk/writing/selling-web-project/)

16th September 2024
    In mid-2024 I sold a small unmonetised web project of mine called My Top for Spotify. This is my experience of the sale and what I learned!

11. ## [My response to UK CMA's potential remedies for mobile browser competition](https://alistairshepherd.uk/writing/cma-mobile-browsers-remedies/)

24th August 2024
    My submission to a the potential remedies proposed by the UK Competition and Market's Authority consultation on Mobile Browser Competition

12. ## [Proxying an Image CDN with Cloudflare workers](https://alistairshepherd.uk/writing/cloudflare-worker-image-proxy/)

3rd August 2024
    Using free Cloudflare workers to proxy an image CDN on the main origin for performance

13. ## [JS library compilation to browser, esm and cjs using esbuild](https://alistairshepherd.uk/writing/js-library-bundling-esbuild/)

19th July 2024
    My setup using esbuild to compile a Javascript library for browser use, ES Module import and CommonJS require

14. ## [Simple, fast build tooling with live reload for a non-framework website](https://alistairshepherd.uk/writing/simple-build-tooling/)

14th July 2024
    A nice modern bundling set up that can be used with CMS sites like WordPress without a framework. Uses Parcel and livereload

15. ## [My 2023 round-up](https://alistairshepherd.uk/writing/2023-roundup/)

24th January 2024
    My belated round-up of 2023, including conferences, work, arts and crafts, personal life and media!

16. ## [Web Performance Calendar — Ten optimisation tips for an initial web performance audit](https://calendar.perfplanet.com/2023/ten-optimisation-tips-for-an-initial-web-performance-audit/)

14th December 2023
    A post on the the Web Performance Calendar with handy tips for an site performance audit

17. ## [HTMHell Advent Calendar — Getting started with Web Performance](https://www.htmhell.dev/adventcalendar/2023/14/)

14th December 2023
    A post on the the HTMHell Advent Calendar about how to get started with web performance including some tips!

18. ## [Interop Priority Game 2024](https://alistairshepherd.uk/writing/interop-priority-game/)

17th November 2023
    Prioritising the proposals for the Interop Project 2024 as I'd like, prompted by Brian Kardell's "Let's Play a Game"

19. ## [Alternative text for "I'm a Luddite (and So Can You!)"](https://alistairshepherd.uk/writing/im-a-luddite-alt-text/)

2nd August 2023
    Alternative text for the web comic from Tom Humberstone about a history of the Luddites and how you can and should also be a Luddite

20. ## [Bone conduction earphones revolution — Aftershokz Aeropex review](https://alistairshepherd.uk/writing/aeropex-review/)

30th July 2023
    The bone conduction earphones from Aftershokz blew my mind and are the best earphones I've ever used! Reviewed 9/10.

21. ## [Simple, cheap GeoIP API using Netlify Edge functions](https://alistairshepherd.uk/writing/netlify-geoip/)

1st May 2023
    How you can use Netlify to set up your own GeoIP API service with no rate limits, payment plans or tracking!

22. ## [Simple, cheap GeoIP API using Vercel Edge functions](https://alistairshepherd.uk/writing/vercel-geoip/)

30th April 2023
    How you can use Vercel to set up your own GeoIP API service with no rate limits, payment plans or tracking!

23. ## [Searching for a Mastodon app for Android](https://alistairshepherd.uk/writing/mastodon-android/)

26th March 2023
    There are plenty Android apps to access Mastodon and the Fediverse, which one works best for me?

24. ## [Displaying Hillwalking routes on the web with GPX files and Leaflet](https://alistairshepherd.uk/writing/hillwalking-maps-with-leaflet/)

23rd January 2023
    Display GPX route files from a GPS tracker on the web using Javascript, Leaflet and an Outdoors Tilelayer

25. ## [GrapheneOS as my daily-driver mobile OS](https://alistairshepherd.uk/writing/grapheneos/)

15th January 2023
    My experience running GrapheneOS on a Google Pixel 6 over the past few months as my daily-driver phone OS

26. ## [My 2022 round-up](https://alistairshepherd.uk/writing/2022-roundup/)

30th December 2022
    Happy new year! This is a round-up of my 2022, including conferences, work, personal life and media!

27. ## [My comments to Competition and Markets Authority on mobile browser competition](https://alistairshepherd.uk/writing/cma-mobile-browsers-mir/)

18th July 2022
    My submission to a Competition and Market's Authority consultation on Mobile Browser Competition

28. ## [Code Splitting in Alpine.js](https://alistairshepherd.uk/writing/code-splitting-alpine/)

30th May 2022
    Code splitting in JavaScript projects and for Alpine.js

29. ## [Async Alpine — Asynchronous Alpine component loading](https://alistairshepherd.uk/writing/async-alpine/)

30th May 2022
    Async Alpine for loading Alpine.js components asynchronously and lazily

30. ## [SVG generative mountain ridge dividers](https://alistairshepherd.uk/writing/svg-generative-ridges/)

21st April 2022
    Generative mountain ridge dividers using videogame terrain generation techniques, JavaScript and SVG

31. ## [Managing tracking consent with Cead Consent](https://alistairshepherd.uk/writing/cead-consent/)

10th April 2022
    How to manage tracking scripts and consent easily using Cead Consent

32. ## [Personal site stack for alistairshepherd.uk](https://alistairshepherd.uk/writing/personal-site-stack/)

23rd December 2021
    The technical stack for alistairshepherd.uk including 11ty, Sass, esbuild and gulp

33. ## [Web Nostalgia and Lost In Translation](https://alistairshepherd.uk/writing/lost-in-translation-and-nostalgia/)

30th August 2021
    Ramblings about web nostalgia, early web experiments and translating through many different languages

34. ## [Front End Web Development Feeds and Newsletters](https://alistairshepherd.uk/writing/frontend-feeds-newsletters/)

15th July 2021
    Blogs, articles and newsletters I follow to keep up-to-date with Frontend web development.

35. ## [Conditionally loading a native image lazyload polyfill/library](https://alistairshepherd.uk/writing/image-lazyload-conditional-polyfill/)

11th June 2021
    How you can feature detect native image lazyloading support and load a JS library if not.

36. ## [Conditionally loading a polyfill for :focus-visible](https://alistairshepherd.uk/writing/focus-visible-conditional-polyfill/)

21st May 2021
    Helpful snippet to load the polyfill for CSS pseudo class :focus-visible conditionally.

37. ## [SVG Landscape with live colour theming - new site part 2](https://alistairshepherd.uk/writing/parallax-svg-landscape-2/)

17th February 2021
    'Live' colour-changing landscape using custom properties for an SVG landscape.

38. ## [Making a Parallax SVG Landscape - new site part 1](https://alistairshepherd.uk/writing/parallax-svg-landscape-1/)

29th January 2021
    How I made the parallax SVG landscape in the header of my website. First of a series of two.

39. ## [Fixes for Koken Problems](https://alistairshepherd.uk/writing/fixes-for-koken-problems/)

17th September 2020
    Koken is an old CMS for photographers I've worked with, these are some fixes for those still using it.
