hi. i’m ed.
beautiful1 experiences.

1and also build them to be wildly fast

The one web layout that rules them all

October 20, 2023

I have a bold claim: there is a responsive CSS Grid / Flexbox combo layout that can be used to build almost any web layout. At least I haven’t found any layout I wanted to build and couldn’t.

CSS findings from the Threads app—by Ahmad Shadeed

September 26, 2023

Ahmad did two great reviews of the Threads app. Quite a few interesting CSS or unusual CSS technniques there.

Component hydration with no dependencies

August 27, 2023

Client component hydration has been a trendy topic these days. Some frameworks like Next, Astro and others are already doing it.

It is not common knowledge that we can achieve a very similar result with pure SSR and declarative shadow DOM.

Typeface ligatures everywhere—like fi

All typefaces have been instructed to display their ligatures, by default, like this:

body {
  font-variant-ligatures: normal;
  font-feature-settings: "liga" 1, "dlig" 1, "hlig" 1, "clig" 1, "calt" 1;

HTML details

August 4, 2023

On occasion we need to present a summary of content while allowing the user to deep dive if they want to. The details element is a great way to do this, with good browser support as well. Let’s see how.

Custom a hover states

All a elements on this page have a customised hover effect. Here’s how to achive that:

a:hover {
  text-decoration: underline;
  text-decoration-thickness: .1em;
  text-underline-offset: .15em;
  text-decoration-color: var(--color-secondary-1);

HTML dialog, occasionally modal

August 3, 2023

Many times we need to show a modal to the user, to ask for confirmation, or to show some additional information in a manner which covers the rest of the page user interface. The dialog element is a great way to do this, and it is supported by all major browsers.

Better End to End Design Systems

March 13, 2023

Implementing a consistent brand across various devices and channels has never been easy. The diversity of connected devices and their screen sizes is also not helping simplify the process.

Let’s take a stab at how we could improve this.

Better Routing with Go Std

February 17, 2023

Previously I shared a very basic example of Go routing. Let’s see how we can improve that a little.


February 5, 2023

The last several years of web development have been going into a direction of needlessly over-engineering even simplest tasks.

Maybe it’s time to get back to the basics, to use simple solutions for simple tasks. Let’s touch on how I think we should be approaching initial web product development.

The CSS has() selector

January 24, 2023

In my first not post I mentioned and example of something I find quite interesting in the recent CSS features,that is the has() selector. And while I was preparing to write something about it, which I mightstill do, here’s a great article on Smashing Magazine written by Stephanie Eckles about this exact topic.

I have decided to not blog

December 28, 2022

I have recently been reading a lot given that I had a lot of time on my hands. Many of my readings have been about my work, what I'm passionate about in my work — how to build amazing experiences on the web and native platforms.

So I have quickly put together this not blog to share not posts here. Read along if you’re curious what this crazy idea is about.