<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/rss/style.xsl" type="text/xsl"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Web Weekly</title>
    <description>A weekly newsletter about web development, tooling, and the latest trends in the web platform.</description>
    <link>https://webweekly.email</link>
    <atom:link href="https://webweekly.email/rss.xml" rel="self" type="application/rss+xml"/>
    <language>en-us</language>
    <lastBuildDate>Thu, 10 Sep 2026 14:25:17 GMT</lastBuildDate>
    <managingEditor>stefan@stefanjudis.com (Stefan Judis)</managingEditor>
    <webMaster>stefan@stefanjudis.com (Stefan Judis)</webMaster>
    <generator>Web Weekly Archive Script</generator>
    <item>
      <title>Web Weekly #199</title>
      <link>https://webweekly.email/archive/web-weekly-199/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-199/?ref=ww-rss</guid>
      <pubDate>Tue, 08 Sep 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #199 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Do you know how Interop 2026 is doing right now? Will you use the new CSS <code>progress()</code> function? And do you know how ESM module resolution really works?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Pawel&quot; title=&quot;Kalabrese - Fresh And Foolish&quot; youtube=&quot;tvoGb76yUEk&quot;
Is it only me, but this one reminds me the vibes of early Roisin Murphy? Love the vocal and jazzy parts on this one.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>two more songs</strong> left in the queue.</p>
<hr>
<p>How much controversy can there be around dark/light mode toggles? Turns out, a lot. Lea Verou kicked off a whole thing. People have opinions on these little two- or three-state toggles.</p>
<p>So, <a href="https://lea.verou.me/blog/2026/dark-mode-toggles/">Lea started the discussion by arguing that website visitors don't care about dark mode toggles</a> (I agree) and that they only reach for them when something's off.</p>
<blockquote>
<p>A dark mode toggle is a temporary comfort adjustment. [...] It’s situational, it’s immediate, and it’s usually about the environment you’re in rather than a considered long-term stance on color schemes.</p>
</blockquote>
<p>From there, she argues that a dark mode toggle should only have two options: the system preference (shown as dark or light) and the opposite. That's smart. Whenever things are different from the system, you can store the preference that's not the system default. If it matches their general settings, there's nothing to do, and if you go back to the system setting, you clear the preference. This approach seems reasonable to me at first sight.</p>
<p><a href="https://www.bram.us/2026/08/18/the-case-for-tri-state-dark-mode-toggles/">Bramus disagreed, though</a>.</p>
<blockquote>
<p>When building these types of control, I think that one of the main goals here should be to keep things predictable for users.</p>
</blockquote>
<p>And well, that's a strong point, too, I'd say. A little sun icon that actually means &quot;system preferences&quot; is a bit tricky to understand if you really care about light and dark modes. I tend to agree here, and it seems like a &quot;Agree to disagree.&quot; case, but the whole community had feelings about this. <a href="https://lea.verou.me/blog/2026/dark-mode-toggles-2/">Lea shared more feedback in a follow-up post</a>. And it closed with a banger:</p>
<blockquote>
<p>And then it dawned on me: all these persistent dark mode toggles I had seen, literally all of them have been on developer-facing sites!</p>
</blockquote>
<p>And I think that's what I came to conclude, too. It's an interesting discussion to have but I really don't think normies care too much about two, three, or no dark/light mode states. Things can always be better and smoother, but for this case I think it's just us nerds who love discussing these things. 😅</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mv3npoc2pk2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/117241339958333038">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/feed/update/urn:li:ugcPost:7503446481413066753/">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<h2>Web Weekly Housekeeping</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5cKUuPfThdoFrcmAYkcLg7/8963473cf1c01407dbfb58c5265fff66/Screenshot_2026-09-07_at_15.57.41.png" alt="This week's bag of Karma points goes to Torsten!"></p>
<p>I've been out conferencing for the last two weeks, so Web Weekly had to be put on the back burner for a bit. But today marks edition <code>199</code>. I'm not sure if I'll do something special for <code>200</code> but man... this newsletter has been going for a looooooong time.</p>
<p>A big thanks this week goes to Torsten. 57 people help me out with a little bit of money now. Thank you all! These small gestures really keep me going. If you also want to support indie publishing, you can do so on <a href="https://www.patreon.com/c/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference in these hard times of AI slop and low-effort web creation.</p>
<h2>No code</h2>
<ul>
<li><a href="https://sive.rs/fit">&quot;Building without predicting&quot;</a> → &quot;I love that this home feels wrong for others, and just right for us.&quot;</li>
<li><a href="https://seths.blog/2026/08/the-amazon-tax/">&quot;The Amazon Tax&quot;</a> → &quot;My publisher is paying Amazon a dollar to show you an ad for the book you went to buy in the first place.&quot;</li>
<li><a href="https://www.robinwieruch.de/ai-output-someone-elses-input/">&quot;Your AI Output Is Someone Else's Input&quot;</a> → &quot;So now I run one test before I send anything, and it catches almost everything: <strong>would I be glad to receive this</strong>?&quot;</li>
</ul>
<h2>Peek into the future: a new universal selector?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2jZ6M5jW8eKr89e1vaFt0t/73483a6a87a0c26e6943eea265eff784/code-shot-btn-wildcard.png" alt="/* Matches , , ... / .btn- {   /* ... */ }"></p>
<p>The CSS working group came up with a new way to select elements matching prefixed classes. You can think of the Class Prefix Selector (<code>.prefix-*</code>) as a new way to select <code>btn-primary</code>, <code>btn-secondary</code>, <code>btn-whatever</code>, and whatever <code>btn-</code> class comes next.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/08/20/the-future-of-css-target-multiple-classes-with-the-class-prefix-selector/&quot;&gt;See what's coming&lt;/a&gt;</p>
<p>I like it, but many are skeptical, too. Here's <a href="https://anselm-hannemann.com/writings/on-the-suggested-css-universal-class-selector">Anselm with a whole list of questions and feedback</a>.</p>
<h2>Well-known <code>change-password</code> URLs</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3WCxv7KFjRSEGEfr30E3Hs/ba6380fe0a001ad488777e76e3d682dc/code-shot-well-known-change-password.png" alt="GET /.well-known/change-password HTTP/1.1 Host: example.com  HTTP/1.1 302 Found Location: https://example.com/account/security/password"></p>
<p>Quick reminder, if you're working on a SaaS product that requires a login, please check if you've defined the well-known URL to change passwords. Password managers will check <code>/.well-known/change-password</code> to offer a quick way to change passwords. It's a tiny thing, but it makes life easier for everyone.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.w3.org/TR/change-password-url/&quot;&gt;Check the spec&lt;/a&gt;</p>
<h2>Interop proposals for next year</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/sQ4olyL3jfJOXpd88lXC1/b528404cbfee29b3648cc04606767dd7/image-shot-interop-2026-progress.png" alt="Graph showing the support of interop features across browsers. Chrome/Edge are leading, followed by Firefox and Safari."></p>
<p><a href="https://wpt.fyi/interop-2026">Interop for 2026 is in full swing</a>, but do you remember what was included? Let me show you my favorites and where we are at right now.</p>
<ul>
<li>Container Style Queries: 100% interop</li>
<li>CSS <code>contrast-color()</code>: 100% interop</li>
<li>CSS anchor positioning: 99.4% interop</li>
<li>CSS <code>attr()</code>: 99.7% interop</li>
<li>Custom highlights: 98.8% interop</li>
<li>Media pseudo-classes: 100% interop</li>
</ul>
<p>I know there's some criticism about Interop, but I still think it's a great initiative. Not surprising, but still cool to see: Chromium is leading and has almost finished all its 2026 promises. We're in September, so that's cool. Firefox and Safari aren't that far behind, though.</p>
<p>But what should be included next year? What features are you missing on the web? We can all now propose <a href="https://github.com/web-platform-tests/interop">focus areas for Interop 2027 on GitHub</a>. If you want to get involved, now's the time.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://github.com/web-platform-tests/interop/blob/main/proposal_guide.md&quot;&gt;Submit a focus area&lt;/a&gt;</p>
<h2>A new syntax highlighter in town</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3nlKM6EDr9quxXHyJy11Xm/c95f676822d2f42d4c7de6e909fe7afa/code-shot-micro-lighter.png" alt="micro-lighter data-syntax-theme=github line-numbers controls=copy   precodeCode goes here/code/pre /micro-lighter"></p>
<p>I'm still guilty of not using &quot;span-free syntax highlighting&quot; on my blog. And now there's a new custom element to get colorful code on your pages with a single import. Dave explained how and why he came up with <a href="https://github.com/davatron5000/microlighter">the <code>microlighter</code> project</a>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://daverupert.com/2026/08/microlighter/&quot;&gt;Drop the spans&lt;/a&gt;</p>
<p>And if you want to have something to compare <code>microlighter</code> with, <a href="https://andreruffert.github.io/syntax-highlight-element/">check out <code>syntax-highlight</code></a> which highlights code blocks using the CSS Custom Highlight API, too.</p>
<h2>The wonderful weird web – Cows on a roadtrip</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3M1grXe43o74vKuDO5AweK/00e78b5a0113d5b74c5952ada8426a6e/Screenshot_2026-09-07_at_17.38.09.png" alt="Cows on a field surrounded by some broken cars."></p>
<p>I don't know why this exists, but the randomness makes me smile. And no, no cow will be harmed here!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://screen.toys/roadtrip/&quot;&gt;Go on a roadtrip&lt;/a&gt;</p>
<h2>Module resolution explained</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7aLFGHzvAv8qbijAWEKCxc/951e2f980e6d3a11d31465c1ca2b2a90/code-shot-compare-cjs-live-binding.png" alt="Comparison of module resolution and live bindings."></p>
<p>This post covers common footguns when it comes to module resolution. It compares CommonJS and ESM modules, and while CommonJS and the good old <code>require</code> slowly but surely lose importance, it's good to know about live bindings, import hoisting, and general module internals. Highly recommended.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://blog.gaborkoos.com/posts/2026-08-14-Your-Modules-Are-Lying-to-You/&quot;&gt;Import all the things&lt;/a&gt;</p>
<h2>New things coming to HTML</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1TuAKGMCjFQB0xCbrfEEbw/444c582187a0320e3a01fccd180bc50d/code-shot-usermedia.png" alt="usermedia id=media-ctrl   buttonEnable camera and microphone/button /usermedia"></p>
<p>Chris came up with a real banger. Have you seen all these new HTML elements entering the platform? There's <code>&lt;geolocation&gt;</code>, <code>&lt;usermedia&gt;</code>, and <code>&lt;install&gt;</code>, just to name a few. Granted, many of these are Chromium-only, but I like where we're heading here.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://blog.master.dev/new-things-you-should-know-about-html-here-in-mid-2026/&quot;&gt;Discover the new HTML&lt;/a&gt;</p>
<p>And if you want to dive deeper into <code>&lt;geolocation&gt;</code>, our <a href="https://piccalil.li/blog/a-look-at-the-geolocation-html-element-and-how-it-works/">friends at Piccalilli released a deep dive</a> and <a href="https://developer.chrome.com/blog/chrome-153-beta?hl=en#capability_elements_camera_and_microphone">Chrome has some more new elements already in the making</a> (<code>&lt;microphone&gt;</code> and <code>&lt;camera&gt;</code>).</p>
<h2>AI;dr</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6lQvKd423sF4CQSdalrRf9/b7419b685456f96af8e7d302154cef59/Screenshot_2026-09-09_at_12.47.02.png" alt="AI;DR - abbr. AI; didn't read. Reply earned when AI-written text is sent with zero human-editing."></p>
<p>AI remains the stickiest conversation topic I've ever seen. <em>It even tops the recent German state elections. #fckafd</em> It's simply exhausting. Here are some things you might enjoy.</p>
<ul>
<li><a href="https://www.rickmanelius.com/p/aidr-ai-didnt-read">AI;DR (AI; Didn’t Read)</a></li>
<li><a href="https://dontpastetheai.com/">Don't paste the AI, please.</a> (it's a perfect single-URL reply and you know that I love these)</li>
<li><a href="https://gruhn.me/blog/2026-08-03/">Don't be a meat proxy</a></li>
<li><a href="https://noaifridays.com/">No AI Fridays</a></li>
</ul>
<h2>Things to put into your <code>head</code> in 2026</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1jo7SnHGDQdjl39F4DUEPm/6bd7db043f69bc127c7079a576e413f8/image-shot-html-boilerplate-2026.png" alt="My HTML boilerplate in 2026"></p>
<p>Manuel shared his current HTML boilerplate for new projects, and you can probably borrow some things for your own projects from it.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://matuzo.at/blog/2026/html-boilerplate&quot;&gt;Set things up&lt;/a&gt;</p>
<h2>TIL: <code>@property</code> changes property computation</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5rnhwqfklAp6THRYyof5Ck/0ffd6db617f8831b9e6e98b522cade4d/code-shot-compare-sibling-index.png" alt="div/div div class=second-item   p…/p /div  .second-item {   --index: sibling-index();   &amp; &gt; :first-child {     /* 👇 what's ? */     scale: var(--index);   } }"></p>
<p>Well, here's Jake sharing yet another detail about custom properties that I'm sure not many people know about. It's funny how many footguns can show up in a &quot;simple variable system&quot;. Years ago, I stumbled over a surprising <code>!important</code> behavior when using custom properties.</p>
<p>Either way, Jake's article is great. Go and read it. I'm sure you'll learn something!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jakearchibald.com/2026/css-custom-property-compute-time/&quot;&gt;Compute properties&lt;/a&gt;</p>
<h2>Random MDN – <code>Server-Timing</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5wJuU5CYYapU5nlTkzFkAe/822bbf04aa11f59458e446ff560ea008/code-shot-server-timing.png" alt="// A metric with a name only Server-Timing: missedCache  // A metric with a duration Server-Timing: cpu;dur=2.4"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>If you're monitoring your site's performance and you have some server-side processing at play, you might wonder how much time was spent on a certain task in the backend. The <code>Server-Timing</code> HTTP header allows you to make this time visible in the frontend via a PerformanceObserver.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Server-Timing&quot;&gt;Track server performance&lt;/a&gt;</p>
<h2>TIL recap – Hide critical commands from your terminal history</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1By9VqNe0JPJIH4Wu2vZuJ/0e57d25e68ea11466872c89c31fa6b62/code-shot-history-leading-space.png" alt="# command goes into the history $ delete everything  # command does not go into the history $  delete everything # ^ note the leading space"></p>
<p>If you're wrangling with critical commands and lots of environment variables, you probably want to avoid all of them entering your shell history. A preceding space character might help you out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/a-preceding-space-prevents-dangerous-commands-from-going-into-history/&quot;&gt;Keep your history clean&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline: <code>progress()</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4LLlJheIzFSlYbjxRrBn8J/065d70379e96ec7549da9688c8f8c51c/support-matrix-firefox-155.png" alt="Support matrix for Firefox 155 showing that  went into baseline."></p>
<p>With <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/155">Firefox 155</a>, released September 1st, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/progress">the <code>progress()</code> CSS function</a> became Baseline newly available.</p>
<h2>Classifieds &amp; friends</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6N8E7BSDwSy9928rctxiZC/34279a9856b634fd16409eb8be976587/image-shot-polypane-30.png" alt="Polypane 30: Playgrounds, Side Panel extension API, updated video recording and Chromium 152"></p>
<p>Polypane hit version 30 and it's a massive release. If you've been on the fence about using a browser built for web development, you should check it out right now.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://polypane.app/blog/polypane-30-playgrounds-side-panel-extension-api-updated-video-recording-and-chromium-152/?ref=webweekly&quot;&gt;Give Polypane a try&lt;/a&gt;</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/vercel-labs/visual-json">vercel-labs/visual-json</a> – The Visual JSON Editor.</li>
<li><a href="https://github.com/pwa-today/pwa-check">pwa-today/pwa-check</a> – Make sure your PWA looks, feels, and behaves like a real app.</li>
<li><a href="https://github.com/nkzw-tech/codiff">nkzw-tech/codiff</a> – A fast local diff viewer.</li>
</ul>
<h2>Thought of the week</h2>
<p>Yep, <a href="https://joshcollinsworth.com/blog/productivity">I can confirm this holds</a>. 😅</p>
<p>::: highlight quote</p>
<blockquote>
<p>The less you understand, the more you trust AI. But the more you trust AI, the less you understand.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 57 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #198</title>
      <link>https://webweekly.email/archive/web-weekly-198/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-198/?ref=ww-rss</guid>
      <pubDate>Sun, 16 Aug 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #198 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard of the new Git <code>history</code> commands? Are you overwhelmed by Chrome's performance profiler? And do you use the <code>inert</code> attribute in your sites?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Paul&quot; title=&quot;Wet Leg — Tiny Desk Concert&quot; youtube=&quot;AzUHNjKMeV4&quot;
I recently learned about the band Wet Leg when I saw them perform on NPR's Tiny Desk on YouTube. Their album moisturizer has been on repeat often since then.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>three more songs</strong> left in the queue.</p>
<hr>
<p>I've been cleaning up some tabs the last couple of days and even though I'm no font person, here are some fonts that might come in handy in the future.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7bVHNoWCw2Ko9DcOCRyjDy/a77c9fff8d5d31023fcd0ed97add2878/image-shot-variable-font-icons.png" alt="The charts below some controls. One bar chart, a sparkline and a pie chart."></p>
<p><a href="https://franktisellano.github.io/datatype/">Datatype is a variable font</a> that turns text into charts. 🤯 I've got no idea how this works technically, but it can definitely be useful for inline graphics or sparklines. Disclaimer: be aware of accessibility issues. You should probably go with a <code>role=&quot;img&quot;</code> and <code>span</code> combination when using it.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5colPyaVYARqmhU61gppL6/192af790a8b5c4532cd4adfbfb1ab201/image-shot-redacted-script.png" alt="Squiggly lines that look like a paragraph and a heading."></p>
<p><a href="https://fonts.google.com/specimen/Redacted+Script">Redacted Script</a> is a font that looks like hand-written placeholder text. I'd love to see a skeleton placeholder with it. 😅</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2EQaE5kSBbPimB6u1qanIb/5a20e16c8770f1e5dcd6d4055f7f3db3/image-shot-redacted-blocks.png" alt="Some black blocks on white."></p>
<p>And if that's too fancy, <a href="https://fonts.google.com/specimen/Flow+Block">Flow Block</a> does the same but without the handwriting.</p>
<p>Maybe I should sit down one day to understand how all this font magic works...</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mtdm5ci5622p">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/117115133639546473">Mastodon</a></li>
<li>💼 <a href="https://lnkd.in/p/dfr6PURA">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<h2>Web Weekly Housekeeping</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/63q94PyOdWKFwXUT0zpe0e/7af5a717e11d0217c3aab7df48533747/web-weekly-supporters-56.png" alt="This week's bag of karma points goes to Nadja and Charles!"></p>
<p>This week's summer bag of karma points goes to Nadja and Charles, who started to support Web Weekly financially. This brings the supporter count to the amazing number of 56.</p>
<p>After subtracting the cost of sending and hosting, Web Weekly now makes around $160 per month. Thank you all for supporting this newsletter! ❤️</p>
<p>If you enjoy Web Weekly, give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference in these hard times of AI slop and low-effort web creation.</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7jDHpSvlTh8PzcC6oyhioo/a2d709abb6ce3ba1a409b44db16c1e00/image-shot-firefox-wasm.png" alt="Firefox in WebAssembly"></p>
<p>There's nothing to see here, it's just a browser running in your browser.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.puter.com/labs/firefox-wasm/&quot;&gt;Spin up Firefox&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://steve-yegge.medium.com/the-last-technical-interview-bc13ddcf4564">&quot;The Last Technical Interview&quot;</a> → &quot;Interviewing, it turns out, is a big game of darts. A “do I like you” dating round.&quot;</li>
<li><a href="https://blog.senko.net/code-was-never-the-hard-part-is-an-insult-to-all-programmers">&quot;'Code was never the hard part' is an insult to all programmers'&quot;</a> → &quot;Your role and your responsibilities will be changing. Be willing to invest time and energy into better understanding fields or roles adjacent to yours.&quot;</li>
<li><a href="https://pydantic.dev/articles/the-human-in-the-loop-is-tired">&quot;The Human-in-the-Loop is Tired&quot;</a> → &quot;Yes the code (sorta) writes itself, but the human reviewing, directing, and course-correcting feels worse, not better.&quot;</li>
</ul>
<p>The &quot;No code&quot; section turned out to be rather technical this week. 🫣 If you have good articles outside of the tech bubble, shoot them my way!</p>
<h2>The experimental <code>git history</code> command</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1dOzj5j33u42ozLHj5K5Az/596d79568dac8caeb384e84a5391b848/code-shot-git-history-fixup.png" alt="$ git history fixup ghi9012"></p>
<p>Git ships <a href="https://git-scm.com/docs/git-history">a new <code>history</code> command</a> that makes it easier to change and fix commits. If you dislike interactive rebasing, you'll really like this one.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://lalitm.com/post/git-history/&quot;&gt;Change history&lt;/a&gt;</p>
<h2>Element states in JavaScript and (!) CSS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/117UpNofIv4FWtvjp3SlmN/8bb1f4d718bc397c9bf2385d76eec26d/code-shot-focus-visible-matches.png" alt="element.addEventListener(&quot;focus&quot;, (event) =&gt; {   if (event.target.matches(&quot;:focus-visible&quot;)) {     /* Do something */   } });"></p>
<p>I really liked this one. Daniel put CSS states (<code>:focus-visible</code>, <code>:popover-open</code>, <code>:fullscreen</code> etc) next to possible JavaScript implementations. He also went into the fairly new <code>event-trigger</code> CSS props and that's some fancy stuff!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/css-states-and-javascript-events/&quot;&gt;Tailor to state&lt;/a&gt;</p>
<h2>New in Edge: network efficiency guardrails</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4tT42gUbMcWDbeZZ6igfFv/c43a80af9b9aadb95a44581ee1b2c7e9/code-shot-network-guardrails.png" alt="Document-Policy: network-efficiency-guardrails; report-to=neg-endpoint Reporting-Endpoints: neg-endpoint=&quot;/neg-reporting/&quot;"></p>
<p>I dig this a lot! Edge now ships an experimental feature that warns you about and monitors network activity that isn't optimized, like uncompressed assets or large images.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.debugbear.com/blog/network-efficiency-guardrails&quot;&gt;Stay fast&lt;/a&gt;</p>
<h2>Understand the performance profile</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2VvQ9GoAzUzHOFOKvYaikT/6485c2b846a7028bcb0213fa3b7a59ee/image-shot-parallel-waterfall.png" alt="A profile network waterfall."></p>
<p>If you're intimidated by the Chrome DevTools performance tool, you'll dig this one. Joan put together a nice explainer about all the details you need to know!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://perf.reviews/profile-guide&quot;&gt;Get into it!&lt;/a&gt;</p>
<h2>The <s>wonderful</s> creepy weird web – cookie-less fingerprinting</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3fwk21a4CD3LgLuWbrUMSV/29223c9c9e4c82c18a16c69c7011968b/image-shot-cookie-newsletter-intro.png" alt="For years, everyone online has known the deal: websites can fingerprint you. Identify you. Follow you around.  So we decline the cookie banners. We hunt for the reject all button. We feel a little safer. Modern browsers don't really need the cookie anymore."></p>
<p>I'd say I was pretty aware of all the possibilities and information my browser shares about me, but it's still wild to see all this data in black and white.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://kuber.studio/cookie/&quot;&gt;Know your fingerprint&lt;/a&gt;</p>
<h2>On overflowing images</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7hoKgmliuduijiEPDZmvtU/57a41014caeb905c5ec5233df2241d99/image-shot-jellyfish-overflow.png" alt="A container with a red border showing that image can overflow. "></p>
<p>Here's Temani yet again doing Temani things explaining how to tweak and adjust the overflow of individual images using <code>object-fit</code> and <code>object-position</code>.</p>
<blockquote>
<p>The <code>&lt;img&gt;</code> element (the HTML element) is the “container”, and the image resource (the actual image) is loaded inside that “container” and becomes the “content”. We have our container-content relation so we can talk about overflow.</p>
</blockquote>
<p>It's a great read to understand <code>img</code> fundamentals.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://master.dev/blog/something-nobody-told-you-about-the-image-element-it-can-overflow/&quot;&gt;Understand images&lt;/a&gt;</p>
<h2>View transitions block interactions</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/21TYP2lYzKt9ESd435GV4b/4150ebac815c8d408b9e25aa361a5675/code-shot-view-transition-none.png" alt=":root {   view-transition-name: none; } ::view-transition {    pointer-events: none; }"></p>
<p>Have you ever noticed that &quot;things become unclickable&quot; when a view transition is running? If you're running long animations, Chris shared what you can do about it.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://master.dev/blog/view-transitions-careful-not-to-make-stuff-unclickable/&quot;&gt;Keep things interactive&lt;/a&gt;</p>
<h2>Gap decorations are rolling out — some links</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/50Hebbqa1EfuX5sOrB1eyX/e643b72564f37b7915dd034e47e72108/code-shot-gap-rule.png" alt=".decorated {   grid-template:        repeat(auto-fill,minmax(30px,1fr))/       repeat(auto-fill,minmax(30px,1fr));   gap: 5px;   rule: solid;   rule-color: red, red, blue;   rule-width: 1px, 1px, 3px; }"></p>
<p>Since releasing the Web Weekly redesign, I've been waiting for CSS gap decorations to ship across browsers, because the design includes plenty of borders, and styling everything across viewports caused a mild headache.</p>
<p>CSS gap decorations are shipping in Chromium already. If you want to dive deeper, here are some links.</p>
<ul>
<li><a href="https://css-tricks.com/css-gap-decorations-now-available/">Gap Decorations Are Now Available, Here’s What’s New</a> (to get started)</li>
<li><a href="https://master.dev/blog/lets-play-with-gap-decorations/">Let’s Play With Gap Decorations! </a> (to get very fancy)</li>
</ul>
<h2>Visual design rules</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7AqQSjK9GXmpR8MaZe5Zzw/8fd141df62fb40e42a569b0f259b6e9a/image-shot-visual-design-rules.png" alt="Visual design rules you can safely follow every time. You do not have to follow these rules every time. If you have a good reason to break any of them, do. But they are safe to follow every time."></p>
<p>I'm pretty sure I read this post years ago (seems to have been extended since) and I'm still following some of the rules. These easy-to-remember rules will help you out if you don't have an eye for design.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://anthonyhobday.com/sideprojects/saferules/&quot;&gt;Prettify things&lt;/a&gt;</p>
<h2>Random MDN – <code>inert</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5O1H12IN54iygQTUykfynp/fb9acb2310c01c2d0ca162e1313b16f7/code-shot-inert-attribute.png" alt="div inert   label for=button2Button 2/label   button id=button2I am inert/button /div"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>If you're dealing with elements that shouldn't be accessible or reachable at all, the HTML <code>inert</code> attribute helps out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Global_attributes/inert&quot;&gt;Make elements inert&lt;/a&gt;</p>
<h2>TIL recap – <code>@keyframe</code> animations in the CSS cascade</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6sCrCJjddCCKIG89KKr7Xb/77125a2f0e67eee0d194f9bb37bd51c3/image-shot-cascade-order.png" alt="The cascade determines what properties to apply to an element: 1. user-agent (browser) 2. user 3. author (developer) 4. CSS keyframe animations 5. author (developer) !important 6. user !important 7. user-agent (browser) !important 8. CSS transitions"></p>
<p>Did you know that keyframe animations have a special place in the CSS cascade? No? Then this post is for you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/keyframe-animations-have-a-special-role-in-the-css-cascade/&quot;&gt;Animate&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4Vw53D20YyrI6GlvpnPZdF/8cf9a5958783e2698b51cdfb1dfb48ed/code-shot-baseline-fromasync-avif-has.png" alt="Three new baseline widely available features: Array.fromAsync, avif images and :has()"></p>
<p>There doesn't seem to be a new feature that recently went on the baseline, so let me share three things that just went baseline widely available! 🎉</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fromAsync">JavaScript: <code>Array.fromAsync()</code></a></li>
<li><a href="https://caniuse.com/?search=avif">Images: the <code>avif</code> format</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:has">CSS: <code>:has()</code></a></li>
</ul>
<p>I might be getting old, but it still feels like these features landed yesterday.</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/overflowy/make-look-scanned">overflowy/make-look-scanned</a> – Makes PDFs look scanned.</li>
<li><a href="https://github.com/nubjs/nub">nubjs/nub</a> – The fast all-in-one Node.js toolkit.</li>
<li><a href="https://github.com/sindresorhus/terminal-image">terminal-image</a> – Display images in the terminal.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6tuguasajktV9ibeW83jGc/390bda7b9b131a455037f9e11e5df695/image-shot-npm-testing-trends.png" alt="A graph showing the comparison of testing frameworks."></p>
<p>The folks behind the TanStack software factory released another tool to compare npm download stats. It's not the first site that does this, but it has some more config options if you want to dive deeper.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://tanstack.com/stats/npm&quot;&gt;Compare&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>As I'm turning 41 this week, <a href="https://timesofindia.indiatimes.com/blogs/civil-irony/the-quiet-grief-of-adult-friendship/">I feel every word of this post</a>. Keeping friendships alive often becomes hard work and &quot;friends for life&quot; can quickly become &quot;people I used to know&quot; if you're not careful.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Adult friendship became one of the most emotionally significant and least discussed losses of modern life.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 56 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #197</title>
      <link>https://webweekly.email/archive/web-weekly-197/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-197/?ref=ww-rss</guid>
      <pubDate>Tue, 04 Aug 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #197 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Are you ready for the <code>closedby</code> attribute? Will you measure elements with <code>containertiming</code>? And do you use CSS <code>infinity</code>?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Paweł&quot; title=&quot;GUTS 'METIS'&quot; youtube=&quot;8RK6NKTKYUg&quot;
This one was recommended to me by Apple Music while driving back home last week. The moment I heard it for the first time I put it on loop and it was playing for the rest of the journey (1hr). Really positive vibe.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr>
<p>Let's open this issue by looking at two developer surveys worth your time.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/47voOIeTiJ3txbIIwMx2Sq/fb2d170ec52949147203da75522f6ff8/Screenshot_2026-08-05_at_12.57.32.png" alt="The State of Devs 2026"></p>
<p>First, <a href="https://stateofdevs.com/en-US">the State of Devs survey</a> is open for participation. And if you have a moment, you should fill it out. I sound like a broken record, but things are changing. There's a lot of uncertainty and, frankly, occasionally I'm navigating a full-blown identity crisis. I'm very curious about whether I'm alone with these feelings...</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1VKff1ywNiCDC3fSaYOdtk/706d16fdf5d89f2c4fdc0e68ff309d7d/Screenshot_2026-08-05_at_13.18.10.png" alt="A graph from the State of CSS survey showing that anchor positioning is the favorite new CSS feature."></p>
<p>And second, <a href="https://2026.stateofcss.com/en-US">the State of CSS survey results are out</a>! 🎉 As always it's a great read to discover new features and get a feeling for how &quot;cutting edge&quot; everybody is out there.</p>
<p><strong>And to everyone who mentioned me in the resources section, thank you!</strong> I'm very humbled to be on this list of great people in the web dev community. 🥹</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3msdi4o7gh22t">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/117042793436325300">Mastodon</a></li>
<li>💼 <a href="https://lnkd.in/p/dfx8AHKf">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Building an AI Workflow UI in React? Start With JointJS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1OA6YK7NgzIafDBhbi6l68/ecb1c7930c531acaf5c15efb44ea688c/jointjs.png" alt="The JointJS AI Workflow Builder: a node-based canvas wiring Text Input, Markdown File, AI Agent, Search Reddit, and Formatted Output nodes into a flow."></p>
<p>Most teams building AI workflow UIs start with a lightweight node graph library. Quick to a demo, but you hit a ceiling once the product gets real: UX gaps and slowdowns on large diagrams.</p>
<p>JointJS for React starts where that ceiling is. On UX, you get a full diagramming toolkit: a drag and drop canvas with editable nodes, validation, undo/redo, keyboard shortcuts, snaplines, and accessibility. On performance, rendering is optimized to stay smooth as pipelines grow to hundreds of nodes.</p>
<p>The JointJS AI Workflow Builder template gives you ~90% of the app, full source included.
Wire up your execution backend and ship. Already trusted in production by teams at UiPath, DocuSign, and Bloomberg.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.jointjs.com/ai-workflow-builders?utm_source=webweekly&amp;utm_medium=sponsored-ad&quot;&gt;Start building&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/advertise&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Web Weekly Housekeeping</h2>
<p>This week's summer bag of karma points goes to Zerde, who started to support Web Weekly financially. <strong>This brings the supporter count to the amazing number of 54</strong>.</p>
<p>After subtracting the cost of sending and hosting, Web Weekly now makes around $150 per month. Thank you all for supporting this newsletter! ❤️</p>
<p>So, if you enjoy Web Weekly, give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. It really makes a difference for me in these hard times of AI slop and low-effort web creation.</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2VYN7PTFSlFb26x7xTRnJw/f76b69ff9737a30a601374bdda5b249b/Screenshot_2026-08-05_at_11.58.43.png" alt="A green button labeled &quot;Button&quot;."></p>
<p>Guess what you'll find at <code>clickclickclick.click</code>. I can't help it; I just love people who put out silly things on silly domains. ❤️</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://clickclickclick.click&quot;&gt;Click!&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://michellebarker.co.uk/writing/stage-fright/">Stage Fright.</a> → &quot;There's no way you can go through with this. But you do it anyway. Because it's too late to back out now. Because not doing it would be worse, somehow.&quot;</li>
<li><a href="https://www.seangoedecke.com/playing-politics/">What does &quot;playing politics&quot; mean for software engineers?</a> → &quot;If you have powerful enemies at a company (for instance, the CTO or an influential VP doesn’t like you), quit.&quot;</li>
<li><a href="https://nickwignall.com/how-to-take-feedback-without-getting-defensive/">How to Take Feedback without Getting Defensive</a> → &quot;Almost always, defensive behaviors are coping mechanisms for difficult emotions.&quot;</li>
</ul>
<h2>Browser Performance Timing APIs</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/21YWPesS1HaHO2UWmxTqCO/380a523ebe89e0ee195b813a618586e4/code-shot-container-timing.png" alt="img elementtiming=product-image ...  section containertiming=product-summary   ... /section"></p>
<p>Harry explained the new <code>containertiming</code> attribute, which is currently running as a Chrome Origin trial. If you're not knee-deep into perf topics, the post includes more than one rabbit hole to jump into. For example: Have you used <a href="https://developer.mozilla.org/en-US/docs/Web/API/PerformanceElementTiming">the <code>elementtiming</code> attribute</a> to get render information of image or text nodes? Or, do you use the <code>User Timing</code> API to mark certain render/performance milestones?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://csswizardry.com/2026/07/meaasuring-component-performance-with-the-container-timing-api/&quot;&gt;Measure!&lt;/a&gt;</p>
<h2><code>Promise.all</code> but for good old objects</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5UHEtTmV2DDYRaxq9p52Pu/3d89f0dbdb0774a6694b67b951a25391/code-shot-promise-allkeyed.png" alt="const {   shape,   color,   mass, } = await Promise.allKeyed({   shape: getShape(),   color: getColor(),   mass: getMass(), });"></p>
<p>The &quot;Await dictionary of Promises&quot; ECMAScript proposal moved to stage three so that we'll finally be able to await objects. Can't wait!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://github.com/tc39/proposal-await-dictionary&quot;&gt;Wait for the properties&lt;/a&gt;</p>
<h2>On standards, processes, and specifications</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2xY2IsOlNpGTmq2rvGYMWx/0be4c180bde05e697c61d3e8f88376de/code-shot-ponyfills-userland.png" alt="IMO ponyfills are just userland libraries with better marketing."></p>
<p>Lea makes a strong case for the usefulness of polyfills. If you want to learn more about the current state of polyfills, ponyfills, and prollyfills (I hadn't heard that one before), this post includes tons of background info.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://lea.verou.me/blog/2026/polyfills/&quot;&gt;Fill the platform gaps&lt;/a&gt;</p>
<h2>CSS Route and Navigation Matching</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7jAkVp74c3ljMEBRA2HiZh/59658dedc69a47f284fb0bc335b8a7b4/code-shot-navigation-view-transition.png" alt="/* Going from home to about? Slide left! */ @navigation (from: --home) and (to: --about) {   @view-transition {     navigation: auto;     types: slide-all-to-left;   } }"></p>
<p>Bramus is working on new ways to make view transitions easier to handle in an MPA scenario. This is in its very early stages, but look at this funky CSS.</p>
<p>Bramus is looking for feedback!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/07/30/styling-the-navigation-declarative-route-and-navigation-matching-in-css/&quot;&gt;Peek into the possible future&lt;/a&gt;</p>
<h2>The wonderful weird web – Dustin's website</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7HfjiFYrSUxUzaOpGddlAV/012473a1728a103d11bf7e739117ba8b/Screenshot_2026-08-04_at_15.25.43.png" alt="A classical operating system dialog showing different programs: blog, click, globe, etc."></p>
<p>Well, that's what I call yet another fancy personal website. 👏</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dustin.works/&quot;&gt;Get to know Dustin&lt;/a&gt;</p>
<h2>CSS <code>infinity</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/349n8IjiCl6Bmk1fji1BV9/8f58149f3dd22d424725f0dd98d89272/code-shot-z-index-infinity.png" alt=".tippy-top-of-stacking-context {   z-index: calc(infinity) }"></p>
<p>How could you stack on top of an element with the highest possible <code>z-index</code> (2147483647)? Correct! You use CSS <code>infinity</code> to get on top of the highest stack. Adam lists some more creative <code>infinity</code> use cases.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://nerdy.dev/css-infinity-use-cases&quot;&gt;Stack on top!&lt;/a&gt;</p>
<h2>Follow the OS font size</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/52j2RSgNj1ck5V5k5J3aau/f18d887d3af3e26001f150278f9bc0b7/code-shot-preferred-text-scale.png" alt=".button {   font-size: calc(16px * env(preferred-text-scale)); }"></p>
<p>Back in Web Weekly 182, I included <a href="https://webweekly.email/archive/web-weekly-182/#a-new-meta-element-is-coming-to-town">the new <code>text-scale</code> meta element</a> which enables sites to react to OS font size changes. I didn't realize that there's more to this topic.</p>
<p>Apparently, there's also the <code>preferred-text-scale</code> CSS env variable. Josh was involved in the spec and shares how a particular BBC problem led to this new font size approach.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshtumath.uk/posts/2026-07-02-lets-fix-the-webs-text-size/&quot;&gt;Respect the OS&lt;/a&gt;</p>
<h2>Scale text automatically</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1E5WR2fi2xTEFiHrsrWv87/aa35689de456ea7a5c6ffe0fcde7886b/code-shot-text-fit.png" alt="p {   text-fit: grow per-line-all; }"></p>
<p>Speaking of text scaling, apparently <a href="https://developer.chrome.com/release-notes/150#css_text-fit_property">Chrome 150 shipped the new <code>text-fit</code> property</a>. There are no real MDN docs, and <a href="https://drafts.csswg.org/css-text-5/#text-fit-property">the spec would be the best we've got</a> if it weren't for Krijn, who documented all the options with visual examples.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://krijnhoetmer.nl/log/2026/07/playing-with-text-fit&quot;&gt;Scale automatically&lt;/a&gt;</p>
<h2>Measure SPA navigations</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/30Q0IYRIiJZtxxAraOhJBa/2e7e2fb19d47748f0b19f0a548d784a7/code-shot-soft-navigation.png" alt="const observer = new PerformanceObserver(console.log); observer.observe({ type: &quot;soft-navigation&quot;, buffered: true });"></p>
<p>With Chrome 151, <a href="https://developer.chrome.com/release-notes/151#performancesoftnavigation_and_interactioncontentfulpaint_performance_entries">soft navigations entered the mainstream</a>. If you haven't heard the term, a soft navigation is anything that:</p>
<ul>
<li>is initiated by a user action.</li>
<li>results in a visible URL change to the user.</li>
<li>results in a visible paint.</li>
</ul>
<p>So, we're talking about a new way to monitor and measure classical SPA navigations.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/docs/web-platform/soft-navigations&quot;&gt;Measure the navigation&lt;/a&gt;</p>
<p><em>Side note: if you're using the <code>web-vitals</code> library, <a href="https://github.com/GoogleChrome/web-vitals/blob/main/CHANGELOG.md#v600-2026-07-21">soft navigations are now supported with <code>v6</code></a>.</em></p>
<h2>Random MDN – <code>closedby</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/eO2hNH5AUsIzdEAfd2kLr/86e9721bc86a7460b32df6b2882f98cb/code-shot-dialog-closedby.png" alt="HTML snippet showing  on a  element."></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>We're not entirely there yet in terms of browser support, but the new <code>closedby</code> property ships in Chromium, Firefox and is already included in Safari TP, so it's about time to look into it.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/closedBy&quot;&gt;Close it with anything&lt;/a&gt;</p>
<h2>TIL recap – use <code>Intl</code> to format and localize units!</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6fxlfBIuy0KE5mVlAOPcN1/d763076d3409a5f4c657943a093732ad/code-shot-intl-numberformat-unit.png" alt="console.log(   new Intl.NumberFormat('fr-FR', {     style: 'unit',     unit: 'kilobyte',     unitDisplay: 'long',   }).format(123456) ); // &quot;123 456 kilooctets&quot;"></p>
<p>Here's a quick party trick: did you know that you can use <code>Intl</code> to format numeric values with their units?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/intl-can-localize-units-too/&quot;&gt;Format with style&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3rT5BcxgJKvhqp5A5EiOud/c46844057641449f8d970ce256fa9469/code-shot-baseline-linear-intl-locale.png" alt="Widely available: .something {     animation-timing-function: linear(0, 0.25 25% 75%, 1);   } Newly available: const german = new Intl.Locale(&quot;DE-de&quot;);   console.log(german.getTimeZones());   // Array [ &quot;Europe/Berlin&quot;, &quot;Europe/Busingen&quot; ]"></p>
<p><a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/easing-function/linear">The <code>linear()</code> easing function</a> made it into Baseline widely available territory.</p>
<p>And since Firefox 153, all recent browsers support new info methods like <code>getTimeZones</code>, <code>getTextInfo</code>, or <code>getHourCycles</code> on <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Locale"><code>Intl.Locale</code> objects</a>.</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/duongductrong/Snapzy">duongductrong/Snapzy</a> – A macOS screenshot and screen recording app.</li>
<li><a href="https://github.com/charmbracelet/glow">charmbracelet/glow</a> – Render markdown on the CLI.</li>
<li><a href="https://github.com/gkurt/tegaki">gkurt/tegaki</a> – Handwriting animation for the web.</li>
</ul>
<h2>Thought of the week</h2>
<p>This is by far my biggest concern with the &quot;new world&quot; we're in. As Koshy says, <a href="https://www.koshyjohn.com/blog/ai-should-elevate-your-thinking-not-replace-it/">it's never been so easy to pretend without understanding what's going on</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>[AI] makes it easy to simulate competence without building competence.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 54 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #196</title>
      <link>https://webweekly.email/archive/web-weekly-196/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-196/?ref=ww-rss</guid>
      <pubDate>Sun, 12 Jul 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #196 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Do you know what shipped in the new JavaScript version? Do you know about all the fancy anchor positioning features yet? And do you use CSS <code>zoom</code>?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Olivier&quot; title=&quot;Connor Price &amp; Nic D - Too Easy&quot; youtube=&quot;zOVkU-P3SyA&quot;
It's been on repeat in my playlist for the past two weeks since I watched an Android Gemini Intelligence ad... :D
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mqjebggbbs2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116911917515545466">Mastodon</a></li>
<li>💼 <a href="https://lnkd.in/p/dfrzGi_y">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Full-Featured React Event Calendar</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/56hu5SlTE3bN7qoZGYbn3y/dc796478792e31dbce7e88236ae4370e/calendar_webweekly.png" alt="Modern React Calendar — free, full-featured event calendar with TypeScript support &amp; MIT license."></p>
<p>SVAR React Calendar brings Google Calendar-style scheduling to your React app — multiple views, drag-and-drop event editing, and a built-in edit form for creating and updating events. Events are easily organized into color-coded calendar groups.</p>
<p>It's built natively in React, with no wrappers or adapters, and includes TypeScript support, easy backend integration, light/dark themes, free core + PRO with timeline, agenda, and resources views.</p>
<p>Start building scheduling UIs in minutes.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://svar.dev/react/calendar/?utm_source=webweekly&amp;utm_medium=newsletter&quot;&gt;Try SVAR React Calendar&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/advertise&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Web Weekly Housekeeping</h2>
<p>This week's bag of karma points goes to <strong>Chris, Spike, Dan, James, and Gerrit</strong>, who all started to support Web Weekly financially. This brings the supporter count to mind-boggling 53. After subtracting the cost of sending and hosting, Web Weekly makes now a bit under $150 per month.</p>
<p>Thank you all for supporting indie publishing. ❤️</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/iIUoP7SptJrm37YQ76NB0/e106148b25ef781cd58acf2dd9585926/Screenshot_2026-07-12_at_18.04.24.png" alt="A dark cartoon-like graphic showing two avatars. One avatar says &quot;you there?&quot;"></p>
<p>Aerospace engineer Cauê added a town square to his site (scroll to the bottom) and this brings back strong vibes of when the internet used to be fun. The project is open source if you want to have a place on your site for people to hang out.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://cauenapier.com/blog/townsquare_release/&quot;&gt;Talk to strangers&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://pradyuprasad.com/writings/how-to-ask-for-help/">How to ask for help from people who don't know you</a> → &quot;One of the strongest ways to show that you’re worth helping is to demonstrate that you are a serious person.&quot;</li>
<li><a href="https://whitep4nth3r.com/blog/goodbye-forever-probably/">Goodbye, forever, probably.</a> → &quot;People aren’t seeking information in the ways we once knew; The Internet and its communities have fragmented.&quot;</li>
<li><a href="https://zeldman.com/2026/07/06/memories-cant-wait-or-how-i-learned-to-keep-worrying-about-the-web/">Memories Can’t Wait—or, How I Learned to Keep Worrying About the Web</a> → &quot;We need to stop pretending that “the cloud” is a place. It’s not a place. It’s a promise&quot;</li>
</ul>
<h2>Anchor positioning</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7dxin6dbBf1zhnUIOO61aB/bb042c8ff342f26c04a15dc9b684ef34/code-shot-anchor-scope.png" alt=".card {   anchor-name: --card;   anchor-scope: --card, --card-actions;    .secondary-actions {     anchor-name: --card-actions;   } }"></p>
<p>I'm still wondering about anchor positioning (baseline newly available) use cases beyond the tooltip example. <a href="https://thatemil.com/blog/clickable-surface-expansion-using-anchor-position/">Emil explains how multiple anchors help out with creating clickable card overlays</a>. Fancy stuff!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/79n5IaIp7SeGoieSsZ4D17/2918d5b8664374ac0b0a581990f7a014/code-shot-anchored-container.png" alt="    @container anchored(fallback: bottom) {       padding: 24px 16px 16px 16px;       margin-top: 8px;       border-shape: var(--upwards-caret);     }"></p>
<p>And if that's not enough anchoring, <a href="https://www.joshwcomeau.com/css/anchor-positioning/">Josh explains how to get started with anchor positioning</a>. But don't be fooled, the post gets into advanced topics like the <code>anchored</code> container query and <code>position-try-fallbacks</code> quickly.</p>
<h2>Inaccessible grid lanes</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/66VR1uNRNBGXUob5zfcRtH/50839e2a0a395d38320e59ffae7bd33a/code-shot-grid-lanes.png" alt=".grid-lanes {   display: grid-lanes;   grid-template-columns: repeat(3, 1fr);   flow-tolerance: 0; }"></p>
<p>Safari shipped <code>display: grid-lanes</code>. Chromium's working on it. But what does it mean for accessibility when grid items are free-flowing and reordering themselves? Can an adjusted <code>flow-tolerance</code> help? Manuel asks the same questions and cautiously proposes a very interesting solution.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://matuzo.at/blog/2026/grid-lanes-accessibility&quot;&gt;Be aware&lt;/a&gt;</p>
<h2>The <code>color-scheme</code> and <code>prefers-color-scheme</code> disconnect</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2tZ0cB01dQEKToBrFojTl8/3fc0d1a24b21842bc2c39b989ccfcd73/code-shot-container-style.png" alt="@container style(--dark: false) { .card {     box-shadow: 0px 2px 3px rgba(0, 0, 0, 0.2); } }"></p>
<p>Ollie described a fact that tripped me up big time:</p>
<blockquote>
<p>There’s an unfortunate disconnect between color-scheme and the prefers-color-scheme media query. prefers-color-scheme reflects the OS settings — regardless of the color-scheme value. If you’re providing an in-page toggle that implements dark mode, you can’t adopt the prefers-color-scheme media query.</p>
</blockquote>
<p>So what do you do about it? The post has some web platform answers.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://olliewilliams.xyz/blog/dark-mode/&quot;&gt;Use the new and fancy&lt;/a&gt;</p>
<h2>Linked CSS params 😱</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2XkW0d0twSv32IS8KEiUM0/01a688b1c927f27e27f004be4da3c401/code-shot-link-parameters.png" alt="img {   link-parameters: param(--color, green); }  .foo {   background-image: url(&quot;image.svg&quot;, param(--color, green)); }"></p>
<p>So! If you're dealing with SVG icons you probably know the pain of overwriting colors. <a href="https://patrickbrosset.com/articles/2026-06-22-whats-missing-from-svg/">Patrick listed missing SVG features</a> and as it turns out there's a new spec in the making that allows controlling CSS variables from &quot;the outside&quot;. And I didn't test it, but he says that it's shipping in Firefox already!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://drafts.csswg.org/css-link-params-1/&quot;&gt;Control your SVGs&lt;/a&gt;</p>
<h2>The wonderful weird web – Roland 50</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4C6XJ4ofBIZNyp8WVtzIKO/37b05f26ade9165d37a94ddf2b7cca8e/image-shot-tr808-tb303.png" alt="Two synthesizer interfaces."></p>
<p>The music nerds will love this one!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://roland50.studio/&quot;&gt;Produce&lt;/a&gt;</p>
<h2>Deno and Vercel invest in desktop apps?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4Ga2nU9ZPtkdAcIWiAmq89/af7a14ec058d4859e1d8a21672e9de74/image-shot-native-desktop-toolkit.png" alt="Toolkit for building native desktop apps"></p>
<p>Honestly, I'm up for opinions here. <a href="https://deno.com/blog/v2.9#deno-desktop">The new Deno release now supports building desktop apps</a>. When I saw this I was confused. Didn't Deno lay off people and isn't the money in providing hosting and infrastructure? Odd.</p>
<p>But then I also saw Vercel pushing for building Zig and web-based desktop apps with <a href="https://native-sdk.dev/">Native SDK</a>?</p>
<p>Honestly, what is going on? Is this about market share? I don't get it.</p>
<h2>Wiggly range sliders</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/41c5vROCWFczhakavpdUZg/5cfece1a0d711b6389fa88df7f5a9453/video-shot-wiggle.gif" alt="Three wiggle range sliders"></p>
<p>What you see above aren't canvas or SVG elements. These three range sliders are classical <code>range</code> inputs with some CSS magic. I've got no idea how Temani comes up with that stuff.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tip.com/wiggly-range-slider/&quot;&gt;Wiggle&lt;/a&gt;</p>
<h2>New things in ECMAScript</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/41fRHQvDQV4zd6ySRMCJ2C/ebf271df9e903b5157d5684b506f3b19/image-shot-ecmascript-2026.png" alt="What's new in ECMAScript 2026"></p>
<p>It's already a tradition and I'm happy to see that Paweł is still summarizing the new JavaScript features. Check out what's coming to JavaScript.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://pawelgrzybek.com/whats-new-in-ecmascript-2026/&quot;&gt;Use the language&lt;/a&gt;</p>
<h2>Riding the cutting edge of CSS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/54tlW2fv4NiVptsu5Fog7W/64ab01f497bf5e99eded836aec2c5104/code-shot-picker-calc-size.png" alt=".custom-select::picker(select) {   min-block-size: calc-size(fit-content, min(size, 12em)); }"></p>
<p>Jake went on a journey to &quot;improve&quot; the sizing behavior of customizable selects (Chromium-only so far) and oh boy... he goes into anchor positioning, <code>stretch</code> and <code>fit-content</code>, and <code>calc-size</code>. I'm sure you'll find more than one rabbit hole to dive into here.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jakearchibald.com/2026/goldilocks-select-height/&quot;&gt;Select&lt;/a&gt;</p>
<h2>Rapid fire</h2>
<ul>
<li><a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0/">TypeScript 7 is out</a>. And yes, that's the Golang rewrite.</li>
<li><a href="https://www.rfc-editor.org/info/rfc10008/">The new <code>QUERY</code> HTTP method</a> moved from <code>draft</code> to <code>proposed standard</code>.</li>
<li><a href="https://developer.chrome.com/blog/usermedia-html-element">Chrome ships a new <code>usermedia</code> element</a>.</li>
</ul>
<h2>Random MDN – Cross-document view transitions</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4IW8nV3WzxDBcaHkj6vdiE/7224709c799960b25cbf23e4106a28dd/code-shot-view-transition.png" alt="@view-transition {   navigation: auto; }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Quick reminder, cross-document view transitions can be enabled with a few lines of CSS. Safari and Chromium ship them, so you can add some polish to your static sites. No harm done for Firefox users.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/At-rules/@view-transition&quot;&gt;Transition&lt;/a&gt;</p>
<h2>TIL recap – <code>zoom</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2RxwW1ZK7GItpN0AaNN8el/455367c2ddc8138a5c69413fe43d295a/Screenshot_2026-07-13_at_10.14.17.png" alt="Two widgets showing the difference of  and ."></p>
<p>A while ago I learned about valid use cases for the CSS <code>zoom</code> property. <code>zoom</code>? Yes, exactly. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/css-zoom-to-scale-elements/&quot;&gt;Scale up&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>Automatic baseline updates</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/YSRgRGM3tYwhRO2QssOZa/8c4e961927fe58252f52213ab5148006/image-shot-manage-notifications.png" alt="UI to configure baseline notifications."></p>
<p>I've got my own tooling for checking baseline updates, but if the Web Weekly updates aren't enough, <code>webstatus.dev</code> now lets you set up baseline notifications.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://webstatus.dev/&quot;&gt;Stay up to date&lt;/a&gt;</p>
<h2>Classifieds &amp; friends</h2>
<p>My buddy Orçun is building <a href="https://useautoshelf.com/">AutoShelf</a> and you should check it out if you want automated file organization.</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/ashleydavis/photosphere">ashleydavis/photosphere</a> – A cross-platform application for managing your database of digital media files</li>
<li><a href="https://github.com/duongductrong/Snapzy">duongductrong/Snapzy</a> – An open-source native macOS screenshot and screen recording app.</li>
<li><a href="https://github.com/charmbracelet/glow">charmbracelet/glow</a> – Render markdown on the CLI.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/SDvwYsQuOR0Rgp6TKhKey/6e8961ff4c187cf707892da0f3602411/image-shot-ua-tracer.png" alt="ua-tracer — what does a user agent actually fetch, follow &amp; run?"></p>
<p>If you've ever wondered what specific analyzer tools, user agents, or browsers execute when they crawl sites, <code>ua-tracer</code> helps out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://uatracer.com/&quot;&gt;Check what's happening&lt;/a&gt;</p>
<p>Side note: the last time I mentioned that I'm not really sure about Tiny Helper's future because frankly I'm drowning in vibe code submissions. Some of you replied telling me that you really like this section. So, what should I do with it?</p>
<p>For now, I closed contributions to the project and this section will become optional. I'm annoyed by this because I'm a big fan of consistency, but let's see how this plays out.</p>
<h2>Thought of the week</h2>
<p>This is <a href="https://kittygiraudel.com/2026/04/29/you-cannot-spell-pain-without-ai/">a take I can get very much behind</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>In an ideal world, the only AI-generated content I want to consume is the one I request myself.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 53 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #195</title>
      <link>https://webweekly.email/archive/web-weekly-195/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-195/?ref=ww-rss</guid>
      <pubDate>Sun, 21 Jun 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #195 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Did you check out the new WebKit <code>grid-lanes</code> resources already? Do you &quot;view transition&quot; with <code>match-element</code>? And have you heard of HTML streaming maybe becoming a thing?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Pablo&quot; title=&quot;GENER8ION - STORM starring Yung Lean&quot; youtube=&quot;x6_mbnsh6VU&quot;
I loved the cinematography,  choreography and the whole bad-boys-from-high-school vibe.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>five more songs</strong> left in the queue.</p>
<hr>
<p>Let's open this week with some fancy CSS grid stuff!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6UuUTNVEShecITBdcRo963/3a04d2088e340c15834a0d021989c569/code-shot-grid-auto-flow.png" alt=".grid {     grid-auto-columns: 1fr;     grid-auto-flow: column; }"></p>
<p><a href="https://quirksmode.org/quirksblog/2026/0527-gridalgo.html">Peter-Paul explained how the grid layout algorithm works</a>. For most cases you don't need to think about the internals, but it's good to know how things work. If you don't know what <code>grid-auto-flow</code> does, this post is for you!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2pfVQaHKD5jf31ugi4JPWC/5ee2b1f623fad68ef92d0808703aff6e/image-shot-grid-lanes.png" alt="Masonry grid example with controls and source code below."></p>
<p>And speaking of the grid algorithm, things get more and more complicated when you consider the new <code>display: grid-lanes</code> (Safari-only so far). Our friends at WebKit released <a href="https://gridlanes.webkit.org/">a new cheatsheet with a built-in configurator</a> and lots of examples. It has strong vibes of the CSS-Tricks materials back in the day!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4gdJia7j8XoTzEy6D4f49C/77c2e3f6c6c4b0df66b7d039112af73d/image-shot-gaps-get-filled.png" alt="A CSS grid showing how gaps will be filled."></p>
<p>And if all this isn't enough, Patrick published <a href="https://patrickbrosset.com/articles/2026-06-19-alignment-in-css-grid-lanes/">a tutorial explaining alignment in the new masonry world</a>.</p>
<p>That's some funky new CSS we'll be able to use eventually! 🎉</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3movcqpk7es2e">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116794717826486865">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-share-7474862178827825152-mGW3/">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter grow. Thank you! ❤️</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Turn your component tests into visual coverage</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4Eis2fx5DiPSjRbwBjtMYT/ac1647b6081a7fdb1aa79dbb3f6f5390/vitest_hero_social.jpg" alt="Free visual testing for VITEST Browser Mode"></p>
<p>The new Chromatic plugin for Vitest’s Browser Mode adds visual tests and collaborative UI review with no changes to your existing test suite. Tests run in a stable, parallelized cloud infrastructure for reduced flake and accelerated shipping.</p>
<p>Early access includes hands-on support from the Chromatic team and free usage while the plugin is in beta.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.chromatic.com/blog/vitest-visual-testing-sneak-peek/?utm_source=webWeekly&amp;utm_medium=newsletter&amp;utm_campaign=newsletterSponsorshipWebWeeklyVitestEAP&quot;&gt;Get early access&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/sponsor&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Web Weekly Housekeeping</h2>
<p>A huge bag of karma points goes to Caspar, Den, Marco, Savio, and Zoe this week. 50 people now support Web Weekly financially, thank you all! ❤️</p>
<p>If you enjoy Web Weekly, give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<p><a href="https://webweekly.email/archive/web-weekly-194/#:~:text=You%20might%20have%20noticed">The state of content creation is rough these days</a>, and while I have let go of the idea of making this newsletter a sustainable income, every tiny support helps me keep going.</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5oEmYq6adk5aiirQ7kUINM/3430a413102d571534c1002ea1b4763c/image-shot-no-slop-grenade.png" alt="no slop grenade.  Stop throwing AI-generated walls of text into conversations."></p>
<p>You know that I'm a sucker for single-purpose URLs and this one is right up my alley.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://noslopgrenade.com&quot;&gt;Don't do it&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://justinjackson.ca/communication">We have a communication problem</a> → &quot;I'm convinced that many of society's problems come from how we communicate online.&quot;</li>
<li><a href="https://tombedor.dev/human-attention-and-human-effort/">If You are Asking for Human Attention, Demonstrate Human Effort</a> → &quot;If you are requesting human attention, demonstrate human effort.&quot;</li>
<li><a href="https://albertsikkema.com/ai/development/opinion/2026/06/15/why-diy-software-is-great-until-it-is-not.html">Why DIY Software Is Great Until It Is Not</a> → &quot;When you build for others, you are working with someone else’s idea of what the product should do, not yours.&quot;</li>
</ul>
<h2>Web development trivia</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5MKEKZtvhQqRzOLfnOrDBA/209e6a8f57ead0ad02aa468d34342613/code-shot-pushstate.png" alt="pushState(state, unused); pushState(state, unused, url);"></p>
<p>Here's something for you to shine at nerdy dinner parties. Did you know that <code>history.pushState</code> has a parameter that's &quot;officially&quot; unused? Alex gives a nice <code>history</code> lesson.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://alexwlchan.net/2026/wonky-web-apis/&quot;&gt;Don't use the unused&lt;/a&gt;</p>
<h2>TIL — there's three ways to ignore files in Git</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6NnIu1nP41PgPlYOStkKNW/a5a5f4e4d7d6c6d9c351fb31ff966d2c/code-shot-excludesfile.png" alt="$ git config --global core.excludesFile ~/.gitignore_global"></p>
<p>So, I've been using global Git ignores since forever (bye bye <code>.DS_Store</code>), but I didn't know <code>.git/info/exclude</code> is a thing.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://nelson.cloud/.gitignore-isnt-the-only-way-to-ignore-files-in-git/&quot;&gt;Ignore&lt;/a&gt;</p>
<h2><code>view-transition-name: match-element</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7sDg9uv3YTKsJcpmdnf193/116ae4fa650c1c4a6b1e93d2cff9a33b/code-shot-view-transition-name.png" alt="  .card {     view-transition-name: match-element;     view-transition-class: card;   }"></p>
<p>I can't be the only one not realizing <code>match-element</code> works across browsers these days, can I? Bramus explains when to use <code>match-element</code> or go for the advanced <code>attr()</code> CSS function.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.bram.us/2026/06/19/view-transition-name-attr-or-match-element/&quot;&gt;Match it!&lt;/a&gt;</p>
<h2>Streaming HTML?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4SA0O1zkBOaDYM4vtoGAW6/c09bd5d0a8e72506f4f1f85134e82745/code-shot-html-placeholder.png" alt="div   ?start name=another-placeholder   Loading…   ?end /div  ...  template for=another-placeholder   Here is some emHTML content/em! /template"></p>
<p>I've got no idea how I could have missed that, but <a href="https://olliewilliams.xyz/blog/streaming-html/">Ollie shared that streaming HTML might become a thing</a>. Granted, it's very early days still but this is exciting. It's yet another example of framework patterns entering the web!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/declarative-partial-updates&quot;&gt;Stream&lt;/a&gt;</p>
<h2>The wonderful weird web – Clues by Sam</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Ia8fbdHiJ4zJELSboOukU/cb07c3c914218bcdb5eb415e0c0d336e/Screenshot_2026-06-22_at_14.04.37.png" alt="Four cards with three characters showing their job and clues for each."></p>
<p>I've seen multiple people talk about the logic puzzle game &quot;Clues by Sam&quot;. And I must admit, it's a lot of fun!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://cluesbysam.com/&quot;&gt;Solve some puzzles&lt;/a&gt;</p>
<h2>MDN now has an MCP server</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/dvAlUn41X6FgLwWBYkiwq/24fa7030b85c45c877690c5e4bdd188d/image-shot-style-queries-support.png" alt="Claude conversation asking for browser support of container style queries."></p>
<p>I know that many Web Weekly readers aren't big AI fans. However, the new MDN MCP server is very useful to access docs and browser support data.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/blog/introducing-mdn-mcp-server/&quot;&gt;Ask MDN&lt;/a&gt;</p>
<h2>There's a prop for that...</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5n1TKBQeczwRlUXIqmngcU/b26f8d1b5bcbba00e98ce80008241ed1/Screenshot_2026-06-22_at_15.00.46.png" alt="What JS knows, now CSS knows."></p>
<p>Adam released a new JS library that transforms JS runtime values into CSS custom properties. Just like that? Yes, if you want to use form values, pointer positions or even the current time in CSS, <code>prop-for-that</code> will make that possible without writing custom JS.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://prop-for-that.netlify.app/&quot;&gt;Use props&lt;/a&gt;</p>
<p><em>Side note: Adam also spoke at CSS Day and presented <strong><a href="https://css-day-2026.netlify.app">a MEGA LIST of the ways CSS can enable highly adaptive, contextually relevant components</a>.</strong> This slide deck is very well worth your time. Trust me.</em></p>
<h2>Good to be aware: contrast themes</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/k6WWeWwj7upEa6bqYIlZG/f50a03fb23cf4ac2f1aaf8f78788b486/image-shot-outline-transparent.png" alt="When a change in background or box-shadow is used as a focus indicator instead of the default focus outline, a Contrast Theme will render it invisible. Instead of removing the outline with outline: none, use outline: 2px solid transparent."></p>
<p>You're probably checking light and dark mode when writing your CSS. But do you check contrast, too? Here's a quick explainer telling what to watch out for.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://accessibility.huit.harvard.edu/news/2026/05/deep-dive-contrast-themes&quot;&gt;Be aware&lt;/a&gt;</p>
<h2>HTML in canvas demos</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5nghv9sNdTaqduHQVDmQZM/afe1d3222f74dcb18b9a423f84100692/image-shot-html-in-canvas.png" alt="Fluid 3d interface with selected text."></p>
<p><a href="https://github.com/WICG/html-in-canvas">HTML in canvas</a> is still a long way off, but of course people are going wild with it already. I also wonder how useful this all will be, but hey... I'm always game for some eye candy.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://html-in-canvas.dev/&quot;&gt;Check the future&lt;/a&gt;</p>
<h2>Random MDN – <code>overscroll-behavior</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4KakZgYi11WQr2ZiF7Foh5/40c9afb2f101b59598c71a26079ef3ca/code-shot-overscroll.png" alt=".messages {   height: 220px;   overflow: auto;   overscroll-behavior-y: contain; }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Overscroll behavior is one of those CSS properties that aren't used enough. I'm using a Mac and way too often do I accidentally swipe the history, just because a horizontal scroller wasn't containing the scroll. Let's fix that!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/overscroll-behavior&quot;&gt;Container&lt;/a&gt;</p>
<h2>TIL recap – orientation in container size queries</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/57k6So9NAkZE49UUwIEYKl/116190160be10d1d54fcf4431a78f0b8/image-shot-resize-me.png" alt="A interactive component showing an image frame and a handle telling to resize its container."></p>
<p>Did you know that container size queries can detect landscape and portrait ratios? Now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/size-container-queries-can-detect-landscape-portrait-orientation/&quot;&gt;Detect&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3odcImjS8m8nR3QR8ScmCL/85ff7f848cbf0df18afe2836e959a91d/code-shot-baseline-css-nesting.png" alt="Newly available: field-sizing: content; Widely Available: CSS nesting."></p>
<p>I've mentioned <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/field-sizing">CSS <code>field-sizing</code></a> plenty of times here and with Firefox supporting it now with version 152, it's finally baseline newly available.</p>
<p>And it feels like yesterday, but <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Nesting/Using">native CSS nesting</a> is now widely available. Time flies!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/webstonehq/tuxedo">webstonehq/tuxedo</a> – A TUI for <code>todo.txt</code></li>
<li><a href="https://github.com/raphaelsalaja/audio">raphaelsalaja/audio</a> – Declarative audio synthesis for the web.</li>
<li><a href="https://github.com/useplunk/plunk">useplunk/plunk</a> – An open source email platform.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p>With more and more throwaway tools being generated, I started to question Tiny Helper's usefulness. The project is also &quot;under fire&quot; with lots of useless vibe code submissions.</p>
<p>What do you think? Should we keep it? If 50 people reply and <a href="mailto:stefanjudis@gmail.com">let me know that it's valuable</a>, I'll keep going. Otherwise, I think it's time to &quot;finish&quot; this project.</p>
<h2>Thought of the week</h2>
<p><a href="https://quinnkeast.com/writing/software-is-problem-ownership">Yep</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Paying for software isn't paying for a solution. It's paying for someone else to own a problem.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 50 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #194</title>
      <link>https://webweekly.email/archive/web-weekly-194/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-194/?ref=ww-rss</guid>
      <pubDate>Mon, 15 Jun 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #194 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Did you keep track of the new Safari features? Do you know how to style CSS gaps? And do you worry about the future of the web?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Paweł&quot; title=&quot;Djrum - Waxcap&quot; youtube=&quot;jQtvKD-h7bs&quot;
Wifey doesn’t like when this one is playing loud, but this one meant to be listened loud. Djrum is not for everyone, but you may like it if you’re into experimental garage and dnb.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>six more songs</strong> left in the queue.</p>
<hr>
<p>You might have noticed that I took a two week newsletter break after sharing <a href="https://webweekly.email/archive/web-weekly-193/">my concerns about the state of content publishing in the last edition</a>. Many people reached out and a good bunch started to support Web Weekly. The newsletter now has 47 supporters. ❤️</p>
<p>A huge bag of karma points goes to Marco, Roman, Dave, Dieter, Carlos, chrillek, and Bernd for supporting indie publishing. Thank you! Karol and Steve also gave some nice testimonials for the Web Weekly site. A big thanks goes to all of you!</p>
<p>But let me be transparent and share some numbers: finding the &quot;good stuff&quot; and writing Web Weekly easily costs me 8-10 hours a week. And thanks to your support I make roughly 150 dollars a month. After subtracting hosting and email costs, this makes 100 dollars for 40h of work.</p>
<p>Obviously, you know that I include sponsors. In a good month this makes 500 - 600 dollars on top. This is all pre-tax and in total, this simply isn't a very good deal. I'm also exhausted from the weekly &quot;pressure&quot; to deliver.</p>
<p>I always loved learning and sharing but with the current state of the web / industry / community, I simply wonder where I'm heading with this &quot;little side project&quot;. I also turned 40 and that's definitely not helping.</p>
<p>Where am I going with this? This edition is Web Weekly 194. I have a thing for numbers so I'll definitely push forward to edition 200. And I don't want to sound overly dramatic, this is just a newsletter hitting your inbox after all, but yeah... I'll need to sit down and really think about what to do. I'll keep you posted!</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mofqvtxnwk2g">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116759684692782191">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_the-new-web-weekly-is-just-about-to-hit-all-activity-7472620142250741761-gKDg">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3gPqdQYl6LEcaT3BHb1DS1/e4b4847d7f14f86dede79772e1fa9833/image-shot-unserious-vuln.png" alt="I’ve spent almost a decade and a half identifying vulnerabilities and exploits at unicorn scale, but this is hands down the most unserious, &quot;almost too stupid to be true&quot; of them all. "></p>
<p>I've been waiting for the first &quot;major AI fu** up&quot; for a while, but even Instagram account takeovers seem to be &quot;fine&quot;.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.0xsid.com/blog/meta-account-takeover-fiasco&quot;&gt;Don't worry!&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://cate.blog/2026/06/02/making-a-new-plan/">Making a New Plan</a> → &quot;Admitting when your opinion has changed, and why, is an underrated leadership skill.&quot;</li>
<li><a href="https://www.raptitude.com/2026/06/do-things-youll-love-yourself-for/">Do Things You’ll Love Yourself For</a> → &quot;You can iron your shirt because you “have ironing to do,” or you can iron it because you love the person who will be wearing it tomorrow.&quot;</li>
<li><a href="https://timesofindia.indiatimes.com/blogs/civil-irony/the-quiet-grief-of-adult-friendship/">The quiet grief of adult friendship</a> → &quot;Adult friendship became one of the most emotionally significant and least discussed losses of modern life.&quot;</li>
</ul>
<h2>Safari 27 Highlights</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3HgNUemfY1WkR2yfpDuC5m/e41673a7fc2e4c277066df9c0825473b/image-shot-wwdc26-safari27-beta.png" alt="News from WWDC26: WebKit in Safari 27 beta"></p>
<p>Did you notice this year's WWDC26? I must say that it was fairly quiet in my circles. Apple released their new Safari 27 beta.</p>
<p>It comes with &quot;58 new features, 525 fixes and 4 deprecations&quot;. Here are my two favorites.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1VdzZUVJ3qb5NleOpLDB02/34724f540053559a98da48dedfca5d76/code-shot-customizable-select.png" alt="HTML snippet showing a select that include &quot;selectedcontent&quot; and more HTML in the &quot;options&quot; element."></p>
<p>First, Safari joins Chromium and will support &quot;customizable selects&quot; soon. This means <code>&lt;selectedcontent&gt;</code>, <code>appearance: base-select</code>, <code>::picker-icon</code> and <code>::checkmark</code> are slowly worth looking at!</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6VhyDtAl5rASfldJcNEHu1/9f5f12b59f7dd47790be00d3a93d09bb/code-shot-img-sizes-auto.png" alt="img src=photo.jpg      srcset=photo-400.jpg 400w, photo-800.jpg 800w, photo-1200.jpg 1200w      sizes=auto      loading=lazy      alt=A mountain landscape"></p>
<p>WebKit joins the club and will start to support <code>sizes=auto</code> for images! This means we'll enter baseline territory for easier image loading!</p>
<p>Other than that, this release post is loooooong and unfortunately I can't play with things right away because I can't install new TechPreview versions unless I update my OS. That means &quot;bye-bye&quot; Sequoia and &quot;hello&quot; Tahoe, I guess. More rounded corners here I come! How bad is the liquid glass world these days?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://webkit.org/blog/17967/news-from-wwdc26-webkit-in-safari-27-beta/&quot;&gt;Check the new Safari&lt;/a&gt;</p>
<h2>Do we need a new perf metric?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/V4rQ132AIW5lMLzhdllk1/edebefc8f8f8cb996b2ea1e6c05ce93b/image-shot-tbt-fcp-tti.png" alt="The part that is often overlooked is that TBT is not an unbounded sum of all blocking work in the trace: it is a sum of all the blocking time between First Contentful Paint and Time to Interactive.."></p>
<p>Harry explains the <strong>Total Blocking Time</strong>, <strong>First Contentful Paint</strong>, and <strong>Time to Interactive</strong> perf metrics and argues that we need yet another metric: the TBT window. It's a good explainer on how many metrics influence each other and I had no idea how time to interactive can influence the total blocking time.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://csswizardry.com/2026/06/front-ends-missing-metric-the-tbt-window/&quot;&gt;Build a fast web&lt;/a&gt;</p>
<h2>Fun with the new <code>image()</code> CSS function</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2VSI6tQUQSdKJNIRWIqaze/a0481dc27563657c4cf80f353ba35ac4/code-shot-image-alpha.png" alt=".hero { background-image: image(alpha(from black / 50%)), url('/mountains.avif'); }"></p>
<p>Ollie looked into the future and shared how the super new <code>image()</code> function will enable some handy CSS-only background effects! <code>image()</code> seems to be so new that there's no real compat data yet, but it works in Chrome Canary and will ship in 150.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://olliewilliams.xyz/blog/image-function/&quot;&gt;Add some color&lt;/a&gt;</p>
<h2>Gap decorations in CSS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1TyAD9ACHxzw3vVEDvcRXY/e7ae6a9d4ecb2391f74d77b9f4a276a4/code-shot-column-rule-inset.png" alt=".shelf {   column-rule-width: 1px;   column-rule-style: solid;   column-rule-color: oklch(70% 0.14 235);   rule-inset-cap: 10px;   rule-inset: 130px; }"></p>
<p><a href="https://developer.chrome.com/blog/gap-decorations-stable">Chromium started to roll out gap decorations with v149</a> two weeks ago. And boy, am I excited about this. The Web Weekly site includes a lot of solid and dashed gaps and making this work was quite painful.</p>
<p>Brecht explains everything you can do and it's quite a lot!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://utilitybend.com/blog/css-is-filling-the-gaps-with-rules-a-way-to-style-gaps-in-grid-and-flex&quot;&gt;Style the gap&lt;/a&gt;</p>
<h2>The wonderful weird web – <code>personalsit.es</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4IZ4kLVi27CzGGuYfOO355/50409eacec6491af4781ac63d72d3939/image-shot-personal-sites-home.png" alt="This site was built to share and revel in each others’ personal sites, and is currently home to ~1040 of them. Witness these in wonderment and awe. Immaculate. Stunning. How did they do that? Yes, you should definitely get around to redesigning yours soon."></p>
<p>If you're missing the &quot;old web&quot;, I occasionally love browsing this collection of personal websites.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://personalsit.es/&quot;&gt;Discover the good stuff&lt;/a&gt;</p>
<p><em>That said: maybe one day I'll build <a href="https://ellesho.me/page/">a stunning site like Elle's</a>.</em></p>
<h2>The State of CSS</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3foUtmfZz6zag6pHuhHOSk/1adabf8d2707724b9a8a85d49d848847/image-shot-state-of-css-2026.png" alt="The State of CSS 2026"></p>
<p>The State of CSS survey is open for another two weeks! Go take it if you have a moment. I just finished it, and it took around 10 minutes. It's an important data point for spec makers and browser vendors, so let's get this all done.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://survey.devographics.com/survey/state-of-css/2026&quot;&gt;Give some insights&lt;/a&gt;</p>
<h2>The future of Firefox and the web</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7zljE6ZnQxWd6KBhPYA4h2/f348902f83c525ce0bed765796ea6678/image-shot-future-firefox-web.png" alt="The future of firefox and the web."></p>
<p>So far I've only listened to half of this Syntax episode but it's always good to hear Jake talk and it's still weird to see him in the Firefox team. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.youtube.com/watch?v=etgArQSC57I&quot;&gt;Be aware&lt;/a&gt;</p>
<h2>Will we finally have context-aware headings?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1X1yKw3Y1dGQy6tLA4ftP8/25244966ac338fcb93cde85faa35e431/code-shot-heading-offset.png" alt="h1Museums/h1 !-- heading level 1 -- section headingoffset=1   h1Free entry to the museum/h1 !-- heading level 2 -- /section"></p>
<p>Granted, we're looking into the future here and the following only works in Firefox Nightly after enabling a flag. Still, this is super exciting. After two decades of struggling with properly grouped and structured headings, <code>headingoffset</code> might finally be a way to make things more manageable. Manuel gave a quick overview.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://matuzo.at/blog/2026/content-aware-headings&quot;&gt;Level your headings&lt;/a&gt;</p>
<p><em>And if you prefer a quick video, here's <a href="https://bsky.app/profile/webdevs.firefox.com/post/3mncp42h7ik2b">Jake explaining the new attribute as well</a>.</em></p>
<h2>Speaking about web security...</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4x4vm0nXRjUxy2YKd4A7ka/0287f25c95c2b957ef4aff3dad2a5d4f/image-shot-npm-v12-breaking.png" alt="Upcoming breaking changes for npm v12."></p>
<p>Since the robots are scanning and exploiting all possible code out there, web security becomes more important than ever. The upcoming <code>npm</code> release will finally harden what's possible when you run <code>npm install</code>. <a href="https://github.blog/changelog/2026-06-09-upcoming-breaking-changes-for-npm-v12/">Install scripts will become opt-in</a>. Hallelujah!</p>
<p>And if you want to be really safe, Nick shared in his wonderful &quot;One Tip a Week&quot; newsletter <a href="https://one-tip-a-week.beehiiv.com/p/one-tip-a-week-before-you-npm-install-that-package">how to set up the free Socket firewall</a> so that malicious code isn't even entering your machine!</p>
<p>And lastly, it's always good to stay ahead and check common best practices. <a href="https://github.com/lirantal/npm-security-best-practices/">Liran maintains <code>npm-security-best-practices</code></a> and it's worth a look!</p>
<h2>Random MDN – <code>import with</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4tXOm6sfkkpg1Y0Se8bRLf/acd4c64faab211ad3a786f1cd15ef7f8/code-shot-import-json-with.png" alt="const data = await import(&quot;./data.json&quot;, {   with: { type: &quot;json&quot; }, });"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Here's a quick reminder that you can use <code>with</code> in static and dynamic imports to load JSON. More types like CSS and text are on their way. 🤞</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with&quot;&gt;Import the fancy way&lt;/a&gt;</p>
<h2>TIL recap – ARIA roles can change children semantics</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1lxxkFByzIExtI0tv3gP5n/6f601627526007f1bee471aef25665e8/Screenshot_2026-06-16_at_12.26.19.png" alt="Widget showing that an incorrectly applied  removes listitem semantics."></p>
<p>Did you know that incorrectly applied ARIA roles can nuke semantics entirely? The standard rule applies: if you're reaching for ARIA, make sure you know what you're doing.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/aria-roles-can-remove-their-childrens-semantics/&quot;&gt;Be aware of ARIA&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3FQmDEJE7fTcxFZAk7Tria/ecf1a1b08ddfbd8af09195de1229912b/code-shot-baseline-style-queries-lh.png" alt="Newly available: @container style(--theme: dark) {   .card {     background: #1e1e2e;     color: #cdd6f4;   } }  &gt; Widely available .prose {   margin-block: 1lh;    scroll-padding-block: 2rlh; }"></p>
<p>Friends, we made it! <a href="https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/151#css">With Firefox 151</a> container style queries working with custom properties entered the baseline. And it's funny, <a href="https://caniuse.com/css-container-queries-style">according to caniuse.com</a>, Firefox is now the only browser supporting the full functionality? What a funny world!</p>
<p>And on the widely available side, the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length#lh"><code>lh</code></a> and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/length#rlh"><code>rlh</code></a> units are now very safe to use!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/oddbird/show-when">oddbird/show-when</a> – Shows or hides an element based on provided conditions.</li>
<li><a href="https://github.com/yousifamanuel/terraink">yousifamanuel/terraink</a> – Create unique and customizable map posters.</li>
<li><a href="https://github.com/andremichelle/openDAW">andremichelle/openDAW</a> – Next-generation web-based Digital Audio Workstation.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1kXwU99TjRIhea6xmacye8/07c99081e8d39e2c8f922f113a2a254a/image-shot-font-metrics-handgloves.png" alt="Metric and render comparison of two fonts."></p>
<p>If you're fighting the web font fallback game to reduce layout shifts, Fontastic Space might be able to help out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://fontastic.space/&quot;&gt;Compare fonts&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p>I use AI because I'm too scared of being left behind, but certainly <a href="https://www.ivanturkovic.com/2026/02/25/ai-made-writing-code-easier-engineering-harder/">I'm not sure if that's the job I fell in love with</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>But [using AI] is different because it is not asking engineers to learn a new way of doing what they do. It is asking them to stop doing the thing that made them engineers in the first place and become something else entirely.
:::</p>
</blockquote>
<p><em>And if you now wonder if this newsletter is generated, it definitely is not.</em></p>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 47 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #193</title>
      <link>https://webweekly.email/archive/web-weekly-193/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-193/?ref=ww-rss</guid>
      <pubDate>Fri, 22 May 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #193 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard of BEMoji? Do you know what a <code>CloseWatcher</code> is for? And how confidently do you use <code>aria-label</code>?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Mike&quot; title=&quot;Dandy Livingstone - Suzanne Beware of the Devil&quot; youtube=&quot;Z1oKcitiKKU&quot;
I've been on a big Jamaican ska kick lately and I can't get enough of this song. It's a great way to start the day, dancing to this while making your breakfast.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there is <strong>only one more song</strong> left in the queue.</p>
<hr>
<p>I must say that last week hit me. And not in a good way.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5NsxoXMD3oGAJ6HL9QbNBv/0bf15e82678bb375574bf501e17f6bbe/image-shot-2ality-offline.png" alt="2ality blog: temporarily offline"></p>
<p>If you've been in the game long enough, you probably know <a href="https://2ality.com/">Dr. Axel's blog <code>2ality</code></a>. It went offline because of shrinking income and increasing hosting costs due to AI scraping. This is a common trend. Humans consume less individual content, AI bots on the other hand happily slurp in even more. For creators it's a lose-lose situation.</p>
<p>People like <a href="https://bsky.app/profile/joshwcomeau.com/post/3mkxyqfwwm22t">Josh, who produces high-quality materials, started to question whether the creator model will remain sustainable</a>. Honestly, I'm struggling too, and I don't know anymore.</p>
<p>I've been blogging for a very long time and here's what's going on traffic wise.</p>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6DylHL8nfzAAl7jU9poWPT/08165218f1c755e673dfdb5c03bd5923/image-shot-traffic-decline.png" alt="A line graph showing a constant decline."></p>
<p>This isn't the full graph but my blog traffic is down to a quarter from what it used to be. Web Weekly subscribers are stagnating at around 6.4k since the beginning of the year. Frankly, many others and I struggle and question if all this education, curation, writing, and speaking actually matters. And I honestly don't have an answer to that.</p>
<p>ChatGPT, Claude, and friends already changed the game but now Google Search will also go all-in on chat mode. <a href="https://newsletter.ownyourweb.site/archive/own-your-web-issue-18-curators/">Matthias phrased it on point</a>:</p>
<blockquote>
<p>The search engine no longer says “here, go read what this person wrote.” It now says “here, I’ve already read it for you.” The contract is broken.</p>
</blockquote>
<p>What's the deal when everyone can just access anything without caring about where it's coming from?</p>
<p>I, for one, enjoy a human touch. I enjoy craft and care. I enjoy the tiny details. I like the idea of a human putting in the work. Regardless of whether it's writing, speaking, recording... I'm online for seeing &quot;the good stuff&quot;. And <a href="https://wil.to/posts/llemdashes/">I agree with Mat's take</a>.</p>
<blockquote>
<p>why should anyone care about reading something nobody cared enough to write?</p>
</blockquote>
<p>If everything is low effort, what's the point of it? If everything becomes generated, there's no need for creation. And maybe that's just the next era and I'm sentimental about the good old times, but there's another thing that doesn't make sense.</p>
<p>When we talk about gen AI things, the &quot;creators&quot; are looking for recognition and celebration. It doesn't trigger anything in the people consuming, though. There's now a strong divide that's hard to unsee once you realize it's there.</p>
<p>Nobody will congratulate anyone for assembling an IKEA Billy shelf. Yet, people feel proud. Here's the thing: nobody will think of them as woodworkers, though. Yet, everybody has become a writer, artist, or builder. Generated things might matter for the &quot;creator&quot; but everybody else literally doesn't care because there's no effort. There's no love, care, or drive in most of the &quot;new things&quot;.</p>
<p><em>Side note: I still fail to recognize a prompt as craft.</em></p>
<p>But where will this bring us? More and more things are created. More articles. More videos. More everything. Yet, the majority cares less about anything. Things are changing, I get that, but I can't imagine a world where music, education, or art are all low-effort. A world in which &quot;real work&quot; isn't valued. I still care about the good stuff (I hope Web Weekly reflects this) and I wonder if there are enough people left feeling the same.</p>
<p>It became clear to me that <strong>the people who care will keep the lights on for all the creators</strong> and this year feels like a turning point for whether creation survives. It's on you, me, and us as a community.</p>
<p><a href="https://www.kevinpowell.co/article/tell-someone-you-appreciate-them/">Kevin phrased it nicely this week</a>.</p>
<blockquote>
<p>Now, more than ever, I think the best thing you can do is reach out to someone who makes content that you appreciate, and let them know about it.</p>
</blockquote>
<p>Honestly, reach out, support, give back as much as possible. Of course, this includes Web Weekly, but whenever you have the feeling that something was made with care and can't imagine the effort that has gotten into the creation, let the people know. Share the heck out it on social media, tell your friends, and, if you can, support your favorite creators financially.</p>
<p>It's very rough out there right now but I'd really love to keep seeing some good stuff in the future. It's on us, the people who care, to make that happen.</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mmpgkdvmlc26">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116637359572026885">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-193-will-hit-all-the-inboxes-in-share-7464791364849979392-RBtc/">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<p>::: highlight sponsored</p>
<h2>React Gantt Chart Built for Developers</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/LPoYfOrnt2G9ZYfgE659i/9698cd87fc9023372a66c18b6979fb54/svar-gantt-webweekly.png" alt="React-Native Gantt Chart — No wrappers. Built for real React apps."></p>
<p>A 100% React Gantt chart component for modern apps. SVAR React Gantt handles large datasets, complex project visualizations, and smooth interactions for tasks and dependencies — no JS wrappers, full TypeScript support.</p>
<p>Plan, schedule, and track projects with drag-and-drop editing and flexible timelines. The core is MIT-licensed and free. PRO unlocks critical path, baselines, auto-scheduling, and more.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://svar.dev/react/gantt/?utm_source=webweekly&amp;utm_medium=newsletter&quot;&gt;Explore React Gantt&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/sponsor&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1wGx72btqQj3jBlOoDV69Q/8d0e0cfb2ac85e88eb80f6d8bfc563cb/code-shot-emoji-classes.png" alt="div class=🃏__📝     h2 class=🃏__🔠Card Title/h2     p class=🃏__💬Card description text/p   /div"></p>
<p>BEMoji can't be real. Or can it? 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://tomhayes.github.io/BEMoji/&quot;&gt;Unify styles&lt;/a&gt;</p>
<h2>Short vs long hands</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2ABgLWExmE3v2InEDpEuac/e3f8663f71fccaaba1ebcf68cd258b8e/code-shot-compare-grid-shorthand.png" alt="short: .selector {   grid: auto-flow dense 40px / repeat(3, 1fr); } vs long: .selector {   grid-auto-flow: dense;   grid-auto-rows: 40px;   grid-template-columns: repeat(3, 1fr); }"></p>
<p>While reading this post I discovered that I very rarely (read never) use the <code>grid</code> shorthand. The syntax just never made it into my muscle memory and I'm a big believer in more explicit code anyways.</p>
<p>Do you write your CSS as short as possible?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://thoughtbot.com/blog/when-to-use-and-not-use-css-shorthand-properties&quot;&gt;Be explicit&lt;/a&gt;</p>
<h2>Centering things in 2026</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/75VCqeD0holSzeJc6jCeFB/5116602e193c522b0358aa6837344511/code-shot-place-self-center.png" alt=".centered { inset: 0; place-self: center; }"></p>
<p>Temani says that centering things with absolute positioning is like using floats for layouts. And it might sound a bit harsh, but we have fabulous new tools to center elements. This post goes into the standards but also covers the upcoming <code>text-box</code> property, anchor positioning, and quick and fancy two-liners like the one above.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/the-state-of-css-centering-in-2026/&quot;&gt;Be at the center&lt;/a&gt;</p>
<p>And if the recommended modern ways aren't enough, here's a gigantic list of <a href="https://css-generators.com/center/">100 ways to center elements</a>.</p>
<h2><code>Temporal</code> goes stable in Node.js</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6Zo8KGoLVfOjiS1N09a6kq/1f131c5021de952a0602b2d5ddc60d36/code-shot-compare-temporal-dates.png" alt="const today = Temporal.PlainDate.from('2026-01-31') const inOneMonth = today.add({ months: 1 }) console.log(inOneMonth.toString()) // 2026-02-28"></p>
<p>Luckily I haven't had to deal with date handling for a long while. If you need to right now, you're probably excited about <code>Temporal</code>, which goes stable in Node.js. Luciano described what's new in Node.js 26 and the date section is excellent. I didn't know that <code>Temporal</code> clamps dates!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://nodejsdesignpatterns.com/blog/whats-new-in-nodejs-26/&quot;&gt;Fiddle with dates&lt;/a&gt;</p>
<h2>The wonderful weird web – Mechanical Pencil</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/jvl3tQiFZlqcywJazDfgJ/085618bddd608e7601ac60334b82a1ae/image-shot-iconic-objects.png" alt="Three illustrations: a retractable pen, a zippo and a pencil"></p>
<p>This is absolutely beautiful and so well done: if you want to understand how a retractable pen (or lighter or candy dispenser) works mechanically this site will explain it to you.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://mechanical-pencil.com/&quot;&gt;Get it?&lt;/a&gt;</p>
<p><em>And if you enjoy this: here's an absolute <a href="https://ciechanow.ski/mechanical-watch/">internet classic explaining how mechanical watches work</a>.</em></p>
<h2>Evaluate your <code>aria-label</code>s</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4wvxtNG8RBrEdAprPoJk9w/40bbae23778a4e47affd847f8db80866/code-shot-aria-label-div.png" alt="Dont do this: div aria-label=News     … /div"></p>
<p>If you're quick with using <code>aria-label</code> or <code>aria-labelledby</code>, Manuel explains when you should <strong>not</strong> use it. He also highlights that it's sometimes ok to label <code>sections</code> and <code>popovers</code>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://matuzo.at/blog/2026/aria-label-generic-elements&quot;&gt;Label correctly&lt;/a&gt;</p>
<p>Side note: <a href="https://www.stefanjudis.com/today-i-learned/forms-require-an-accessible-name/">forms benefit from additional labeling</a>, too.</p>
<h2>View Transitions gotchas</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/39fMWtWkLX3vpG0MQoe09I/f64551161d120e4089ad7f1a674184cc/code-shot-pagereveal-finished.png" alt="window.addEventListener(&quot;pagereveal&quot;, (event) =&gt; { event.viewTransition.finished.then(() =&gt; console.log(&quot;Transition completed ✅&quot;)).catch((err) =&gt; { console.error(&quot;Transition killed:&quot;, err.name, err.message);});});"></p>
<p>Durgesh struggled with cross-document view transitions and published the article that he wished existed. It includes lots of hands-on tips and tricks like the view transition timeout of four seconds (well, today I learned), <code>blocking=render</code> and the <code>pagereveal</code> or <code>pageswap</code> events. Highly recommended.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-tricks.com/cross-document-view-transitions-part-1/&quot;&gt;Swap!&lt;/a&gt;</p>
<h2>Google IO updates</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/67tmCubi0LW0524dHilsPS/5d0651891aa6e4cb359b75abe1b0f21e/image-shot-google-io-web-ui.png" alt="What's new in Web UI"></p>
<p>I haven't had the time to watch and read about all the things being talked about at this year's I/O and I'll untangle things in the upcoming weeks, but there are two links that you can check out today.</p>
<ul>
<li>Blog: <a href="https://developer.chrome.com/blog/chrome-at-io26">15 updates from Google I/O 2026: Powering the agentic web with new capabilities, tools, and features in Chrome</a></li>
<li>Video: <a href="https://www.youtube.com/watch?v=uT7MVcCQ4rw&amp;list=PLOU2XLYxmsIJlbOKTGWrpeLrw5cSuWCgb&amp;index=5">What's new in Web UI</a></li>
</ul>
<h2>Scroll-driven animations explained</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5efU3GrPbae32mTZjPpkmG/71aea468113c07bbded2b011f851f76e/video-shot-scroll-progress-chart.gif" alt="The progress of a scroll container explained while scrolling."></p>
<p>Josh does what Josh always does and published a post explaining how scroll-driven animations work. They still lack support in Firefox, but if you want to get going you know what you'll read here. A high-quality blog post with lots of demos.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshwcomeau.com/animation/scroll-driven-animations/&quot;&gt;Scroll!&lt;/a&gt;</p>
<h2>Random MDN – <code>CloseWatcher</code> and <code>requestClose()</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1HF4kVSNZA3XywKHDsyTvI/15900d42b523ba82a14960338f5aec6c/code-shot-close-watcher.png" alt="const watcher = new CloseWatcher(); const picker = setUpAndShowPickerDOMElement(); let chosenValue = null;  watcher.onclose = () =&gt; {   chosenValue = picker.querySelector(&quot;input&quot;).value;   picker.remove(); };"></p>
<p>For certain UI elements closing behavior should be built in. Think of a modal that closes on <code>ESC</code>. But what about mobile interfaces? On Android, for example, a native gesture to close things can also be a swiping gesture. How do you catch these and don't let the browser jump back into history. That's what the <code>CloseWatcher</code> is for.</p>
<p>Here are some resources if you want to dive into the topic:</p>
<ul>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/CloseWatcher"><code>CloseWatcher</code></a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/API/CloseWatcher/requestClose"><code>CloseWatcher.requestClose</code></a></li>
</ul>
<h2>TIL recap – new lines in <code>href</code> URLs</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3FNc5V626LludTli2RvT99/f829451f9943b475f931040c43313b19/Screenshot_2026-05-25_at_10.17.53.png" alt="HTML example showing that tabs and line breaks are removed from an href URL"></p>
<p>Did you know that the HTML parser removes line breaks from URLs when they're part of <code>href</code>? Now you do!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/new-lines-are-removed-from-whatwg-urls/&quot;&gt;Break URLs&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/239xXdhJBYMj03vpWDK0s7/3227ed94150328d26ec9b44532160865/code-shot-baseline-open-user-activation.png" alt="Newly: :is(select, input):open {   background-color: pink; } Widely: if (navigator.userActivation.isActive) {   // proceed to request playing media, for example }"></p>
<p>With <a href="https://webkit.org/blog/17938/webkit-features-for-safari-26-5/">Safari 26.5</a>, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:open">the <code>:open</code> pseudo-class</a> now works across browsers. The cool thing: it works for <code>&lt;details&gt;</code> and <code>&lt;dialog&gt;</code> but also <code>&lt;select&gt;</code> and <code>&lt;input&gt;</code> elements.</p>
<p>And when it comes to Baseline widely supported, <a href="https://developer.mozilla.org/en-US/docs/Web/API/UserActivation">the User Activation API</a> works across browsers since November 2023.</p>
<h2>Classifieds &amp; friends</h2>
<p>A quick recommendation: if you like Web Weekly you'll enjoy <a href="https://heydesigner.com/">HeyDesigner</a>, too. It's a daily reading list and weekly newsletter for product people, UXers, PMs, and design engineers.</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/rexa-developer/tiks">rexa-developer/tiks</a> –  Procedural UI sounds for the web. Zero audio files.</li>
<li><a href="https://github.com/codepen/slideVars">codepen/slideVars</a> – UI for Updating CSS Custom Properties.</li>
<li><a href="https://github.com/taigrr/spank">taigrr/spank</a> – Slap your MacBook, it yells back.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7Gvb4UnHYbIUDnimVqIyls/b6ab7f20497a88e034188700fdf070cc/image-shot-accessibility-support.png" alt="Accessibility support — Will your code work with assistive technologies?"></p>
<p><code>a11ysupport.io</code> gives a quick idea if certain features work across browser / screenreader combinations. Of course, it's still best to test things yourself but for a quick look this will come in handy.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://a11ysupport.io&quot;&gt;Check support&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://andrewmurphy.io/blog/if-you-thought-the-speed-of-writing-code-was-your-problem-you-have-bigger-problems">Writing code is often not the bottleneck</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>If you want to ship faster, look at where things are waiting.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself — mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #192</title>
      <link>https://webweekly.email/archive/web-weekly-192/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-192/?ref=ww-rss</guid>
      <pubDate>Sun, 17 May 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #192 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard of the new <code>&lt;install&gt;</code> HTML element? Do you use <code>round()</code> in your CSS? And do you cancel requests with <code>AbortSignal.timeout</code>?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: song by=&quot;Steven&quot; title=&quot;Humanity's Last Breath - Godhood&quot; youtube=&quot;4QEA3FpqKUE&quot;
Truly heavy music doesn't need high BPM, blast beats and millions of notes.
Sometimes all it takes is one heavy AF riff and a perfectly fitting music video.
:::</p>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there is <strong>only one more song</strong> left in the queue. 😱</p>
<hr>
<p>This week I learned that Firefox and Safari sometimes behave differently depending on the site you're on. I honestly had no idea. How can this be possible?</p>
<p>It's because of Chromium's dominant market share. Developers test in Chrome. Other browsers are often forgotten, and if something doesn't work in other browsers, users won't blame the site. They will blame the browser. Safari and Firefox simply try to provide a good experience.</p>
<p>Den got into the specifics in <a href="https://denodell.com/blog/browsers-treat-big-sites-differently">a fabulous investigation post</a>. Here are some quotes.</p>
<p>Apparently, Firefox and Safari ship &quot;quirks files&quot; that are publicly accessible in version control.</p>
<blockquote>
<p>The quirks files aren’t just fixing broken sites; they’re often compensating for Chrome’s control over what “working” means in the first place.</p>
</blockquote>
<p>And Chrome doesn't need one because, frankly, it's the standard.</p>
<blockquote>
<p>Chrome doesn’t need quirks because Chrome’s interpretation of web standards is the version that everyone else works to.</p>
</blockquote>
<p>What can we do about it? Testing in multiple browsers!</p>
<blockquote>
<p>Open your site in Firefox and Safari. Not occasionally, not before a big launch, regularly. The quirks files exist because developers didn’t do that.</p>
</blockquote>
<p>It's a great read. Thanks, Den!</p>
<p><em>And if you want to dive deeper into the topic of web compatibility: here's <a href="https://webcompat.dev/">a handy map with all the resources</a>.</em></p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mm5opuxfcc2c">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116597387933316507">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-192-will-go-out-in-just-a-little-share-7462233302364528640-RaTv">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Wonderful websockets, pusher-compatible</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6W3d0mat2sxLhUrod3KSST/40e8ab16f950e8758021f8c82616b9da/vask-webweekly.png" alt="Websockets, billed sanely."></p>
<p>Vask is a managed websocket platform for modern developers. It speaks Pusher, so you can switch in 3 minutes, but it runs on the edge close to your users for low-latency. Use coupon <code>WEBWEEKLY</code> for 20% off for life.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://vask.dev/?utm_campaign=2026-05-18-main-ad&amp;utm_medium=sponsor&amp;utm_source=webweekly&quot;&gt;Try Vask free&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/sponsor&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/OZdw2JVBfcNBxiVEsCULt/cd04e591f8e24632f2100975fea0c667/image-shot-waterloo-geese.png" alt="A map with highlighted geese"></p>
<p>The University of Waterloo has a problem: geese on campus. And the problem got so out of hand that students need to take different paths to class to not get attacked. How do they know where it's safe to walk? Of course, someone built an app for that. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.waddleloo.com/&quot;&gt;Watch out!&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://ohhelloana.blog/woman-in-tech/">It's 2026 and women are still asked to teach others to think a little bit and not be a prick</a> → &quot;In male dominated fields, [...], the bad apples are there and they make your life a living hell.&quot;</li>
<li><a href="https://sive.rs/n0">Prepare your “no” and keep it handy</a> → &quot;I took an hour to write a really nice “no” in advance.&quot;</li>
</ul>
<h2>When the <code>O(n^2)</code> trap hides in plain sight</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1LGdwpJHcwCnLSRyLbDyYv/5360a76c93f5b6694eaa07df385e1f66/code-shot-compare-filter-vs-set.png" alt="Two code snippets compared. One has O(n^2) and one has O(n)."></p>
<p>I rarely deal with Big O notation. Aral explains how to discover overly complex code and provides quick fixes. I love it!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dev.to/aralroca/the-on2-bug-that-looked-like-clean-code-3556&quot;&gt;Clean up&lt;/a&gt;</p>
<h2>How to build mobile-safe layouts</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1q1PGbfSvYAO20bx5s9vSP/f2a278333a11679973bf644b155319c0/code-shot-safe-area-inset.png" alt=".chat-button {   position: fixed;   right: calc(env(safe-area-inset-right) + 16px);   bottom: calc(env(safe-area-inset-bottom) + 16px); }"></p>
<p>Kilian explains how <code>safe-area-inset-*</code> can give you that extra bit of polish for mobile UIs. The post includes interactive demos, too. Nice!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://polypane.app/blog/using-safe-area-inset-to-build-mobile-safe-layouts/&quot;&gt;Respect the device&lt;/a&gt;</p>
<h2>What are constructable stylesheets?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/zCmQf6LzsuVjSdwHiuXmG/65aa203721abef4ac637cd50bfd7cb8a/code-shot-constructable-stylesheets.png" alt="// Create a stylesheet object const sheet = new CSSStyleSheet(); // Populate it (synchronous) sheet.replaceSync(); // Or attach it to the document itself document.adoptedStyleSheets = [sheet];"></p>
<p>This post covers many internals of <a href="https://lit.dev/">Lit</a> and explains how the framework handles styles shared across components. But the beginning alone is golden if you want to understand what <code>new CSSStyleSheet()</code> is about.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/constructable-stylesheets-and-adoptedstylesheets-one-parse-every-shadow-root/&quot;&gt;Ship with style&lt;/a&gt;</p>
<h2>More declarative HTML: <code>&lt;install&gt;</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3oVTLVxvzk6x7T0AOjfyDv/5cccc546582a12dd1e690199d30e9f74/code-shot-install-element.png" alt="install installurl=https://awesome-app.com/   a href=https://awesome-app.com/Launch Awesome App/a /install"></p>
<p>There's a new declarative HTML element in town. It's experimental, but hey, I'm all game for these new elements. <code>&lt;install&gt;</code> renders a trusted install button for you, which then provides a web app installation flow without JavaScript required. Nice!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.chrome.com/blog/install-element-ot&quot;&gt;Play with install&lt;/a&gt;</p>
<p><em>What do you think of these new elements? Chromium also ships <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/geolocation"><code>&lt;geolocation&gt;</code></a> and there's <a href="https://chromestatus.com/feature/4926233538330624"><code>&lt;usermedia&gt;</code> in the making</a>.</em></p>
<h2>The wonderful weird web – Some rain for your second screen</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/10U0jjskApx7C9IOe9qN1l/b44a4f609e7183bcbcc1a5d542074fc8/image-shot-london-rain.png" alt="Rain on a window glass looking outside."></p>
<p>If you like rain and are looking for a soothing image on your second screen, you'll dig this!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://nicopr.fr/tmp/shades/heartfelt.html&quot;&gt;Look out of the window&lt;/a&gt;</p>
<h2>Unicode, emojis and surrogate pairs</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4G4xZL4V29lAUsp7z4tS6e/63b35101ca866f50272d8f4b7eedd852/image-shot-graphemes-table.png" alt="Table explaining code units, code points and graphemes."></p>
<p>George shares his favorite bug of all time and explains how unicode and emojis work internally. I love it!</p>
<blockquote>
<p>Any code that does str.slice(0, 1) or str[0] to get &quot;the first character&quot; is potentially broken.</p>
</blockquote>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://george.mand.is/2026/05/my-favorite-bugs-invalid-surrogate-pairs/&quot;&gt;Split safely&lt;/a&gt;</p>
<h2>Do we need <code>round()</code> in CSS?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/wNVD9td2uS40n4Qblx3zV/7c0146030f6356905e38cafece62de6c/code-shot-css-round.png" alt=".title {   font-size: round(down, 15px, 2px); }"></p>
<p>I was a bit skeptical about whether I really needed to adopt <code>round()</code> when I started reading Ahmad's post, but I think he convinced me because seeing floating values (23.2px etc) always bugged me and there are some more cases when rounding values comes in handy.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://ishadeed.com/article/css-round/&quot;&gt;Round, and round, and round...&lt;/a&gt;</p>
<h2>The <code>web-features-cli</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/kYzi61Imv8u2nZ0CLyLBw/1cb2e8e8b8a1090493d4c7d8c720d06e/code-shot-wf-user-invalid.png" alt="wf command and example output for ."></p>
<p>Short'n'sweet: if you live in the terminal and want to access browser support, bugs, baseline status, and specs right there, the W3C WebDX Community Group released a new CLI! 🎉</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.npmjs.com/package/web-features-cli&quot;&gt;Query web features&lt;/a&gt;</p>
<h2>Random MDN – <code>AbortSignal.timeout</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5NjNt6RRKER6yY8SuSTSv/96ec487ee90a7c3b6f027387464879fe/code-shot-abort-signal-timeout.png" alt="try {   const res = await fetch(url, { signal: AbortSignal.timeout(5000) });   // ... } catch (err) {   if (err.name === &quot;TimeoutError&quot;) {     console.error(&quot;It took more than 5 seconds to get the result!&quot;);   }   // ... }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Did you know that you can pass <code>AbortSignal</code> to your <code>fetch</code> calls? And even cooler, did you know that <code>AbortSignal</code> supports a timeout method? Well, now you do! 😎</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/timeout_static&quot;&gt;Cancel requests&lt;/a&gt;</p>
<h2>TIL recap – alternative text for generated content</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2fdyTvTU3F6XTBYSJsZinc/1085409daa37f35e26caa0d0f564de74/code-shot-content-alt-text.png" alt=".new-item::before { /* &quot;black star&quot; and element content is read out / content: &quot;★&quot;; / &quot;Highlighted&quot; &amp; element content is read out / content: &quot;★&quot; / &quot;Highlighted&quot;; / Generated content is ignored &amp; only element content is read out */ content: &quot;★&quot; / &quot;&quot;; }"></p>
<p>When you're using <code>content</code>, you must always be careful because this content can also make it into the accessibility tree. For a while now, you can define alternative text right in CSS and that's pretty cool! Learn more about it on the blog.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/css-content-accepts-alternative-text/&quot;&gt;Define an alternative&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6slL9h2xGDggScLmsfUMqX/a75fe3140b240131badf91c340024573/code-shot-baseline-search-highlight.png" alt="Widely available the &quot;search&quot; element. Newly available the &quot;::highlight()&quot; pseudo element."></p>
<p>Since April, <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/search">the <code>search</code> element</a> is Baseline widely available! And if you're on the cutting edge, <a href="https://developer.mozilla.org/en-US/docs/Web/API/CSS_Custom_Highlight_API#style_highlights"><code>::highlight()</code></a> is Baseline newly available since March.</p>
<h2>Classifieds &amp; friends</h2>
<p>Sara is running a sale on <a href="https://practical-accessibility.today/">her Practical Accessibility course</a> right now to honor this year's Global Accessibility Awareness Day. It's a whopping 25% off. If you want to level up your accessibility game, now's your chance!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/erictli/scratch">erictli/scratch</a> – A minimalist, offline-first markdown note-taking app.</li>
<li><a href="https://github.com/joseph/mud">joseph/mud</a> – A perfect markdown viewer for macOS.</li>
<li><a href="https://github.com/aarongustafson/form-saver">aarongustafson/form-saver</a> – A web component that stores (and restores) values within the form it wraps.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3IDZzffdvCqwlXpK4LRgqp/9c1c7e9c8d74a4e1c3860e1dec2ff58f/Screenshot_2026-05-18_at_20.25.14.png" alt="Feed Validation Service"></p>
<p>Just because I just checked the Web Weekly feeds, if you're shipping RSS feeds on your blog (which I hope you do), here's the official W3C validator. Let's keep things valid, shall we? 🫣</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://validator.w3.org/feed/&quot;&gt;Validate&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://codegood.co/writing/ai-shrinks-the-team-not-the-problem">Truth to that</a>.</p>
<p>::: highlight quote</p>
<blockquote>
<p>Reducing the team [because of AI] does not reduce the number of things that can go wrong. It reduces the number of people available to own them.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #191</title>
      <link>https://webweekly.email/archive/web-weekly-191/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-191/?ref=ww-rss</guid>
      <pubDate>Sun, 10 May 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #191 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Have you heard that the new Git version makes rewriting history easier? Did you ever combine multiple CSS keyframe animations? And have you played with the new HTML in canvas API yet?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Paweł listens to <a href="https://youtu.be/XiJ7vTcMtIk">Hird - Keep You Kimi</a> and says:</p>
<blockquote>
<p>No chance I remember how this one landed on my playlist, but this is a solid, mesmerising tune. This baseline halfway through the song gives me goosebumps.
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>two more songs</strong> left in the queue.</p>
<hr>
<p>The biggest news this week was that <a href="https://developer.chrome.com/blog/new-in-chrome-148">Chrome 148</a> shipped a <a href="https://developer.chrome.com/docs/ai/prompt-api">new Prompt API</a>. Which means that Chrome now includes Gemini Nano. And that's right; this model probably already sits on your computer right now.</p>
<p>And there've been strong reactions because we're talking web standards here. Here's <a href="https://wil.to/posts/googles-prompt-api/">Mat's take</a>:</p>
<blockquote>
<p>At present, this is a web standard designed around a single company’s product.</p>
</blockquote>
<p>Now, I'm not involved in spec writing but this part also seems very strange to me:</p>
<blockquote>
<p>Once a model is available on your device, per the specification, any website you visit will be able to send prompts to that model without requesting permission to do so, then do whatever it wants with the responses.</p>
</blockquote>
<p>Think of Chrome's scale. Millions and millions of machines downloading a 4GB model they didn't ask for so that websites can &quot;do LLM things&quot;. Wild!</p>
<p>If you want to dive deeper into this topic, here are some more links:</p>
<ul>
<li><a href="https://wil.to/posts/googles-prompt-api/">Google’s Prompt API</a></li>
<li><a href="https://github.com/mozilla/standards-positions/issues/1213#issuecomment-4347988313">Firefox's concerns written by Jake Archibald</a></li>
<li><a href="https://daverupert.com/2026/05/small-language-models-in-the-browser/">The duality of language models in the browser</a></li>
</ul>
<p>Let's see how all this unfolds!</p>
<hr>
<p>If you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mllykffbfk2j">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116557546849514074">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-191-will-go-out-in-just-a-little-share-7459684104372920320-zkI6">LinkedIn</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps this indie newsletter out. Thank you! ❤️</p>
<p>::: highlight sponsored</p>
<h2>Uptime monitoring built for people who hate Datadog.</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2WEd2YKclfO18ryk4n5QIa/26eea3d63c96b0152e8aa96ed5fc7701/up-watch.png" alt="Uptime monitoring built for people who hate Datadog."></p>
<p>Upwatch is a solo-dev-built uptime monitor. Multi-region checks from New York, Frankfurt, Singapore, and Sydney. 30-second alerts to Slack, email, SMS, or webhook. $5/month for unlimited monitors — no per-seat fees, no upgrade traps. Use code WEBWEEKLY for 6 months of Pro free.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://upwatch.dev/webweekly?utm_source=webweekly&amp;utm_medium=newsletter&quot;&gt;Try Upwatch for free&lt;/a&gt;</p>
<p>&lt;small&gt;Web Weekly is open for sponsorships. When you want to reach 6k developers, &lt;a href=&quot;https://webweekly.email/sponsor&quot;&gt;you know what to do&lt;/a&gt;!&lt;/small&gt;
:::</p>
<h2>Web Weekly housekeeping</h2>
<p>You might have noticed, I took a bit of a break because I traveled to Valencia to give a Playwright workshop and well, I was late. Very late. And freaking out, frankly. But things went well and now we're back on track!</p>
<p>First of all, I need to apologize for a mistake I made last time. Ahmad booked an ad for his course <a href="https://thelayoutmaestro.com/">&quot;The Layout Maestro&quot;</a> and I made a silly copy and paste mistake. The email's CTA said &quot;Start practicing for free&quot; and of course high-quality materials neither can nor should be free. I'm sorry for the confusion that I caused.</p>
<p>Then, I plugged <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/image/image-set"><code>image-set()</code></a> as being widely available and <a href="https://bsky.app/profile/tunetheweb.com/post/3mk3jjwq3qs24">Barry had a great comment</a>.</p>
<blockquote>
<p>It's nice, but hiding assets in secondary resources like CSS (including inline attributes) chains their download 😢
So for LCP images and other important images, HTML (<code>&lt;img&gt;</code> or <code>&lt;picture&gt;</code>) are often better.
Alternatively, if using this, also add a preload with a <code>media</code> attribute to the HTML.</p>
</blockquote>
<p>Let's avoid using CSS backgrounds for important images!</p>
<h2>Something that made me smile this week</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3O9Jup2NJ3NtZExp2DMDJm/24a198ab53d87a71391b0b961f0e684d/image-shot-letter-o.png" alt="The letter &quot;O&quot;"></p>
<p>I've got no words for this URL. 😅 I mean, why?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://ooooooooooooooooooooooooooooooooooooooooooooo.ooo/&quot;&gt;Ooo?&lt;/a&gt;</p>
<h2>No code</h2>
<p>I didn't read any great non-coding related articles. Have you? If so, I'd love to read them, too!</p>
<h2>A quick 2min task...</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5bVkEMh8rGaJczHI8yYQvR/ee3c6238a96362953c5da3a1314461de/Screenshot_2026-05-07_at_21.37.28.png" alt="npm, pnpm and bun config for release gating"></p>
<p>With AI enabling more and more security incidents, you better be safe and tell your package manager not to slurp in every fresh package. Here's how to do it with npm, bun and pnpm.</p>
<ul>
<li>npm: <a href="https://docs.npmjs.com/cli/v11/using-npm/config#min-release-age"><code>min-release-age</code></a></li>
<li>pnpm: <a href="https://pnpm.io/settings#minimumreleaseage"><code>minimumReleaseAge</code></a></li>
<li>bun: <a href="https://bun.com/docs/pm/cli/install#minimum-release-age"><code>minimumReleaseAge</code></a></li>
</ul>
<h2><code>No-Vary-Search</code> (again)</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Ll0xaON735myZml4gsaIi/0ee7e1ea2571ba485c17d25e5b8cd192/Screenshot_2026-05-08_at_08.53.42.png" alt="No-Vary-Search: key-order, params, except=(&quot;colour&quot; &quot;size&quot;)"></p>
<p>Disclaimer: the <code>No-Vary-Search</code> header is currently Chromium-only, but if you want to serve cached HTML to URLs with lots and lots of random query (aka tracking) parameters, you should check it out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://csswizardry.com/2026/05/better-browser-caching-with-no-vary-search/&quot;&gt;Cache it!&lt;/a&gt;</p>
<h2>Combined CSS animations</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/50s5fCU4KACyHaQ8VJ17Q/97e09651e8ed43a975f57100487e35db/code-shot-animation-composition.png" alt="box { animation: rotate 5s linear infinite, rotate 5s linear infinite paused; animation-composition: add; } box:hover { animation-play-state: running; }"></p>
<p>Changing and tweaking infinite CSS animations is harder than you think. Temani explained how to do it using <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/animation-composition">the <code>animation-composition</code> property</a> and of course there's plenty of other CSS nerdery included.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/how-to-control-infinite-css-animations-part-1-of-2/&quot;&gt;Combine&lt;/a&gt;</p>
<h2>Accessibility myths debunked</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1em1Y7hBTz8FJpL3YAmln2/6bcc503326dbeea972a8d71139f86227/image-shot-accessibility-myths.png" alt="Accessibility myths debunked"></p>
<p>Oldie but goldie: Sergei shares and debunks common misconceptions about accessibility.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://a11ymyths.com/&quot;&gt;Build good stuff&lt;/a&gt;</p>
<p><em>And if that's not enough: here's <a href="https://stephaniewalter.design/blog/9-accessibility-myths-and-pushbacks-and-how-to-answer-them/">Stephanie giving even more arguments for building an accessible web</a>.</em></p>
<h2>The wonderful weird web – Cursor camp</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3ZI3ApBOfuBoH1bGLJKKud/524aebee7e2c95cfc3829af9ed5fcb78/Thursday__5.09_PM_at_Cursor_Camp.png" alt="A comic style waterfall with cursors swimming in a lake."></p>
<p>If you haven't gone hunting for all the goofy details in cursor camp, you're missing out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://neal.fun/cursor-camp/&quot;&gt;Enjoy the camp&lt;/a&gt;</p>
<h2>On readable code</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5CxE7oz0aMMCQ57wFVjpTf/b9adb99ea02a72afd5ebc27f4188f2c9/Screenshot_2026-04-24_at_10.37.37.png" alt="// Is this good code? const data = await fetchUsers()     .then(res =&gt; res.json())   .then(users =&gt; users.filter(u =&gt; u.active))   .then(users =&gt; users.map(u =&gt; u.name));"></p>
<p>There's nothing more to say other than I agree with the points Matt makes about chaining too many methods.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://allthingssmitty.com/2026/04/20/why-i-dont-chain-everything-in-javascript-anymore/&quot;&gt;Keep code readable&lt;/a&gt;</p>
<h2>HTML in canvas</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1ewHoRSd1XM8bDoR3FumGa/fe171dbbdec61a361b8d84dfd5628e29/video-shot-drag.gif" alt="A form that squishes and bounces when you drag a point on the form."></p>
<p>Are you ready for something very wild? There's a new <a href="https://github.com/WICG/html-in-canvas">experimental HTML in Canvas API</a> and you can play around with it in Chromium browsers after enabling a flag. After you've done that, you can put a <code>layoutsubtree</code> attribute on a <code>canvas</code> element and it'll render HTML in the canvas element. And because it's in the <code>canvas</code>, you can apply all sorts of funky effects. Absolutely wild!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/the-web-is-fun-again-first-experiments-with-html-in-canvas/&quot;&gt;Customize HTML rendering&lt;/a&gt;</p>
<p><em>And if you're looking for a more practical example: here's Eric explaining <a href="https://meyerweb.com/eric/thoughts/2026/04/27/canvas-ing-the-web/">how this feature solves a long overdue tooling problem</a>.</em></p>
<h2>More on the history of the <code>sizes</code> attribute</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4lAEAfGw81olcxHA5LG6yx/b1fd8d12806ef324f8b627024d4e65ed/code-shot-img-srcset-sizes.png" alt="img loading=lazy src= img-650.jpg srcset=img-650.jpg 650w, img-960.jpg 960w, img-1400.jpg 1400w sizes=auto, (min-width: 1040px) 650px, calc(94.44vw - 15px)&quot; alt=&quot;...&quot;&gt;"></p>
<p>I already shared my excitement about <code>sizes=auto</code> in <a href="https://webweekly.email/archive/web-weekly-190/#sizes%3Dauto-requires-width-and-height">WW 190</a> and <a href="https://webweekly.email/archive/web-weekly-189/#soon-on-the-baseline---sizes%3Dauto">WW 189</a>, but because it's such a fundamental change to how we load optimized images, I think it's more than warranted.</p>
<p>And there's news. Chromium was first to implement it, and now Firefox has followed. Only Safari is missing! If you want to learn more about the history of the attribute and how to apply <code>sizes=auto</code> progressively today, Mat shared his love-hate relationship with <code>sizes</code>.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://piccalil.li/blog/the-end-of-responsive-images/&quot;&gt;Load the right images&lt;/a&gt;</p>
<h2>Why you should update Git</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1CsV7wxf8D2eNyIFyWQl2W/3d24446607075789177ac20b2da46dbb/code-shot-git-history-reword.png" alt="$ git history reword 470eb6"></p>
<p>Git <code>2.54</code> comes with a feature that I bet you've been waiting for. At least I have. <code>git history reword &lt;commit&gt;</code> lets you reword commit messages without the interactive rebase dance. Finally!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://github.blog/open-source/git/highlights-from-git-2-54/&quot;&gt;Reword&lt;/a&gt;</p>
<h2>Random MDN – <code>RegExp.escape()</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2Hs5nClJ8OxIa6VAB3G7UB/97a258de876c2f0ec7f8cfda54eb37c3/code-shot-regexp-escape-orange.png" alt="const url = &quot;https://webweekly.email&quot;; const unsafe = new RegExp(url); console.log(unsafe.test(&quot;https://webweeklyXemail&quot;)); // true const safe = new RegExp(RegExp.escape(url)); console.log(safe.test(&quot;https://webweeklyXemail&quot;)); // false"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>If you're dealing with regular expressions based on dynamic input, <code>escape</code> can help you out!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/escape&quot;&gt;Escape!&lt;/a&gt;</p>
<h2>TIL recap – Global Git message templates</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6bMTD9edMwkceRUmwwolaw/2da2378a403a805159164c4bdac09ed9/code-shot-gitconfig-commit-template.png" alt=".gitconfig [commit]   template = ~/.gitmessage"></p>
<p>Speaking of Git, did you know that you can set up global commit message templates?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/global-git-commit-templates/&quot;&gt;Align your messages&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6t3yNICxX4zrFvrG88a8V/76fa1a48a3379d44a7534c77c02743b0/code-shot-baseline-v7.png" alt="Baseline Newly Available: contrast-color / Baseline widely available :user-invalid"></p>
<p>Short'n'sweet: <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value/contrast-color"><code>contrast-color</code> is now Baseline newly available</a> and <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:user-invalid"><code>:user-invalid</code> entered widely available</a>. 🎉</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/isaac-mason/crashcat">isaac-mason/crashcat</a> – A physics engine for JavaScript.</li>
<li><a href="https://github.com/componade/calendarjs">componade/calendarjs</a> – Lightweight date picker, event scheduler, and timeline components for JavaScript.</li>
<li><a href="https://github.com/johannesnagl/showmd">johannesnagl/showmd</a> – Preview Markdown files on macOS.</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7DUk9l5WJV1fly1fUZaKBI/9232c5f787995f8a2df55e4f0c01e858/image-shot-handwriting-font.png" alt="Turn your handwriting into a real font — free"></p>
<p>Disclaimer: I haven't tried this, but if you've ever wanted to turn your handwriting into a font, FontCrafter might be exactly what you're looking for.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://arcade.pirillo.com/fontcrafter.html&quot;&gt;Fontify yourself&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://terriblesoftware.org/2026/03/03/nobody-gets-promoted-for-simplicity/">This quote hits home big time</a>, doesn't it?</p>
<p>::: highlight quote</p>
<blockquote>
<p>Nobody gets promoted for the complexity they avoided.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
    <item>
      <title>Web Weekly #190</title>
      <link>https://webweekly.email/archive/web-weekly-190/?ref=ww-rss</link>
      <guid isPermaLink="true">https://webweekly.email/archive/web-weekly-190/?ref=ww-rss</guid>
      <pubDate>Sun, 19 Apr 2026 22:00:00 GMT</pubDate>
      <description>Web Weekly #190 - Full newsletter content</description>
      <content:encoded><![CDATA[<h2>Guten Tag! Guten Tag! 👋</h2>
<p>Do you use <code>image-set</code> for background images in CSS? Have you used Wakamai Fondue to analyze your variable fonts? And do you know that <code>field-sizing</code> isn't only about textareas?</p>
<p>Turn on the Web Weekly tune and find some answers below. Enjoy!</p>
<p>::: highlight quote
Jesper listens to <a href="https://www.youtube.com/watch?v=hmod5vTY8fM">Yttling Jazz — &quot;Illegal Hit&quot;</a> and says:</p>
<blockquote>
<p>This is a song that helps me keep my head up during winter and look forward to spring!
:::</p>
</blockquote>
<p>Do you want to share your favorite song with the Web Weekly community? <a href="mailto:stefan@webweekly.email">Hit reply</a>; there are <strong>three more songs</strong> left in the queue.</p>
<hr>
<p>Let's kick things off with some quick-to-read accessibility resources that didn't fit elsewhere!</p>
<p>Not new, but still relevant: Adrian shared <a href="https://adrianroselli.com/2025/06/where-to-put-focus-when-opening-a-modal-dialog.html">Where to Put Focus When Opening a Modal Dialog</a>. It comes with the banger opener:</p>
<blockquote>
<p>Blanket statements about where to put focus when opening a modal dialog are wrong, including this one.</p>
</blockquote>
<p>I also discovered <a href="https://html5accessibility.com/stuff/2026/04/07/old-advice-hiding-content-has-no-effect-on-accessible-name-or-description-calculation/">Steve's post explaining that hidden content still makes it into the computation of an element's accessible name</a>. This fact is important when you're connecting error messages with <code>aria-describedby</code> and hiding a possible error with <code>display: none</code>. The error won't be visible, but it'll still be part of the accessible name computation. Not good.</p>
<p>And lastly, Manuel reminds us all that <a href="https://matuzo.at/blog/2026/box-shadow-no-alternative-to-outline"><code>box-shadow</code> isn't an alternative to a proper outline</a>! Let's stick to the defaults.</p>
<p>I'll share some more accessibility resources next week. Is there anything great I should include?</p>
<hr>
<p>A big thank you and a huge bag of karma points go to Daniel who provided a new testimonial! If you have something nice to say about Web Weekly or want to <strong>support indie publishing in the times of cheap AI slop</strong>, reach out.</p>
<p>You can support Web Weekly on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>. We're currently at 40 supporters, and I'd love to hit the magical <code>50</code>. ❤️</p>
<p>And if you enjoy Web Weekly, share it with your friends and family.</p>
<ul>
<li>🦋 <a href="https://bsky.app/profile/stefanjudis.com/post/3mjxc2ukwpr2u">Bluesky</a></li>
<li>🐘 <a href="https://front-end.social/@stefan/116438880532760236">Mastodon</a></li>
<li>💼 <a href="https://www.linkedin.com/posts/stefan-judis_web-weekly-190-just-went-out-this-one-share-7452088945892536320-8GoJ">Linkedin</a></li>
</ul>
<p>A quick &quot;repost&quot; really helps my indie newsletter out. Thank you!</p>
<hr>
<p>::: highlight sponsored</p>
<h2>Build any web layout, with confidence.</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4hSNv1feU9HaRiApSZnKfs/f3f09de31453b7e795abbf0ebf8cb54a/web-weekly.png" alt="Build any web layout, with confidence. A practical written CSS course that teaches you how to think, build and debug web layouts."></p>
<p>The Layout Maestro is a written, interactive CSS course that teaches you how to think, build, and debug layouts, not just memorize properties. It covers <code>flexbox</code>, <code>grid</code>, <code>:has()</code>, and container queries. Use the coupon code <code>WEBWEEKLY</code> for $50 off.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://thelayoutmaestro.com?utm_source=webweekly&quot;&gt;Level up your layout game&lt;/a&gt;</p>
<p>Side note from me: I plug Ahmad's interactive blog posts from time to time, and looking at all the outstanding resources he's published over the years, I'm sure this course is more than worth it!
:::</p>
<h2>Something that made me smile this week</h2>
<p>Jack learned that there are &quot;only&quot; 84k Firefox extensions out there and thought &quot;Challenge accepted. I'm gonna install them all!&quot; while documenting his journey.</p>
<blockquote>
<p>YOU CAN (barely) RUN FIREFOX WITH ALL 84 THOUSAND EXTENSIONS.</p>
</blockquote>
<p>Who would have guessed. 😅 Man, I love the internet.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jack.cab/blog/every-firefox-extension&quot;&gt;Install them all&lt;/a&gt;</p>
<h2>No code</h2>
<ul>
<li><a href="https://newsletter.manager.dev/p/the-unwritten-laws-of-software-engineering">The unwritten laws of software engineering</a> → &quot;It took me embarrassingly long to learn that when production breaks and you recently deployed <em>anything</em>, you shouldn’t spend an hour proving your change is innocent...&quot;</li>
<li><a href="https://quinnkeast.com/writing/software-is-problem-ownership">What, then, are we paying for?</a> → &quot;Paying for software isn’t paying for a solution. It’s paying for someone else to own a problem.&quot;</li>
</ul>
<h2>Analyze your font's features set</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2qxSIldocbyn9cHFu5gddT/f76fd94f99ac15c0abc1793b7b2d2f0c/Screenshot_2026-04-18_at_09.04.26.png" alt="Wakamai Fondue landing page with a bold &quot;Drop a font&quot; in the middle."></p>
<p>You know, I'm no font or typography nerd but occasionally I need to inspect what features are included in a font. Font features? Yes! There are variable font axes controlled via <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-variation-settings"><code>font-variation-settings</code></a> or open type features controlled via <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/font-feature-settings"><code>font-feature-settings</code></a>.</p>
<p>But how can you inspect a font and know what you can do with it? Well, <strong>Wakamai Fondue</strong> just hit <code>v1.0</code>, and it looks great!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://wakamaifondue.com/&quot;&gt;Get nerdy about fonts&lt;/a&gt;</p>
<h2>More view transition tools and resources</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/2zsUfK4TSVHFiLqWhepRZp/154b4f9a2e8b6cff3578f3446a1793b6/Screenshot_2026-04-19_at_21.53.16.png" alt="The bag of tricks for view transitions."></p>
<p>After plugging <a href="https://webweekly.email/archive/web-weekly-188/#the-view-transitions-toolkit">Bramus' View Transition Toolkit</a> two weeks ago, people pointed me to the &quot;View Transition Bag&quot;. It includes plenty of resources and yes, view transition tools are included, too!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://vtbag.dev/&quot;&gt;Level up your transitions&lt;/a&gt;</p>
<h2>Modern features misbehaving in the shadow DOM</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/3AH701IY3cEDvB7Jed4twM/ddcbfd73eac877b0ca6811e529a38544/Screenshot_2026-04-19_at_09.15.58.png" alt="Modern CSS Feature Support For Shadow DOM – Tracking the state of support for CSS features within and across the shadow DOM to provide visibility into feature parity, usage details, and outstanding issues and bugs."></p>
<p>Granted, it's been a minute since I've used the shadow DOM with web components, but today I learned that there are quite a few issues with modern web features when crossing the boundaries.</p>
<blockquote>
<p>For example, cascade layers, container queries, @scope, and @property can behave differently between light and shadow DOM.</p>
</blockquote>
<p>The team behind Adobe Spectrum started documenting some common issues.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://shadow-dom-css.adobe.com/&quot;&gt;Know what works&lt;/a&gt;</p>
<h2><code>sizes=auto</code> requires <code>width</code> and <code>height</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6zxpLcNtn8b3C6vCyk0ryG/6dd8b1c9cb58a57573ba141c898c219d/Screenshot_2026-04-19_at_14.16.33.png" alt="In short: in addition to requiring loading=lazy, sizes=auto also basically requires that &lt;img&gt; elements have width and height attributes."></p>
<p>Here's a quick addition from <a href="https://webweekly.email/archive/web-weekly-189/#soon-on-the-baseline---sizes%3Dauto">last week's <code>sizes=auto</code> update</a>. I'm still super excited about it and Eric reminds us that you need to define <code>width</code> and <code>height</code> attributes. You probably do that anyways, but I thought it'd be good to share that with you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://ericportis.com/posts/2023/auto-sizes-pretty-much-requires-width-and-height/&quot;&gt;Help the layout&lt;/a&gt;</p>
<h2>Smart: using fallback values to work around layer clashes</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/4O5nROG93p99lan5yinhmj/2df0d3b1b6b3edc9cd30af1bbd74cd36/Screenshot_2026-04-17_at_08.37.20.png" alt="@layer utility {   .font-brand {     letter-spacing: var(--letter-spacing, 20%);   } }"></p>
<p>David uses cascade layers and has run into a problem. The style requirements were colliding with the defined layer order. He used a smart trick to work around clashing layers.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://dbushell.com/2026/04/15/containment-breach-in-cascade-layer/&quot;&gt;Keep things flexible&lt;/a&gt;</p>
<p><em>Side note: David also shared that <code>!important</code> works across layer boundaries. Can someone explain that to me?</em></p>
<h2>The wonderful weird web – Train Jazz</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5ho1nWKqzrGEw09xnRWZTg/15edb8b5ee1befa5aa01ff27cb13a02c/Screenshot_2026-04-18_at_09.11.40.png" alt="A train map of NYC showing the differing train lines."></p>
<p>Unfortunately, the Train Jazz doesn't work for Berlin (does it work for your city?). The site plays jazz music depending on a city's train/subway data. Is this very useful? Probably not, but I love everything about this! ❤️</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.trainjazz.com/&quot;&gt;Listen to some trains&lt;/a&gt;</p>
<h2>A nifty flexbox trick</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7AjTjitF0X2RSFWuHLtKrj/c773519f442d5f19dec7850e151e1652/Screenshot_2026-04-19_at_21.48.59.png" alt="main {   /* main gets priority + readable minimum */   flex: calc(infinity) 1 360px; }"></p>
<p>Granted, the title of this blog post is a bit misleading (container queries using break points still use... breakpoints), but I enjoyed this little flexbox snippet! 👆</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://frontendmasters.com/blog/building-a-ui-without-breakpoints/&quot;&gt;Flex!&lt;/a&gt;</p>
<h2>Squashing and stretching animations</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1Pqw1Wa2viHomidRpTJWz6/f4ead461f2a66f3894da52b218cca15b/Screenshot_2026-04-19_at_13.44.12.png" alt="    .btn:hover .shaft,     .btn:focus-visible .shaft {       d: path(&quot;        M 5,12        h 17      &quot;);     }"></p>
<p>Josh published a new post, and we all know what this means. There's a new high-quality post available including lots of demos and eye candy. I must admit I've forgotten about the ability to overwrite the SVG <code>d</code> attribute in CSS and am still on the fence about whether that's a good idea. 😅</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.joshwcomeau.com/animation/squash-and-stretch/&quot;&gt;Apply animation principles&lt;/a&gt;</p>
<h2>Make interfaces feel better</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/7ECEPTKhXHB3cVUpDhMGkE/712a2113d34f721d65f387dcf8afe95b/guides.gif" alt="Component showing how calculated nested border radii look better."></p>
<p>Granted, everything in this post is also packaged up as an AI skill, but the advice on building good-looking UIs is solid. I wasn't aware of this little <code>outline</code> trick at the end.</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://jakub.kr/writing/details-that-make-interfaces-feel-better&quot;&gt;Polish your interfaces&lt;/a&gt;</p>
<h2>Why do some images look brighter than the rest?</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/1pP52pbC7o4T53PworE01v/c46db8b18930a55af4759d57dc9bde38/Screenshot_2026-04-18_at_08.25.52.png" alt="Three images of a cat. HDR and Ultra HDR look much brighter than normal."></p>
<p>Tom came out of nowhere and finally explained to me why some images on my Mac are glaring on my screen. There are chances you haven't seen what I'm talking about, but for me on my MacBook Pro using the Signal App (it must be Electron-based), sometimes I receive a photo and it almost feels like the rest of the screen is getting darker because the image is so bright. Turns out, some hardware/software combinations simply display HDR images. Wow!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://tn1ck.com/blog/abuse-hdr-images-for-marketing&quot;&gt;Understand images&lt;/a&gt;</p>
<h2>Random MDN – <code>transition-behavior</code></h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6p5oIRrDOHTcQnyAZKUjZb/fe3320aad6aac7255ab886cf1d1cd992/Screenshot_2026-04-19_at_13.47.08.png" alt=".card {   transition-property: opacity, display;   transition-duration: 0.25s;   transition-behavior: allow-discrete; }"></p>
<p>From the unlimited MDN knowledge archive...</p>
<p>Everybody was talking about <code>transition-behavior</code> a year ago. Do you use it? The CSS property allows you to finally combine property transitions including <code>display</code>. And the best thing, it's been on the baseline since 2024!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/transition-behavior&quot;&gt;Change the behavior&lt;/a&gt;</p>
<h2>TIL recap – <code>field-sizing</code> doesn't only work for <code>textarea</code>s</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/5snz6kvGnq4ARrDw52q038/9b4110573dff01245f4c7d3275927f38/field-sizing.gif" alt="An input, a select and a textarea all resizing depending on their content."></p>
<p><code>field-sizing</code> enables textareas to automatically grow. And that's great, but do you know that it works for &quot;normal&quot; inputs and <code>select</code> boxes, too?</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://www.stefanjudis.com/today-i-learned/field-sizing-is-about-more-than-textareas/&quot;&gt;Resize your elements&lt;/a&gt;</p>
<p>::: highlight info
Find more short web development learnings in <a href="https://www.stefanjudis.com/today-i-learned/">my &quot;Today I learned&quot; section</a>.
:::</p>
<h2>New on the baseline</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/6HTDVNdRdV6aQQnKjjyIJG/2220d17e2b97913d90ad1df1654631cc/Screenshot_2026-04-19_at_22.24.24.png" alt=".box {   background-image: image-set(     url(&quot;https://.../small-image.jpg&quot;)       1x,     url(&quot;https://.../bigger-image.jpg&quot;)       2x   ); }"></p>
<p>After including baseline updates for quite a while here, I realized I'm riding pretty much on the cutting edge. And many folks are also interested in the baseline &quot;widely available&quot; updates. So here we go!</p>
<p>Do you know that you can use <code>image-set</code> to serve different background images right in CSS? Now you do and <code>image-set</code> is &quot;widely available&quot; since last month! 🎉</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/image/image-set&quot;&gt;Be responsive&lt;/a&gt;</p>
<p>And I'm sorry but I can't help it and I know you're also waiting for some cutting-edge stuff: <a href="https://www.firefox.com/en-US/firefox/151.0a1/releasenotes/#note-791582">the team over at Mozilla added container style queries support to Firefox Nightly</a>, which means it's slowly time to start looking into them. Bam!</p>
<h2>Three valuable projects to have a look at</h2>
<ul>
<li><a href="https://github.com/thoughtfulllc/gridland">thoughtfulllc/gridland</a> – Terminal apps that run anywhere - even the browser!</li>
<li><a href="https://github.com/getelena/elena">getelena/elena</a> – A simple, tiny library for building Progressive Web Components.</li>
<li><a href="https://github.com/meodai/heerich">meodai/heerich</a> – An engine for 3D voxel scenes rendered to SVG. 👈 That one's very fancy!</li>
</ul>
<h2>A new Tiny Helper</h2>
<p><img src="https://images.ctfassets.net/f20lfrunubsq/24JlBFKh07nLB3va5JfQwA/462a1dd92fd8eb28bd68dbf71afcbbfe/Screenshot_2026-04-19_at_21.58.13.png" alt="Two vector graphics of Chris Coyier."></p>
<p>Now, I'm not sure if it's a good idea to have <a href="https://codepen.io/t_afif/full/qEaLagJ">complex vector graphics like the above</a> in CSS, but hey. <a href="https://css-tip.com/svg-converter/">Temani updated his SVG to CSS tool</a> and it now supports multiple path elements. So if you ever wanted to transform SVGs into <code>clip-path</code> (or the new <code>border-shape</code>) properties, this tool is for you!</p>
<p>&lt;a class=&quot;btn btn__small&quot; href=&quot;https://css-generators.com/svg-to-css/&quot;&gt;Clip all the paths&lt;/a&gt;</p>
<p>::: highlight info
Find more single-purpose online tools on <a href="https://tiny-helpers.dev/">tiny-helpers.dev</a>.
:::</p>
<h2>Thought of the week</h2>
<p><a href="https://ezhik.jp/ai-slop-terrifies-me/">Ezhik's post</a> really hit a nerve with me. The world is changing. Heck, our entire industry and profession might be completely turned on its head. I'm beyond scared. What puzzles me the most is that quality might become less important.</p>
<p>Many builders, designers, and [insert whatever digital profession you like] slowly lose the desire to create high-quality &quot;things&quot;. Many are totally fine with generating something quickly. Done is better than perfect, right? And this approach might be alright. For many teams and companies it's always been like that. In the end, everybody can build whatever they like. It is how it is.</p>
<p>However, what scares me is the other side. And of course, that's not true for everybody, but does the majority out there care about a stellar product that took months to build? Do people care about a well-researched article? Does it matter if someone actually put in the work?</p>
<p>I know this is a downer to close this Web Weekly, but I'm honestly not sure anymore.</p>
<p>::: highlight quote</p>
<blockquote>
<p>I'm terrified of the good enough to ship — and I'm terrified of nobody else caring.
:::</p>
</blockquote>
<h2>Did you learn something from this issue?</h2>
<p>❤️ If so, <strong>join 40 other Web Weekly supporters</strong> and give back with a small monthly donation on <a href="https://www.patreon.com/stefanjudis">Patreon</a> or <a href="https://github.com/sponsors/stefanjudis/">GitHub Sponsors</a>.</p>
<h2>This is all, friends!</h2>
<p>Loved this email? Hated this email? I want to hear about it!</p>
<p>If you think something needs improvement or something sparked some joy, <a href="mailto:stefan@webweekly.email">reply to this email because I want to know more</a>!</p>
<hr>
<p>And with that, take care of yourself - mentally, physically, and emotionally.</p>
<p>I'll see you next week! 👋</p>
]]></content:encoded>
    </item>
  </channel>
</rss>