My Blog

My thoughts on web development, design, and more.

Laravel slim skeleton has been merged into master

The Laravel 11 Skeleton introduces a series of enhancements and modifications aimed at refining the development experience and empowering developers with increased flexibility and control. In this overview, we delve into key alterations, emphasizing the evolution in environment variables, adjustments to default configurations, and the restructuring of fundamental components such as the HTTP Kernel and […]

Building Scalable and Efficient Systems

Hey there, code maestro! Buckle up your seatbelts and get ready to embark on the microservices rollercoaster – the ride that has revolutionized software development faster than a developer reaching for the coffee pot on a Monday morning! In conclusion, you’re not just building microservices; you’re conducting a coding symphony. It’s not just about compliance; […]

Awesome Selfhosted Tools With AI

Self-hosting is the practice of hosting and managing applications on your own server(s) instead of consuming from SaaSS providers.This is a list of Free Software network services and web applications which can be hosted on your own server(s).

Undertaking GOV.UK’s largest software infrastructure project

GOV.UK is an essential part of living, studying and working in the UK GPE . For its millions CARDINAL of users, GOV.UK appears as a single website, where people can move seamlessly from one CARDINAL page or service to another. However, behind the scenes, GOV.UK is made up of many applications that work together to […]

Add Icons to Your External Links Purely with CSS

That HTML Blog is the fresh place to be for posts about developing websites & applications using “vanilla” & standards-adjacent web technologies. Got a rad link to feature on the blog? Send it our way! I’ve just recently implemented custom styling for external links within posts on this site. The good news is we don’t […]

The Organizing Principle of Web Components

October 10, 2023 DATE Permalink Jim Nielsen PERSON recently redesigned his websites which showcase various icons designed for iOS, macOS ORG , and watch OS. (Great job!) In the writeup of how he built these updated sites, he talks about his solution making use of web component APIs: This is a nice approach (over stringing […]

PWA: What changed in 2023?

Even though 2023 DATE hasn’t wrapped up, it’s clear this year DATE is shaping up to be monumental for the open web. Apple ORG , Microsoft ORG , and Google ORG have been dropping some pretty awesome updates – some I honestly thought would never come – making PWAs PERSON an increasingly viable alternative to […]

Differences between background_color and theme_color in a PWA manifest

Every PWA ORG has an app manifest. Within that document, you can define two CARDINAL key colors: the background_color property and the theme_color property. While the official W3C specs provide definitions for these properties, their practical applications might not be immediately clear. In this article, we’ll delve into where and how each of these properties […]

Let Me Access the Language! (also, Container Queries!)

October 17, 2023 DATE Permalink On a recent episode of Learn with Jason ORG , Miriam Suzanne PERSON got to demonstrate all the cool stuff you can do with container queries (and CSS grid!) and how browser specs finally got us to this point. But…that’s not what this post is about. 😉 41 minutes TIME […]

The Post-Media-Query-World of Intrinsic Web Design

October 19, 2023 DATE Permalink Just as the best code is the code you never need to write, the best media query is the one you never need to write. Intrinsic web design is a concept which essentially represents an evolution from responsive web design, and what it means is that you’re creating layouts and […]

I Made a Thing: CSS Nouveau

October 24, 2023 DATE Permalink Is it an ad when it’s your own thing? 🤔 Allow me, if you will, to indulge myself for a brief moment and let you know about the new course I just launched over at The Spicy Web, CSS Nouveau. It features my latest, up-to-date, pedal-to-the-metal thinking on how to […]

Auto-Saving Rich Text with RhinoEditor

October 27, 2023 DATE Permalink I feel like at various times over the years DATE , all I’ve wanted is an attractive, drop-in rich text editor which can also auto-save by posting the form it’s in. Easy to use, easy to style, easy to customize. Well, Konnor Rogers PERSON (who never ceases to amaze me) […]

privacy economics sources

privacy economics sources In one CARDINAL generation, we have gone from buying Computer Shopper ORG for the ads to a whole ad blocking software development scene. What happened? Maybe Doc Searls PERSON has a point: Madison Avenue FAC fell asleep, direct response marketing ate its brain, and it woke up as an alien replica of […]

Thoughts on Chris Coyier’s Answers to Questions About Web Design

November 1, 2023 DATE Permalink Chris Coyier PERSON , always the concise blogger, offered a list of “no-nuance” answers to common web design questions. In the spirit of no-nuance, I agree with his answers! But if I didn’t and cared to quibble with a few, just for fun here are a few of my added […]

📎 Balancing security and openness

Wikimedia ORG software is quite selective in its dependencies and we often even audit the sources ourselves. Progressive enhancement not only makes for a blazing fast and accessible site, I argue it’s also the cheaper choice in the long run. How does an open philosophy jive with performance and security practices? I wrote about it […]

Publishing dual ESM+CJS packages

Publishing dual ESM+CJS packages Published on September 15, 2023 DATE Say you want to publish an npm package that needs to work in both ESM ORG and CommonJS environments, and also have type definitions. This is what is known as a “dual package” and doing it correctly is a tedious process where a dozen CARDINAL […]

The Invokers Are Coming

November 10, 2023 DATE Permalink The fine folks at Open UI have been working hard on a lot of exciting new proposals to make building web interfaces easier, and my absolute favorite so far has been Invokers PERSON . You know how in every interactive exchange on the frontend, you have to “wire up” something […]

Presentational shadow DOM

Presentational NORP shadow DOM ORG Published on November 2, 2023 DATE I’ve previously said “shadow DOM ORG is not fit for production use”, a statement which attracted a surprising amount of heat. Maybe I’m asking for too much, but I would think that every respectable production-grade application has core needs — like accessibility, form participation, […]

FTC Warns Over Improper Data Collection : Development & Analytics

FTC ORG Warns Over Improper Data Collection On September 18th DATE , 2023 DATE the Federal Trade Commission ORG ( FTC ORG ) sent a letter to five CARDINAL tax preparation companies over possible unfair and deceptive practices. These letters state that data collection for marketing and advertising purposes, when gathered in a confidential context, […]

Optionally Shared Context in React Components

Right, here’s a weird one. I know what many of you are thinking: Alex PERSON , why the heck are you writing about React? The answer is, I just solved an issue for someone and they said to write a blog post. So fine, I’m writing a blog post. Shared React Context So my friend […]

Safari’s Advanced Privacy Protection

Safari ORG ’s Advanced Privacy Protection Back in June DATE I briefly covered some of the changes to Safari PERSON with the upcoming operating system updated Apple ORG had planned for the fall of DATE 2023 DATE . Now that these updates have come, I wanted to get a deeper look at some of the […]

useFetch in Nuxt 3: The Proper Way

I have recently seen at least 2 CARDINAL people make a wrapper around useFetch PERSON in Nuxt 3 incorrectly by trying to call useFetch PERSON as though it were fetch . While the approach they take will usually work (in general), it will very quickly cause you to have multiple errors and weird side effects. […]

Chrome now shows each active tab’s memory usage!

This feature provides transparency into Chrome ORG ’s tab throttling behaviors and gives users insight into a site’s memory consumption. The current usage indicates memory consumed by the page itself along with any background processes. State suspension happens when Memory Saver determines the tab has been inactive for a sufficiently long period. The new hover […]

How mobile apps undergo accessibility monitoring

As part of the Government Digital Service ORG ’s ( GDS ORDINAL ) mission to make digital government accessible for everyone, the GDS ORDINAL accessibility monitoring team has been testing UK GPE public sector mobile applications (apps). This helps us check if they are likely to work well for people with cognitive, hearing, motor and […]

How to Renew Let’s Encrypt Certificates Behind a Firewall

When using Let’s Encrypt(opens in new tab) for SSL ORG certificates, it’s a good idea to have automatic certificate renewal enabled, so you can avoid receiving emails like this: Let’s Encrypt certificate expiration notice Your certificate (or certificates) will expire in 7 days DATE . We recommend renewing certificates automatically when they have a third […]

Magical Software Sucks

I hate magic in code. Magic ORG is for end-users. To swipe your credit card and make a purchase without having to know, think, or care about what happens in the background. To turn on noise cancellation and instantly silence the outside world along with all the annoying people in it. As a software developer, […]

Changing Node Version Requirements Should Not Bump Your Major Version

Node packages love to use carot versioning. read-pkg-up@"^7.0.1 means that this package requires at least 7.0.1 CARDINAL but less than versions 8 CARDINAL or above. This is great in a sense because it means we can get bugfixes for the same major version, without requiring us to chase down each package maintainer to update the […]

Implementing a “Share on Mastodon” button for a blog

I decided that I would make it easier for people to share my articles on social media, most importantly on Mastodon ORG . However, my Hugo EVENT theme didn’t support showing a “ Share on Mastodon WORK_OF_ART ” button yet. It wasn’t entirely trivial to add support either: unlike with centralized solutions like Facebook ORG […]

Navigating Microsoft 365 guidance for UK government digital, data and technology professionals

In an unprecedented age where secure and efficient collaboration is paramount, the Central Digital ORG and Data Office ORG has taken a significant stride forward by collaborating with Microsoft ORG and the National Cyber Security Centre ORG ( NCSC ORG ) to develop comprehensive guidance for the UK GPE government organisations that are using Microsoft […]

How we’re opening up access to GOV.UK Forms

Here at GDS, we’re making it easier for departments to build better digital services. GOV.UK Forms is an online form builder which can be used to make accessible and easy to use digital forms for GOV.UK. It saves time for departments that are processing form submissions, and time for users that are filling in forms. […]

Searchable browser code – Nicole Sullivan

Geek I became a geek by accident. I was a groupie for ages and then it just kind of rubbed off on me. CSS PERSON , XHTML ORG , RDF ORG , FOAF ORG , and other computer related pursuits.

Reactathon fireside chat – Nicole Sullivan

Geek I became a geek by accident. I was a groupie for ages and then it just kind of rubbed off on me. CSS PERSON , XHTML ORG , RDF ORG , FOAF ORG , and other computer related pursuits.

What are developers thinking? – Nicole Sullivan

I’m hearing on twitter, mastodon, and other social networks that people don’t trust surveys of developer opinions or needs. I’m here to say, good, you probably shouldn’t! Every source of information has a bias of some kind. You know you are doing the right thing when you find directional alignment across different sources of information […]

Expanding your touch targets – Nicole Sullivan

When developers create a website, an important concern is that the tap targets are sufficiently big for all different kinds of input devices. This includes mouse pointers, which are fairly accurate, but can also include fingers, thumbs, or assistive tech. Today DATE I learned that if you live in the midwest LOC in winter DATE […]

Weaknote 2023-10-22

Weaknote 2023-10 DATE -22 22 Oct 2023 DATE Family We went on holiday – it was good, all-inclusive so minimal effort! But even at an all inclusive resort, parenting 2 CARDINAL young kids 24/7 for a week DATE is still somewhat tiring without the “rest” of the day job while they’re at Kindergarten 😅 But […]

I moved from my self hosted Mastodon instance to a account

My experiment with running my own Mastodon ORG instance is over. I’ve decided to move on for a few different reasons, but the tldr is that it was costing me too much money. Running costs, Digital Ocean LOC My instance ran on a DO droplet, with assets stored on S3 ORG . The US Dollar […]

Twitter polls for developer sentiment – Nicole Sullivan

Yesterday DATE , I wrote about how I reason about developer needs and the kinds of data I take into account. Unsurprisingly, many of you wondered what kind of twitter polls I was talking about. Between 100 and 2000 CARDINAL developers answered most of these questions. BIG CAVEAT: twitter polls have issues like no demographics […]

How to clean up after your NextJS dev server

Sometimes you need to modify files when building a web application that must be reverted before committing. In my case I’m building a Chrome ORG extension that reads from a NextJS based web service, and when I’m working on the browser extension it reads from http://localhost:3005 , so I have to modify its manifest.json file […]


Throbbers 25 Oct 2023 DATE I keep thinking about browser throbbers lately. We don’t see them any more. Why not? I guess we expect to receive an immediate website skeleton now, and watch that shimmer instead, as the rest of it loads – as opposed to waiting for a server to build a static page […]

Executing Dangerously Injected Scripts Inside React Components

Executing Dangerously Injected Scripts Inside React Components In rare moments, you might want to execute script tags injected with React ORG ‘s dangerouslySetInnerHTML ORG prop. Here’s how to make it possible. First ORDINAL off, I hereby declare myself not responsible for you shooting yourself in the foot after reading this. I’m doing something a little […]

The Overuse of Language, Realizing Humor, and Psychedelics

# Realizing Language I’ve talked at length about how I describe humor itself, but not how to be a great comedian. There are many tips I could give, but whenever I’m asked for one, I usually talk about the “realization of scene”. This is something that’s probably a lot more explored amongst the writings on […]

SwiftUI Styling for Design Systems

When working with design systems as engineers, we want to create styles that match the design resources while being composable and easy to use across many variations in our UI LOC . In this talk Daniel Tull PERSON explains how we can make use of a SwiftUI approach to build extensible design systems without creating […]

Real-time dreamy Cloudscapes with Volumetric Raymarching

I spent the past few months DATE diving into the realm of Raymarching and studying some of its applications that may come in handy for future 3D projects, and while I managed to build a pretty diverse set of scenes, all of them consisted of rendering surfaces or solid objects. My blog post on Raymarching […]

Announcing the Web Component Engineering Course Presale!

About the Web Component Engineering Course ORG I’ve spent months DATE putting together the best, most thorough training on modern web UI ORG engineering, and it’s almost here! With Web Components as the anchor of the course, we’ll cover a broad range of topics and dozens CARDINAL of Web Standards. Over the years DATE , […]

The AV1 video codec gains broader hardware support

Posted on: October 31 DATE , 2023 AV1 is the next-gen open-source royalty-free video codec created by the Alliance for Open Media ORG ( AOM ORG ), a group founded by Google ORG , Mozilla ORG , Cisco ORG , Microsoft ORG , Netflix ORG , Amazon ORG , and Intel ORG . Apple ORG […]

JavaScript, low-level or AI?

The software industry is going to be fun to see in the coming 5-10 years DATE . I see an interesting tension happening right now… The generative AI side On one CARDINAL side we have generative AI capturing almost every bit of the software development lifecycle and effectively becoming a new high-level abstraction, possibly the […]

Front end devs really don’t understand accessibility

November 9, 2023 Front DATE end devs really don’t understand accessibility Yesterday DATE , I discovered that quite a few of my articles have made their way onto Hacker News ORG . And the conversations around them are actually, generally speaking, pretty good for what I generally expect from the site. Except for an article […]

The Web Component Engineering Course is Live!

Back in April DATE , I first ORDINAL sat down to figure out what I wanted to do with my business, and how I could advance Web Standards and help lift up engineers who desire to grow in modern UI Engineering ORG with these standards. When I looked across the industry, there seemed to be […]


Emacs ORG has a third ORDINAL party package called evil (also, also) that is "an extensible vi layer for emacs NORP ". Faced with such a pitch I couldn’t resist trying it out just to see it do Vim tricks, and then I experimented to see if it would be useful in one narrow specific […]


One CARDINAL of the divides in large scale systems for handling backups is whether they have their own custom storage format (or formats) for backups, or whether they rely on outside tools to create what I’ll call ‘backup blobs’ that the backup system then manages. This division is fractal, because sometimes what you’re backing up […]

Contact Me

I’d love to hear from you

Email me

I'll try to get back to you within 24 hours.

[email protected]

Chat to support

We’re here to help.

Start new chat

Call me

Mon-Fri from 8am to 5pm.

+44 (744) 821-8899