Explore My Notes

Building a design token system | Scott Rouse

A very detailed and thorough overview of how to use design tokens to power a distributed design system and site architecture. The crux is ensuring design (Figma), code (CSS), and content management (in this case, Contentful) are all aligned.

Also includes some solid advice on why design tokens should be transformed into semantic tokens when they hit the codebase, which I fully agree with.

Clean advertising | adactio

A(n expectedly) brilliant article from Jeremy highlighting some of the absurdities underlying our current privacy nightmare called "behavioural advertising". Most importantly:

...there’s a problem with behavioural advertising. A big problem. 

It doesn’t work.

Almost all of the data suggests that behavioural advertising would work, if the prediction model is accurate. The problem is that our predictive algorithms are terrible. Which isn't surprising. The biggest algorithmically-based companies in the world – Twitter, Facebook, et al. – still can't get predictive feeds to work, despite literally owning all of the data that would be needed for them, so why on earth would something as complex as consumer relationship mapping be possible?

Of course, that's not what we're told. We're told that online advertising is so effective as to be able to predict that you're gay before you know so yourself; to guess when you're pregnant; or to know ... After all, this is a trillion-dollar industry we're talking about! There has to be something more to it, right? Well, Jeremy puts it better than I ever could:

Suppose someone told you that they keep tigers out of their garden by 
turning on their kitchen light every evening. You might think their 
logic is flawed, but they’ve been turning on the kitchen light every 
evening for years and there hasn’t been a single tiger in the garden the
whole time. That’s the logic used by ad tech companies to justify 
trackers.

In other words, it's really hard to prove a negative. Any time someone criticises the industry, they point to vanity metrics like clickthrough rates as "proof", even though most of these metrics are devised by the industry, monitored by the industry, and (crucially) are near-impossible to categorically tie back to the ads themselves. 
 

The bigger smoking gun is that right now proof of the positive – that online tracking actually does lead to increased revenue – is also mysteriously absent. Sure, everyone knows about some successful online ad campaigns, but how many of those were successful due to a combination of virality, third-party talking points (such as blog posts and social media coverage), and old school contextual advertising (e.g. showing ads for a video game on a tech website)?

Jeremy makes a fantastic case in his article for why the blind adherence to behavioural advertising is terrible for the web:

  1. It's bad for users, because it serves largely irrelevant ads;
  2. It's bad for advertisers, because it wastes their time and money (not just in terms of serving ads poorly, but also in terms of the huge cost of developing tracking software and analysing the largely pointless results in the first place);
  3. And, of course, it's extremely bad for the web, causing page bloat, impacting performance, and resulting in terrible user experiences (cookie banners, GDPR consent forms, JS-requirements, cookie-walls etc.);
  4. Plus (secret option four), it's bad for the planet, too!

He also makes a great case for how we can go about improving things: ban third-party cookies, block cross-site tracking, normalise contextual ads online (y'know, the ones that actually work), and keep pointing out that the current model is just a bit rubbish.

The greatest trick the ad tech industry has pulled is 
convincing the world that contextual relevance is somehow less effective
than some secret algorithm fed with all our data that’s supposed to be 
able to practically read our minds and know us better than we know 
ourselves.

... if this mind-control ray really could give me timely relevant adverts, I
might possibly consider paying the price with my privacy. But as it is,
YouTube still hasn’t figured out that I’m not interested in Top Gear or
football.

I know it’s hard to imagine a future without tracker-driven behavioural 
advertising. But there are no good business reasons for it to continue.
 

Look mum, no breakpoints! | Rob McCormick

An excellent overview of how to approach fluid design on the web. Lots of excellent references and techniques, particularly those around using Flex layout with flex-basis to control widths, or auto-repeating Grid layouts for extra control. Also some solid stats around the problems of designing for fixed breakpoints.

On the Tailwind trap, or how Tailwind hides the shortcuts and lures people into bad habits:

When I was using grid in Tailwind, I thought of it as a static thing with a defined number of columns, or rows, or both. To change it I had to explicitly state how many new columns (or rows) I wanted. I wasn't aware that a grid could be dynamic, adapting the number of columns or rows based on the content and available space

On how fluid design comes with one clear tradeoff:

Everything has tradeoffs - you can't have it all. And as far as I can tell the main tradeoff with building fluid websites is that you can't control every aspect. At some screen sizes it won't look exactly as you wished it did.

On the reality of designing for fixed breakpoints (and how rare those breakpoints are to fit what your users use):

Two of the designs I worked on were likely seen by less than 1% of people. And even if we're generous and include the entire range for the largest breakpoint, even though 1280px is at the top end, less than 3% of people would have seen three of my designs exactly as I intended them.

Creating content migrations in Craft CMS | nystudio107

A useful primer on how to use migration files in Craft.

Migra­tions are PHP files that con­tain code which alters the data­base from one state to anoth­er.

The core commands are as follows.

Run any waiting migrations, specifically the safeUp() functions:

php craft up

Rerun the last migration (undoes the previous migration and runs the file(s) again, so any changes are automatically applied):

php craft migrate/redo --interactive=0

Revert the previous migration (runs the safeDown() function):

php craft migrate/down --interactive=0

A loveletter to a tiny TV | Eric Bailey

Eric introduces the Tiny TV 2, an adorable piece of faux-retro tech that lets you load videos onto a tiny, replica cathode ray TV (which is obviously using an LED panel, digital files, and visual effects for all of the analogue touches e.g. static). But he also has some interesting surrounding thoughts on how quality, well-made goods can spark genuine joy. And now I kinda want my own mini TV to hack around with – and incredibly, they aren't even that expensive!

Jamstack slide decks | Sli.dev

I needed to throw together a quick presentation for an internal team meeting at work, but I've maxed out my Slides.com free usage and really hate Google's offering, so went digging for something better. Thanks to the Front End Horse community, I was introduced to Sli.dev. It's a solution with a clear learning curve – especially if you've never used Vue.js before – but after an hour of noodling around, I had a completely useable slide deck. Another couple of hours later and I had a custom, branded theme, using our company fonts and colours throughout. And now that's setup, all I have to do is clone the Git repo and edit the solitary Markdown file that controls the entire deck. I kinda love it 😅

But there's more to the codebase then scratching a bit of a developer itch. It comes with some great tools bundled, including prebaked slide animations, code formatting/highlighting, and some very clever custom focus order management so you can click through and showcase specific aspects of a slide in a preset sequence. The presentation mode is surprisingly robust, making it trivial (particularly with multiple monitors) to see all of your notes, the next slide, and various other tools whilst everyone else only sees the presentation. And, it's completely self-hosted, so I could render out the final deck and stick it on a web host somewhere to archive it indefinitely.

There are some downsides, but I've not hit anything too egregious. It has a very minor loading time, and there is an irritating reliance on additional abstractions, so your templates are all in Vue (not a bad choice) and CSS defaults to UnoCSS, but even here I was able to revert to pretty much vanilla CSS with relative ease. So really, as long as you can get past the unconventional install method (npm and CLI commands), this is a very robust piece of kit.

Heat death of the internet | Gregory Bennett

Perhaps the definition of a "lolsob" micro-essay on the state of the internet in 2024. 

On the usefulness of search engines:

The first page of Google results are links to pages that have scraped other pages for information from other pages that have been scraped for information. All the sources seem to link back to one another. There is no origin.

On the helpfulness of AI:

Your coworker sends you a PowerPoint pack to support a presentation you are giving to the executive committee, but you can’t make heads or tails of it. You call them over Zoom and they tell you they used ChatGPT to write it.

A little too personal:

Your Gmail is approaching storage capacity.

Why centring is so hard | Nikita Prokopov

Every web developer has torn their hair out trying to align an icon with some text, or two separate pieces of text with each other, or (god forbid) a whole sequence of text nodes, icons, form elements, etc. Niki has put together a really great article on why this is so tricky, what we can do about it, and how designers/font creators can help make everyone's lives easier.

This is my claim: we, as a civilization, forgot how to center things.

Together, I trust, we can find our way back to putting one rectangle inside another rectangle without messing it up.

On why text-align: middle never quite seems to do what you want:

text-align: middle comes closest, but it aligns by x-height, not cap-height, which still looks unbalanced

On how fonts can make themselves more easily align-able:

If you are a font designer, make life easier for everybody by setting your metrics so that ascender − cap-height = descender

Important! You don’t have to actually extend your ascenders/descenders to these boundaries. As you can see in the picture, my ascender space, for example, is way underutilized. Just make the numbers match.

On how to calculate the right amount of padding to use on any given font:

You can get the required font metrics for your font from opentype.js.org/font-inspector.html (ascender, descender, sCapHeight).

On how to extend that to icons and inline iconography/imagery:

Now that we have that sorted, aligning icons is not that hard too. You set vertical-align: baseline and then move them down by (iconHeight - capHeight) / 2

Code with your voice | Cursorless

Cursorless is a very cool VS Code plugin that uses Talon (voice-control assistive tech) to navigate around codebases, write and edit code, and do just about anything else. Even if that isn't interesting, give the tutorial video a watch, because it's fascinating.

Use your Mac the way I do | Blake Watson

A phenomenally interesting journey through one person's assistive set-up, using only the left mouse button to navigate the web, code websites, play video games, and everything else in-between.

On a better keyboard layout for limited cursor-travel, pointer-only typing:

...you come across the Chubon keyboard layout, which seems to be optimized for your very situation—it places common letters toward a center grouping where they’re easy to click with less pointer travel.

On the many superpowers of the macOS Accessibility Keyboard:

The built-in Panel Editor gives you the ability to edit the panel or create new ones. This means you can create your very own keyboard layout! The Panel Editor is powerful. You can add not only the basic keys but also buttons which execute key combos, invoke system actions, input strings of text, and more.

On some unexpected accessibility benefits of supporting Markdown:

Note-taking apps like Bear that use Markdown for formatting are great because you can avoid using keyboard shortcuts or UI controls for formatting—and you added dedicated punctuation buttons to your keyboard so that you don’t need to press Shift to access characters like the asterisk or underscore.

On a tool for making your mouse behave like a touch event in macOS browsers:

The browser extension ScrollAnywhere lets you click and drag on webpages to scroll them—much like you would on a mobile touchscreen.

On how you can use voice commands to play video games:

Since Talon gives you the ability to verbalize keypresses, your mouse pointer is freed from typing duty. This is important for being able to play games that require camera control via the mouse.

On how tools can be combo'ed to turn a single mouse input into a whole stack of augmentations and efficiencies:

You started with nothing more than a one-button mouse. But from there you expanded the capabilities of that humble device, giving yourself keyboard access, shortcuts and macros, assistive tech tools, and powerful voice input capability.

Complex images can paint a thousand words | Paul Watson

What is the best way to provide descriptive text for images that are both complex and the main focus of a page? Paul has tried to tackle this on pages dedicated to their personal art, and found that the advice isn't necessarily that clear. The tl;dr would be: move the text onto the page itself and reference it from the image (using ARIA or alt attributes, or a combination).

I hadn't realised that the WAI has outlined seven image "types", nor that they have different suggested approaches based on the "type". I initially thought Paul's use of the "complex image" type felt wrong, but reading over the spec I agree; it's weird, but that's the best fit for these kinds of pages/content.

On disproving the weirdly common belief that you can't have more than 140 characters in alt text (this isn't Twitter!):

Myth busted: there is no character limit on “alt” text.

On concerns with overly long alternative text:

So you’re free to use as many characters in your
alt text as is necessary to describe an image, but it’s also worth remembering that someone using a screen reader apparently cannot skip listening to the alt text if it feels like it’s going on forever, so try not to be unnecessarily verbose.

On the official guidance from WAI (taken from the WAI tutorial on images):

In these cases, a two-part text alternative is required. The first part is the short description to identify the image and, where appropriate, indicate the location of the long description. The second part is the long description – a textual representation of the essential information conveyed by the image.

On how to deal with "Complex Images":

The general advice is to make long descriptions available to everyone to reach a wider audience with your content. For example, show the description as part of the main content.

Inclusive glasses frames | Reframd

I've always struggled to find glasses or sunglasses that fit my weird head, so I was intrigued by a company explicitly targeting body shapes that aren't well catered for. Unfortunately, the selection is pretty narrow and likely won't work with my level of prescription, but saving to check back in the future.