Journal archive: 2020



2020 in numbers

Numbers and sparklines.

Books I read in 2020

Fiction and non-fiction, rated and reviewed.

Words I wrote in 2020

Blogging through a very strange year.

SVGs in dark mode

Styling sheet music …and then unstyling it.

Web Audio API weirdness on iOS

Fixing a heisenbug with silence.


The sound of worlds colliding.


I have been elected to the AMP advisory committee. My reign of terror begins!

Cascading Style Sheets

The terminology of applying CSS.


Do websites need to sound the same in every screen reader?

Clean advertising

The greatest trick the devil ever pulled was convincing the world that behavioural advertising is more effective than contextual advertising.

Insecure …again

Breaking the web for security.

The Correct Material

Wishing for Cold War Space Race dramas from the Russian perspective.

Caching and storing

Caches are for copies.

Upgrades and polyfills

Apple’s policy of locking browser updates to operating system updates is bad for the web and bad for the planet.


An exception to my general rule that ARIA attributes should be added with JavaScript.


Manually machine tagging books as a kind of mindless meditation.

Portals and giant carousels

Trying to understand why people think they need to make single page apps.


Apply your ARIA attributes with JavaScript and then use them as hooks in your CSS.

Accessible interactions

Abstracting common interaction patterns as a starting point for accessible components.

Standards processing

Pushing for a share button type—the story so far…

Continuous partial browser support

Treat every browser feature like an experimental feature.

Saving forms

A defensive enhancement to avoid losing everything you just typed into a textarea.

The Web History podcast

Narrated by yours truly.

Owning Clearleft

After fifteen years, it’s time to commit.

The reason for a share button type

It’s not because it’s declarative—it’s because it’s robust.

200 tunes

A tune a day, every day, for 200 days.

Downloading from Google Fonts

For some reason, Google Fonts only provides .ttf files if you’re self-hosting. I don’t know why.

Unobtrusive feedback

An interface pattern for Ajax interactions that’s borrowed from video games.

Performance and people

When it comes to web performance, there are technical issues and then there are human issues.

Web browsers on iOS

As mobile and desktop operating systems converge, Apple’s hypocritical browser policy becomes clearer and clearer.


A brain-dumping tool that matches my process.

A polyfill for button type=”share”

Kicking the tyres on a declarative Web Share API.

A declarative Web Share API

button type=”share”


A spoiler-filled look at the new Christopher Nolan film.

Submitting a form with datalist

It can autocomplete, but how do you get it to autosubmit?

Web on the beach

Dining out safely, thanks to the World Wide Web.

Design Principles For The Web—the links

Hyperlinks to accompany a talk.

Mind the gap

If you’re making a library or framework, treat it like a polyfill.

Netlify redirects and downloads

How to use HTML’s `download` attribute even if you’re storing your files on S3.

Season one of the Clearleft podcast

That’s a wrap!


You can kiss URLs goodbye after all.

Design sprints on the Clearleft podcast

The final episode of season one came right down to the wire.


An interesting idea from the birth of CSS.

Dream speak

My subconscious is an asshole.


A book recommendation via conspiracies, games, pattern-matching, hypertext and apophenia.

Design maturity on the Clearleft podcast

The penultimate episode of this season has seen things you people wouldn’t believe.

Design ops on the Clearleft podcast

The fourth episode gets meta about the semantics of semantics.

Wildlife Photographer Of The Year on the Clearleft podcast

The third episode is a case study—and what a case study!

Hey now

Hey! Been tryin’ to meet you.

Service design on the Clearleft podcast

The second episode uses conference talks as raw material.


Making the moral argument.

Putting design principles into action

There are observational principles, and there are imperative principles. Let’s put them together.


Different browser vendors have different priorities.

Design systems on the Clearleft podcast

The first episode is here! Please be gentle with me.

Custom properties

Don’t touch that DOM.

Announcing the Clearleft podcast

Subscribe today—the first episode drops this week.


I’ve made a /feeds URL.

The Machines Stop

Reversing entropy.

Dark mode revisited

Adding another theme to my stylesheet switcher.


Life, but not as we know it.

100 tunes

💯 🎶 🎉


Lost in translation.

CSS custom properties and the cascade

This behaviour surprised me (at first).


Black lives matter.

Programming CSS to perform Sass colour functions

Combining custom properties, hsl(), and calc() to get cascading button styles.


A2 _B2-_BAG A2 (3zGF C2

Hard to break

Brittleness is the opposite of resilience. But they both share something in common.


A moment in time seven decades ago.

Sass and clamp

Worst buddy movie ever.

A decade apart

Happy tenth birthday to A Book Apart and HTML5 For Web Designers!


A run-down of what I’ve been watching during The Situation

User agents

The web browser is your mutual friend.

Modified machete

The viewing order for a Star Wars movie marathon

Principles and priorities

Using design principles to embody your priorities.


Marking up the books you’re reading for aggregation and visualisation.


Minimum viable television and minimum viable websites.

Overlay gap

A problem shared is a problem halved. And the web has a big problem with awful overlays.

Future Sync 2020

Questions and answers from the opening talk of an online conference.


Four audio outings.

Web Share API test

Figuring out how Safari on iOS uses the Web Share API.


How the pipes of the web have been closed off.

A bit of Blarney

I was on a different kind of podcast.

A reading of The Enormous Space by J.G. Ballard

Take some time out to listen to this story of self isolation. It’s not like you’ve got anywhere to be, right?

Living Through The Future

William Gibson, Arthur C.Clarke, Daniel Dafoe, Stephen King, Emily St. John Mandel, John Wyndham, Martin Cruz-Smith, Marina Koren and H.G. Wells.

Apple’s attack on service workers

Kiss your service workers goodbye on iOS.

Oh, embed!

Embedding YouTube videos without sacrificing performance.


Tinkering with your website can be a fun distraction.


Think global, act local. In fact, just stay at home.


The meaning of life.


I am, unsurprisingly, working from home.

A curl in every port

Postel’s port numbers.

Lighthouse bookmarklet

You don’t need Chrome to run Lighthouse.

41 hours in Galway

A weekend of food and music to celebrate my birthday.

Abolish Silicon Valley by Wendy Liu

Reviewing the forthcoming memoir.


Security or access: choose one.

Telling the story of performance

Measuring performance is important. Communicating the story of performance is equally important.


Why do I like fluid responsive typography? Let me count the ways…


Jake’s got an idea for improving the security of displaying URLs in browsers.


Progressive enhancement. I do not think it means what you think it means.

Design systems roundup

Design systems are neither good nor bad (nor are they neutral).

Three books

Some potential reading material for 2020.


Taking a tour.

Architects, gardeners, and design systems

Citing Frank Chimero, Debbie Chachra, and Lisa O’Neill.

Web standards, dictionaries, and design systems

There’s a common pattern here.


One way of looking at the new browser landscape.

Indie Web Camp London 2020

Saturday, March 14th and Sunday, March 15th.

Install prompt

Browsers are still trying to figure out how to highlight progressive web apps.

Browser defaults

What would the repercussions be if browsers were to tweak some of their default behaviours?

The Rise Of Skywalker

My spoilertastic thoughts on the final film in the Skywalker saga.


A quick look back at the year just gone.