More from Jeffrey Zeldman Presents
I. In the early 2000s, an old friend with a new business wanted me to design his website, but his partner balked: “I can get two websites made in India for half the price,” the partner said. “Sounds like you should do that,” I replied, ending the negotiation. Rude fools were not clients I chose to pursue. The rude, cheap partner was later part of the self-selected posse of suck-ups and hangers-on who advised Elon M*sk on his invasion purchase of Twitter. It was the rude, cheap partner’s idea to strip Twitter users of note of their blue verification badges and sell meaningless blue verification badges to anybody willing to pay $8/month for the privilege. So, no blue verification mark or algorithmic support for the tweets of Stephen King, but blue “verification” and an algorithmic boost for Joey Knuckles, First of His Mother’s Basement. M*sk must have dug the idea, because he implemented it immediately—proving, as if we weren’t already drowning in evidence, that people with bad taste run in packs. The instant my old friend told me his former partner was responsible for the “pay for blue marks that mean nothing” plan, I recalled our abortive design negotiation from years before and was like, Yup, that tracks. At the time of the initial conversation, I believed most people involved in the creation of websites were motivated by altruism, aesthetics, and the desire to create a fairer world. And of course many are. Many, but far from all. I did not see how quickly fascism was infiltrating our trade. Perhaps infiltrating is the wrong word. Perhaps there had always been a Dark Side. II. In the 2010s, I co-founded a traveling web design conference with Eric Meyer, an internationally respected CSS expert, author, and lecturer, and founding member of The Web Standards Project’s CSS Samurai. Together, we crafted a single-track, holistic web design conference peopled by charismatic speakers who had made major contributions to the industry. Our events sold out immediately, without advertising. One night when our event was playing in a U.S. city, we held a party for attendees, and I invited a friend who lived in that town to join as our guest. I had known this man since his early 20s, and watched him grow into an industry-leading design consultant who was just then transitioning his business from a services to a product company. As his plus-one, he brought a young partner. The young partner did not know from Eric Meyer, Jeffrey Zeldman, any of our speakers, or any of the community projects to which we (including our speakers) devoted so much of our work and time. His first and only words to me were “Who are you?” He didn’t add a popular expletive to the question, but it was implied. As I began to answer his question, I watched his eyes wander. He was clearly scouting for somebody cooler to talk to. So I smiled, stopped talking, and, with a wave, invited him to sample the buffet and drinks. If he’d noticed that I’d stopped talking before finishing, it didn’t bother him. Off he ran. I am still friends with the man I’d invited to the party, although we haven’t spoken for a few years (from lack of opportunity, not lack of interest), and I have watched with happiness over the years as he has moved from success to success. Alas, he is still partners with the punk who came to our party to paint the roses black, and the punk has become even more famous (and more of a cult figure) than my friend. That’s fine, except that the punk has since blossomed into a fascist and racist with money and power; his latest project, although it comes cloaked in tech, is about removing brown people from Europe, I kid you not. I’m not saying every rude and entitled young man in tech grows up to be a fascist, but politeness or lack of it is a signifier, and maybe if you take an instant dislike to someone who acts like a jerk, you should trust that instinct. The post Tales o’ Tech: Suffering Fools appeared first on Jeffrey Zeldman Presents.
WordPress.com maker Automattic is expanding into education with a new, free product designed for teachers and their classes called WordPress.com Education. The suite for classrooms includes a full WordPress.com domain for each student, plus free domain names (on the .blog or .art domains) and plug-in support. Teachers can provide students with access to the program for free for the first year, without having to put a credit card down or enter a trial. This allows teachers to use the technology in courses that teach students how to build websites, or for other classroom needs such as group projects that incorporate website-building. Unveiling the product at its annual WordCamp US conference on Monday, the company noted that the new Student plan isn’t a stripped-down version of its product. It includes 6 GB of storage, backups, staging sites, and other tools, as well as support for plugins, SFTP/SSH, phpMyAdmin, and Studio Sync. — TechCrunch: WordPress.com targets the next generation of web creators with a free student plan The post For students who make websites 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. Or this: A Queer kid growing up isolated in Nebraska discovers a welcoming community on MySpace; then, one day, MySpace is no more, obliterating that carefully built community—with no chance of recovery. Or an author who’s spent years building a following on Twitter finds their posts there suddenly going unseen after a new owner with a radical political agenda biases the algorithm against their type of content (or even just against them personally, if that new owner is feeling particularly petty and peevish). If you’ve used the internet for more than a few days, you’ve experienced losses like these, along with the frustration and disillusionment that come when our favorite digital walled gardens become more and more about extracting financial value from us while providing less and less actual value to us. The new digital landowner class can also take away our favorite software, or change it in ways to which we never consented. The answer to this destruction of our shared digital commons by a handful of billionaires is the same as it has always been: own your content on the open web (your domain on a server, like mine on this one), and replace proprietary software with open source alternatives. That is the simple message of “Code for the People,” a short documentary film by Bao Nguyen whose July 1, 2026 preview screening I was privileged to attend last night at the Crosby Street Hotel in SoHo, NYC. As the film’s mini-website explains: We have traded a free internet for a collection of walled gardens. Today, a handful of digital landlords use algorithms to dictate our reality, while closed AI threatens to change the ways we connect. We are at a breaking point: we can either let gatekeepers continue to consolidate their power, or we can reclaim the open source spirit that built the web in the first place. A terrific panel discussion (photo above) followed the film viewing and amplified its themes of digital self-determination in the age of AI and enshittification. Over and over, in different ways, a creatively diverse panel of experts asked us what future we want for the web, and invited us to help create that future. (One of my favorite moments was when Anil Dash laughingly pointed out the irony of closed AI companies, who built their product by stealing the world’s IP without consent, threaten to sue any companies that try to reverse engineer their IP.) “Code for the Future” will stream for free beginning on July 9, 2026. The post The Human Story of the Open Web appeared first on Jeffrey Zeldman Presents.
SNOW WHITE is my jailer. She reclines near me while I work, watching closely for the moment I stand up. The instant I leave my desk, she directs me to her feeding area so I can open another can of cat food and arrange its contents neatly on a plate. She’ll eat a few bites, then walk away and resume her post by my desk. She is not here to eat. She is here to ensure my compliance. The uneaten remainder dries out on the floor; two hours from now, I’ll throw it away and open a new can with a different flavor. I’m vegetarian because I love animals. But as Snow White’s feeder, I’m responsible for the useless deaths of countless chickens, cows, and fish whose pulverized remains I’ve offered to Snow White and she has nibbled, then ostentatiously wasted, to prove to me over and over which one of us is in control. The post She’s the Boss. appeared first on Jeffrey Zeldman Presents.
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 universe. Real-world dark matter is part of the development of such a theory. When astrophysicists pointed their telescopes to the stars in the 1970s, they saw things that could not be explained. Either Newton and Einstein were wrong, or there was something they had missed. Dark matter was the proposed explanation: what if there is additional matter acting upon the universe that we simply cannot see? What I propose today is perhaps even more important than a physical theory of everything: a theory that can connect and explain the wide array of right-wing psychosexual neuroses. The theory is that right-wing political narratives are significantly influenced by porn—specifically interracial cuck porn—and conversely the narratives of said porn are significantly influenced by right-wing politics. Pornography is the unseen dark matter molding and shaping how the online right speaks and thinks about politics, on anything from immigration to transgender people to higher education. Call it the interracial cuck porn theory of everything. Read, bookmark, and share: The Interracial Cuck Porn Theory of Everything by Cameron Cummins-Smith The post Required reading: “The Interracial Cuck Porn Theory of Everything” appeared first on Jeffrey Zeldman Presents.
More in design
Four years ago, I wrote “How to pick the least wrong colors.” The gist is: picking a categorical color palette is an optimization problem. There’s no such thing as the right colors. But if you use the right cost function, and the right kind of hill climbing, you can at least get the least wrong ones. Since the original post I’ve been slowly picking away at improvements and new approaches. Now that we’re past the singularity, I’ve put a few coding robots on the job. It’s reassuring that many of my assumptions were good ones! The robots have been able to improve the code, bridging some of the gaps in my own knowledge. Today, I’m publishing an updated version of the algorithm as an npm package, along with a fancy GUI version. While there’s still more to do, I’m proud of how far I’ve been able to take it. What’s new New evaluators More controls The public API and a CLI What’s improved The annealing algorithm Configurable color space and distance metric The results One more thing Acknowledgements What’s new New evaluators Almost as soon as I published the first version, I realized that the cost function lends itself really well to modularity. Beyond my initial evaluation functions, I could design new ones, and provide a framework for anyone to plug in their own. As a recap, my original criteria for good categorical colors, mapped to evaluation functions: Similarity — a way of measuring the similarity of one palette to another, useful for providing art direction and getting brand alignment Energy — the colors should be different from each other so they aren’t liable to be confused from one another Range — the differences between the colors should be consistent so unintended groupings don’t appear Color vision deficiency — simulating the colors under different types of color blindness (red-green, blue-yellow, partial to full tritanopia) Here’s the new evaluators: JND — strongly reject palettes that have two or more colors that are too similar Avoid — the mirror image of the similarity evaluation, push colors away from a user-defined set Contrast — compares colors, keeping them above the WCAG AA color contrast floor. Can be used with a background color to maintain contrast on a chart’s background Saliency — uses color naming study data to prefer colors that are easy to name Name difference — the mirror image of saliency, avoiding colors that share names Each of these evaluators can be weighted, indicating the kinds of tradeoffs and priorities you’d like for your color palette. Additionally, the whole evaluator system is pluggable: you can define your own evaluators and have them drive the optimizer! More controls Colors can now be fixed in place, or pinned to a particular order, making it easier to load in existing palettes and optimize all or just some of the colors. Individual channels of each color can be locked, too, meaning you can keep the saturation or hue of a color fixed while optimizing its lightness. This works in any color space. The public API and a CLI The whole package is now a proper library, with a public API. This means: 1. the whole thing is now distributable through npm, with proper versioning, 2. there’s a CLI, making it much more ergonomic for both humans and agents. The API allows for full configuration of the algorithm, as well as loading in colors to optimize. Output can be in raw color values, CSS properties, or DTCG JSON. There’s also a new reportJndIssues endpoint that allows you to evaluate palettes without optimizing them, which is useful to compare a generated palette to commonly-used ones (like Observable, d3, IBM Carbon, and more). What’s improved The annealing algorithm When I wrote the initial algorithm in 2022, I had just learned about simulated annealing. I’ll be honest: I don’t know much more today than I did then. But with AI-assisted research, I was able to solve some questions I had about the initial implementation. Now, the algorithm picks the correct starting temperature based on some random initial samples. Mutation also happens in a scaled manner, so colors change less towards the end of the optimization schedule. Iterations can be capped to prevent very long runs, and the whole thing is much, much more performant. Configurable color space and distance metric The first version of the algorithm worked in RGB space. Now, it defaults to okhsl, but even this is configurable. Individual channels can be constrained to dial in the palette’s boundaries. Also, you can choose which color distance metric you’d like to use (but the library uses CIEDE2000 by default). This flexibility is powered largely by a move from chroma.js to culori. I’ve learned a ton about color spaces since 2022, so being able to mix and match color spaces with distance metrics has been extremely useful. The results The category-colors library reliably produces better results than other palette-generating tools and industry-standard color palettes. Compared to other palette-generating tools, category-colors has more control. Palettailor, for example, optimizes for pure color difference, without accounting for color vision deficiency. QualPal brings some of the optimization parameters, but doesn’t allow for steering towards or away from arbitrary colors. Scores at 8 colors ΔEMinimum ΔEworst of CVD Name differenceMinimum Uniformitylower is better category-colors 22.6 ±1.6 13.7 ±2.0 0.35 ±0.14 best in column 0.30 ±0.02 best in column QualPal 1.1.0 24.7 21.8 best in column 0.10 0.44 Palettailor 26.6 ±2.4 best in column 4.5 ±1.7 0.34 ±0.16 0.34 ±0.04 Colorgorical 15.8 ±3.3 4.1 ±1.6 0.09 ±0.06 0.42 ±0.03 All numbers are at 8 colors. Rows with ± are mean ± standard deviation over 10 palettes; rows without are deterministic and produce one palette. category-colors and Palettailor are 10 independent runs on the same seeds; Colorgorical’s row is 10 palettes from its authors’ own sampling script at equal criterion weights. QualPal was run with CVD on, matched bounds, and takes no seed. Name difference is Heer & Stone’s 1 − cosine; Colorgorical’s own interface reports a Hellinger distance instead. Shaded cells are the best value in their column. Compared to industry-standard palettes, category-colors can produce more optimal palettes, especially at high cardinality. Scores at 8 colors ΔEMinimum ΔEworst of CVD Name differenceMinimum Uniformitylower is better category-colors 22.6 ±1.6 best in column 13.7 ±2.0 best in column 0.35 ±0.14 0.30 ±0.02 best in column Okabe–Ito 21.3 8.8 0.06 0.34 Observable 10 18.4 0.6 0.40 0.34 Tableau 10 18.1 3.2 0.24 0.32 d3 category10 16.2 1.6 0.84 best in column 0.40 ColorBrewer Set3 13.7 1.9 0.16 0.32 IBM Carbon 12.8 5.0 0.11 0.34 Same run: 8 colors, 10 trials. Reference palettes are deterministic, so they're single values. Shaded cells are the best value in their column. One more thing I’ve built a UI that consumes the package and makes it easy to generate and optimize palettes. This has been the biggest request since I published the initial essay, so it’s the thing I’m excited to share. It’s ridiculously overengineered, but hey, what else are personal projects for? Acknowledgements Many measurements come from published research: Gaurav Sharma, Wencheng Wu and Edul Dalal for CIEDE2000; Gustavo Machado, Manuel Oliveira and Leandro Fernandes for the color vision deficiency simulation; Maureen Stone, Danielle Albers Szafir and Vidya Setlur for the size-dependent just-noticeable-difference result; Jeffrey Heer and Maureen Stone, whose color naming models and the c3 data from the Stanford Visualization Group power both the saliency and name-difference evaluators. Existing palettes: Masataka Okabe and Kei Ito’s Color Universal Design set; Matthew Petroff’s sequences; and Mark Harrower and Cynthia Brewer’s ColorBrewer. Other generators laid a lot of the groundwork: Kecheng Lu and colleagues (Palettailor), Connor Gramazio, David Laidlaw and Karen Schloss (Colorgorical), Johan Larsson (QualPal), and Chin Tseng, Arran Zeyu Wang, Ghulam Jilani Quadri and Danielle Albers Szafir (CatPAW). Andrew McNutt, Maureen Stone and Jeffrey Heer’s color-buddy has also been indispensable. Finally, Dan Burzo’s culori made it easy to make this library colorspace-agnostic.
This is part of a new experiment I started in an effort to document the process of making Niche design.
Weekly curated resources for designers — thinkers and makers.
Users parse a layout before they read its labels. Whitespace, borders, alignment, color, and motion determine what belongs together. When these cues fight the content, users attach the label, price, warning, status, or action to the wrong object. Proximity, similarity, enclosure, and the other Gestalt cues guide the eye, snapping visual chaos into clarity.
I miss this. Visiting a mill is such an enjoyable, often inspiring experience, yet I don’t do it as much as I used to. Perhaps because once you’d done one worsted weaver it’s hard to justify more. But we’ve never done silk. I did go to Vann... > Read more