Stop Copying Your Competitors
Copying your competitors feels safe, but the best it can ever deliver is mediocrity.
Copying your competitors feels safe, but the best it can ever deliver is mediocrity.
At The Web You Want event in Amsterdam last month, Léonie gave an absolutely fantastic talk. You can now read the whole thing: Accessibility is resistance!
She makes the very good point that generative tools are a necessary accessibility recourse when humans have failed to do their job properly.
Images without alt text? Somebody messed up. But this is damage that can be routed around with large language models.
So if you—like me—don’t like the idea of people using extractive generative tools made by the worst kind of people, pay heed:
If you want to resist AI, make accessibility part of everything you do, every decision you make, every product you design and build. Remove the need for people to use AI to compensate, and remember, accessibility is resistance.
Also last month, I wrote about enhancing images from a carousel to masonry using CSS Grid Lanes. Here’s the context:
Over on The Session, I added a little enhancement to the events and sessions listings recently. I make a call to the Google Places API to see if I can find a match for the venue, and if I do, pull in some photos.
Sidenote: right now there’s a major issue with this. None of the photos come with text descriptions. This is something I need to fix, and I’ve got some ideas on how to do that.
I was one of those people with a website that doesn’t have alt text for images. I was one of those people not doing their job.
The first fix I put in place was very much in keeping with the ethos of The Session. I added a form so that any member of the site can edit the alt text of the images in the carousel/masonry layout.
The Session is quite WikiPedia-like. Anyone can edit the track listings in the discography. Anyone can edit the details of any tune. Anyone can edit the details of any session or event. So it made sense to add one more thing that anyone can edit.
With that functionality in place, I put out the call:
If everyone were to take just one or two sessions or events and add alt text to the photos, it would really, really help make the site more accessible.
The community went to work and did a pretty good job.
But there are a lot images. I’d like to have a least some kind of alt text for all of them, even if it’s just a placeholder until someone gets around to adding something better.
I was going to have to use generative “AI”, wasn’t I?
Holding my nose, I investigated some alt-text-as-a-service APIs out there. I signed up for some trials and kicked the tyres. They were rubbish. I suspect most of them were vibe-coded.
The more I thought about it, the more I realised that I probably didn’t need the latest and greatest energy-guzzling large langauge models. Some good old-fashioned machine learning could do the trick here. I’m aiming to do a relatively straightforward transformation—image to text.
Check out the COCO project: Common Objects in Context. It’s a few years old now, but it’s basically a dataset that’s been trained on images.
Ah, but where did the training data come from?
All images in COCO were sourced from Flickr, a photo-sharing platform where users upload images under various Creative Commons licenses.
Works for me!
I found a model on Hugging Face that was created by Microsoft from the COCO data. Confusingly the model is called GIT. It’s nothing to do with version control. It stands for GenerativeImage2Text.
I downloaded the model and set to work creating a script to trawl through all those images and generate alt text if the image doesn’t already have one.
I should mention: the way that I store the alt text is not in a database, but in the file system. Every image has its own folder. Inside that folder there can also be a file called alt.txt.
So the script needed to loop through lots and lots of folders, generate alt text where needed, and save it into a text file in the same folder.
Python is the go-to language for working with models like GIT. But Python is not my strong suit, to put it mildly. And this was going to be a throwaway script that I was only going to use once. So I held my nose again and turned on Copilot in VSCode (I usually keep it switched off).
With the right instructions I was able to get a script that—crucially—I could read and understand. Then I switched off Copilot and had a shower to try to wash the shame away.
Long story short, the script worked.
The results are mostly fine. The alt text is functional. Sometimes it’s wrong, but not disastrously so. A human-generated image description will always be preferable, so any member of The Session can over-ride the placeholder alt text.
It took a few hours to loop through all those folders and generate all those text files. My laptop got hot. But doing it locally sure beats paying for tokens from the baddies.
While the utility is there, the current landscape of these frontier corporate models comes with massive ethical and environmental baggage. This is not a long term solution!
That’s exactly why my hope is that ethically trained open-weight models will eventually catch up and that in the next couple of years, we’ll have something with this level of capability that can run locally. That feels like a much better place to be with this technology.
What happens when leaders choose political expediency over science?
The post Stalin decided what was good science. Millions starved. appeared first on Jeffrey Zeldman Presents.
In preparation for my jaunt to a Greek island, I figured it would be good to have some Greek-adjacent reading material with me to peruse on the beach. So I scoured the shelves of my local library to find a modern retelling of a Greek myth that I hadn’t already read. That’s where I found Medea by Rosie Hewlett.
The book attempts to rehabilitate—or at least give context to—one of the women of Greek legends who has been cast as a villain. See also Clytemnestra, Elektra, and more.
On the face of it, the book succeeds. We get to see how Medea’s actions were driven by her circumstances. But while it’s entirely believable that that Medea was manipulated by a conniving Jason, this framing takes away her agency somewhat.
The writing is perfectly fine if a little bodice-rippy at times. It was a perfectly good beach read.
A tour of the many ways agency owners and freelancers in our community are quietly putting AI to work, drawn straight from our Agency Academy calls.
If I learned one thing in 25 years of running design and education companies, it’s that idealism isn’t a business strategy. If you wonder why my partners and I had to shut down organizations we and lots of you loved, refer to the previous sentence.
The post The Secret appeared first on Jeffrey Zeldman Presents.
Exactly one year from now, UX London 2027 will be wrapping up.
Mark your calendar: July 6th, 7th, and 8th, 2027. If you really want to be ahead of the curve, you can grab a very limited super early-bird ticket now before the price goes up.
I’m about to start putting the 2027 line-up together. The real reason why I’m mentioning an event that’s still a year away is that I’d like you to consider speaking at it. Yes, you.
Here’s the form you can fill out with your proposal. It can be a 30 minute talk or a 2.5 hour workshop.
Remember that UX London is a three-day event with each day having a specific theme:
So if you’ve got a topic that you think is particularly relevant to one of those days, be sure to mention that in your proposal.
It should go without saying that if your proposal is accepted, you will be paid to speak. Alas, I have to say it because there are some events out there that don’t even manage to reach that very low bar.
I’ll be honest and say I’m not that interested in hearing from people like me, a middle-aged white dude. We have more than enough opportunities to spout our opinions. I’d much rather hear from people from different backgrounds with different experiences.
Have a look at the most recent line-up to get an idea of the kind of folks you’re likely to see on the UX London roster. Feel free to contact any of the previous speakers to ask them how they found the experience. You can also peruse some pictures to get an idea of the vibe.
Oh, and if you want to give an entire talk about “AI”, there are plenty of other conferences for that. That doesn’t mean you can’t talk about large language models or other generative tools, just don’t make it the focus of the talk. UX London isn’t about specific tools. So you won’t see a talk about AI for the same reason you won’t see a talk about Figma. It’s what you accomplish with the tools that counts. Make that the focus of your proposal.
I’d love to hear from you so please, submit your proposal. Submissions close in December, but the sooner you submit your proposal, the better.
“Radharc álainn” I said. Beautiful view.
“Nach ea!” he replied. Isn’t it?
He sounded surprised to be addressed in Irish. We were, after all, very far from Erin’s shores. The beautiful view in question was of the bay of Loggos on the Greek island of Paxos. But I knew that this person was a fluent Irish speaker. That’s why I figured he wouldn’t mind a chat as Gaeilge while we were both strolling along.
I was talking with Liam Ó Maonlaí. We were both on Paxos for the same reason; the annual Irish Wings festival, a small gathering of Irish and Greek musicians. Liam was there to play. Myself and Jessica were there to listen.
Of course we were also there to soak up the sun, swim in the crystal clear water, eat Greek food, and savour the very relaxed pace of life.
We had a lovely chat with Liam and his partner Marion. I didn’t tell him that I went to see Hothouse Flowers on multiple occasions in Cork city in the 1980s. I’m sure he gets plenty of that. But I probably should’ve mentioned how much I really enjoy his programme Cuan an Cheoil. There’s nothing I like better on a Sunday afternoon than to relax with one of the black and white videos on YouTube, listening to music and conversation in Irish.
The island of Paxos is small and the village of Loggos is really small, so it wasn’t all that surprising that we’d bump into the Irish musicians there for the festival. We met Muireann Nic Amhlaoibh on the beach and again, she seemed really pleased that we spoke Irish with her. And it was also lovely to see our friend Dónal O’Connor who we’ll be seeing again very soon at his excellent Belfast Tradfest.
It was really nice to have the opportunity to speak Irish with three excellent musicians, all from different Irish-speaking regions; Liam from Dublin, Muireann from the Aran Islands and West Kerry, and Donal from the Oriel region of county Louth.
We also saw Neil Finn. I didn’t say anything to him. I don’t know if he speaks any Irish.
The web is still the best hope we have for a durable, shared memory. But it requires us to be gardeners, not merely tenants.
The post Memories Can’t Wait—or, How I Learned to Keep Worrying About the Web appeared first on Jeffrey Zeldman Presents.
Top task analysis is an excellent way of ensuring users can find the content and functionality they care about. What is more, it doesn't need to be demanding to run.
ON THIS DAY in 1971, Pamela Courson found Doors frontman Jim Morrison dead in the bathtub of their Paris apartment. The cause of death was heart failure. No autopsy was performed. Morrison was 27. A year before, a teenaged me had watched the Doors play live at Pittsburgh Civic Arena. Tension at the concert was […]
The post The End appeared first on Jeffrey Zeldman Presents.
STOP ME if you’ve heard this one: The members of an extended family spend years curating a shared online photo album. Then the website they posted on vanishes, flushing their collective memories away forever.
The post The Human Story of the Open Web appeared first on Jeffrey Zeldman Presents.
Branding that ignores the web quietly drags down your conversion rate, and most agencies build it that way.
The Vaster Wilds is a remarkable book. It somehow manages to be both harrowing and uplifting at the same time.
I had read one of Lauren Groff’s previous books, Matrix, and liked it well enough. But The Vaster Wilds is in a different league. It starts with urgency, suffering, and wonder, and that combination never lets up for the whole book.
The plot is decepetively simple. A servant girl escapes a starving colony in 17th century America—probably Jamestown—and runs through the woods in wintertime, desperate to survive. That’s pretty much it. But in that journey is all of life; nature red in tooth and claw, humanity even redder, and the transcendental power of the living landscape.
The descriptions of the protagonist’s inner world are just as vivid as the details of the forests, rivers, and mountains. The prose fairly sings with joy at a minor pleasure and then wails in woe at a horrifying brutality, often in the same paragraph.
It isn’t always an easy read. But it is always completely true to itself.
It started in Dublin. Myself and Jessica got there in the afternoon and I went straight to The Cobblestone in Smithfield for some tunes.
Then I went up the street to the headquarters of Na Píobairí Uilleann, a beautiful Georgian building on Henrietta Street.
I was there to deliver my talk on the making of The Session. There weren’t that many people there in person but quite a few people watched it live online. You can watch the video of the talk if you want. I’m pretty pleased with it. The few times I played some tunes on my mandolin, the acoustics were lovely!
The next day we took the train down to Cork and onwards to my home town of Cobh. The town was looking its best. The weather was nice and the Queen Anne was docked at the deep water quay.
We spent a lovely weekend hanging out with my mother, including a trip to Cork to see Michael Keegan Dolan’s latest dance piece, Naoi Déag Seachtó Cúig. It was joyous! Normally I’d get irrated by someone in the seat behind me tapping their foot, but everyone was tapping along to the classic first album by The Bothy Band.
On Monday morning Jessica flew back to Brighton, leaving me to spend the week at the inaugural Irish Mandolin Gathering.
When I saw that this event was going to be happening, I thought “I’m going! Wherever it’s going to be, I’ll make my way there.” Then I saw it was happening in Little Island and I couldn’t believe my luck! Little Island is halfway between Cobh and Cork, easily reachable on the local trainline.
So I spent the week having a very pleasant commute. This was when the temperatures were getting dangerously high in England, but remained within reason in Ireland. Whenever anyone at the Mandolin gathering complained about the heat, I couldn’t help pointing out that we were actually in the coolest place in Europe for that week.
The mandolin nerdery was excellent. Lots of deep dives into technique, lots of trying out other people’s instruments, and of course, lots of playing tunes. Seán, Macdara, and Marla did a fantastic job, especially considering that this was the very first one!
The inaugural Irish Mandolin Gathering culminated with a concert at The White Horse in Ballincollig, which was excellent but every time it was mentioned, I had that John Spillane song in my head.
Now I’m back home and feeling recharged from a thoroughly enjoyable week in Ireland. Next time I’ll be there will be for a week of learning Irish at Oideas Gael in Donegal—táim ar bís!
The trick isn't winning the argument about AI. It's handing the decision to the people who'll actually use it.
This is a collection of short stories by one of Ireland’s best playwrights.
I think you can tell that these stories were written by someone who’s at home with the stage. The dialogue really shines. And some of the stories feel like scenes in a play.
But that’s no bad thing. If most short stories are like mini-novels, why not have short stories that are like mini-plays?
Some of the stories are very short indeed, just long enough to convey the mood of the piece. That mood is often wistful, melancholy, or nostalgiac.
This collection comes with an equally brief introduction by the brilliant Louise Kennedy.
This slim volume makes for a great travel read. Slip it into your pocket and you’ll have an instant portal to a bygone time and place in the west of Ireland.
When my brother Pete and I were kids, and our parents were out of town, we ditched school for a week and cut an “album” by recording backing tracks to my dad’s reel-to-reel, then live overdubbing on different instruments and capturing the whole mess on a cassette recorder. We didn’t know what we were doing, […]
The post Underdubbed appeared first on Jeffrey Zeldman Presents.
If you do code-heavy talks in Keynote and want to syntax highlight the code, this might be for you.
CSS Grid Lanes has started to ship in browsers. It’s in Safari and behind a flag in Chrome and Edge.
It enables masonry layouts, where items get packed together in the most efficient way possible.
Unsurprisingly, I’m a fan of a layout tool where the browser does all the hard work. It very much aligns with the idea of declarative design; you specify the boundary conditions, and then browser does the maths and heavy lifting.
There’s a handy website called The Field Guide to Grid Lanes where you can play around with possibilities.
At the most recent CSS Day, Patrick Brosset gave a great talk showing what you could do with Grid Lanes. I immediately started playing around with it, and I spotted what I think could be a useful pattern…
Over on The Session, I added a little enhancement to the events and sessions listings recently. I make a call to the Google Places API to see if I can find a match for the venue, and if I do, pull in some photos.
Sidenote: right now there’s a major issue with this. None of the photos come with text descriptions. This is something I need to fix, and I’ve got some ideas on how to do that.
Anyway, these photos are just nice-to-haves so I’ve tucked them away into a details element with a simple summary like “Ten photos” or “Twenty photos”. If you open up that details element you get the photos in a horizontal swipable row. A carousel, if you will.
This works fine, but on larger screens I think it would be okay to show all the photos at once. That’s where Grid Lanes comes in.
Take a look at an event or a session in Safari to see what I mean.
Here’s the CSS that creates a carousel:
.gallery {
display: flex;
align-items: center;
inline-size: fit-content;
max-inline-size: 100%;
overflow-inline: auto;
scroll-snap-type: inline mandatory;
overscroll-behavior-inline: contain;
scroll-behavior: smooth;
scrollbar-gutter: stable;
}
.gallery > * {
flex-shrink: 0;
scroll-snap-align: center;
}
And here’s the media query that turns it into a masonry layout:
@supports (display: grid-lanes) {
@media all and (min-width: 56em) {
.gallery {
all: initial;
display: grid-lanes;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 0.5em;
}
.gallery > * {
inline-size: 100%;
}
}
}
I’m using all: initial to unset the previous styles, which is a bit of a sledgehammer but it works.
I think this could be a useful responsive design pattern. Masonry layouts are great for large screens but kind of rubbish for small screens where you end up with just a single column. Carousels aren’t much cop on large screens but maybe have their place on small screens where real estate is at a premium.
Oh, and needless to say, this is a progressive enhancement. If a browser doesn’t yet understand display: grid-lanes it continues to get the carousel layout.
I’m giving a talk this week.
Usually this wouldn’t be a big deal. I’ve been giving talks for over twenty years now. But this one is different.
I’m going to speaking at Na Píobairí Uilleann, the Society of Uilleann Pipers, in Dublin. They have a monthly series of lectures called Notes and Narratives all about Irish music, and they’ve asked me to deliver this month’s talk.
So this will not be my usual audience. I will be talking about a website, The Session, but I won’t be talking about the technology. There won’t be any mention of HTML, CSS, or JavaScript. Instead I’ll be talking about the origins of the site and how it—and its community—has evolved over time.
Oh, and at these Notes and Narratives talks, they also want some music interspersed to illustrate the points. So that’s something a bit different to my usual tech talks.
I’m not going to lie, I’m kind of nervous about this one. But I’m also excited. I’m genuinely honoured to be able to give a talk at such a fine institution.
I’m speaking on Thursday, June 18th at 8:30pm at the headquarters of Na Píobairí Uilleann, which is 15 Henrietta Street in Dublin. Doors open at 8pm. If you want to come along, tickets are €10/€5. The talk will also be streamed live online.
Wish me luck!
I give Apple a hard time. That’s mostly due to how they treat the web on their own mobile devices.
Though iOS ostensibly supports the ability for websites to be added to the homescreen, they make it so difficult for users to do, the functionality is practically worthless. It’s dispiriting to see the web so hamstrung by that decision.
The Webkit team has come in for other criticism too. For a while there, Safari was lagging so far behind in features that people were calling it the new Internet Explorer. Ouch!
But credit where credit is due. The upcoming version 27 of Safari is looking very good.
That’s not because it’s at the cutting edge of the latest web standards. Quite the opposite. Most of the changes listed for this release are bug fixes. That’s what I want to acknowledge and applaud.
Far too often a browser will rush out an implementation of an exciting new web standard that gets plenty of attention. But that initial implementation is rarely 100% correct. Then the next release rolls around and the focus has moved on to a different new web standard. The result is an ever-growing backlog of almost-but-not-quite-supported features.
Clearly the focus for Safari 27 was on that backlog. I bet that wasn’t an easy decision. Like I said, the kudos and recognition tends to go to the browser that ships new stuff, not the browser that goes back to fix long-standing issues.
Don’t get me wrong, there’s some exciting new stuff in Safari 27 too, like styleable select, but it’s great to see the focus on maintenance and repair:
If you look through the lists of features and fixes in Safari 27, you’ll notice that, although there are 58 brand-new features and 525 fixes — the largest pile of fixes in any Safari release in recent memory — most of what is released is not about new things.
Most of this work has been about existing features behaving more correctly, handling more edge cases, and fitting together with other features the way you’d expect.
This in sharp contrast to the most recent release of Chrome that shipped support for the prompt API despite opposition from other browsers and no positive signals from developers. I hope some Googler got a nice promotion for shoving a proprietary technology into a web browser, but they should be aware of the damage they’ve done.
At this year’s CSS Day, the represenatatives from Google Chrome were once again there to talk to developers and ask what we wanted them to prioritise. Those requests rang very hollow. Why should we waste our time and energy telling a browser team what we need if they’re just going to ship whatever crap they want?
The truth is that the folks from Google who were canvassing opinions from the attendees at CSS Day are not the same people who torpedoed the browser with unwanted proprietary tech. This team has spent years doing excellent outreach, documenting web standards, and meeting with developers. They built up an impressive amount of trust, respect, and goodwill.
That stock has now plummeted.
So well done to the Webkit team for Safari 27. And shame on the Chrome team for Chrome 148.
The transition from phantom childhood to phantom adulthood feels like it could be a transition for us as well.
Look back in anchor tags: a partial review of my site’s 31-year visual history before diving into the new design.
The post Remembrance of zeldman.coms past appeared first on Jeffrey Zeldman Presents.
I've spent years selling quick wins to clients. But, I've started to wonder if I've been quietly part of the problem.
She is not here to eat. She is here to ensure my compliance.
The post She’s the Boss. appeared first on Jeffrey Zeldman Presents.
A way to create a diagonally split header cell without mangling accessibility, I hope.
Cameron Cummins-Smith’s grand unifying theory connects the far right’s seemingly disparate obsessions—from trans panic and great replacement theory to anti-feminism and white birth-rate anxiety—into a single ideological system fueled by pornographic narratives: In physics there is this idea of a theory of everything: a single, unified model that can describe all physical phenomena in the […]
The post Required reading: “The Interracial Cuck Porn Theory of Everything” appeared first on Jeffrey Zeldman Presents.
“GIs in Paris” by Floyd Davis. Davis served as a Life Magazine artist during WWII, where he was stationed in Paris, France.
The post Lest we forget appeared first on Jeffrey Zeldman Presents.
Acquiring a new customer costs about five times more than keeping an existing one. So why do organizations still obsess over the top of the funnel?
AI is doing more than making us faster. It's changing the fundamental nature of what our work is, and the sooner we adapt, the better.
A practical use case for rendering HTML+CSS to a canvas, an emerging API being previewed in Chrome.
UX is under pressure. A proactive maturity audit gives you a voice before leadership makes decisions about your team without you.