CSS and design systems people - BlogFlock2026-08-11T04:25:44.909ZBlogFlockMichelle Barker, Adam Argyle, Hidde de Vries, Sara Joy, Sara Soueidan, Robin Rendle, Robin Rendle, Stephanie Eckles2026 Open Agentic Tools - Adam Argylehttps://nerdy.dev/2026-open-agentic-tools?utm_source=rss2026-08-10T16:52:03.000Z<p>Some "open" agentic tools:</p>
<ul>
<li><a href="https://openchamber.dev">Open Chamber</a></li>
<li><a href="https://openagents.com">Open Agents</a></li>
<li><a href="https://open-design.ai">Open Design</a></li>
<li><a href="https://open-design.ai/html-video/">Open Design HTML Video</a></li>
</ul>
<p>Wonder if they use <a href="https://open-props.style/">Open Props</a> š</p>Scroll Axis Lock - Adam Argylehttps://nerdy.dev/css-scroll-axis-lock?utm_source=rss2026-08-10T16:04:51.000Z<img style="display: none" src="https://nerdy.dev/media/scroll-axis-lock-hero.jpg" alt="Diagram comparing locked vs unlocked scroll gesture paths" height="781" width="1400" />
<p>I first noticed web scroll areas had scroll locking behavior when making 2D scroll snap demos; I couldn't scroll diagonally without getting hijacked and locked into an <code>x</code> or <code>y</code> axis.</p>
<p>Even on a touch device, where a diagonal gesture is so easy and natural. </p>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/GRxMPGb?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/GRxMPGb"> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<p>Thanks to <a href="https://www.bram.us/2026/08/09/unlock-immediate-diagonal-scrolling-with-css-scroll-axis-lock-none/">Bramus's rad interactive blog post</a> I saw <strong>Chrome 153</strong> with the remedy:</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.scroller</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> overflow</span><span style="color:#ff1493">:</span><span style="color:inherit"> auto</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:inherit"> overscroll-behavior</span><span style="color:#ff1493">:</span><span style="color:inherit"> contain</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:inherit"> scroll-axis-lock</span><span style="color:#ff1493">:</span><span style="color:inherit"> none</span><span style="color:#030507">; š</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p><a href="https://drafts.csswg.org/css-overflow-5/#scroll-axis-locking">spec</a> | <a href="https://codepen.io/bramus/pen/vEgbwgr">check for support</a></p>
<p><strong>Freedom from the axis lock</strong> š¤š»</p>
<h2 id="use-cases">
Use cases
<a name="use-cases" href="#use-cases">#</a>
</h2>
<p>I was thinking: </p>
<ol>
<li>swipe to dismiss interactions</li>
<li>flings</li>
<li>maps or infinite canvas navigating</li>
<li>datagrids or tables</li>
<li>image zoom scrolling around</li>
<li>360 pano images or 3D model panning</li>
<li>data vis exploration</li>
</ol>
<p>Just seems worth while to use the natural inertia, tensions, perf and feels that scroll snap has for the snap feedback of "didnt swipe far enough" and the browser owned easing.</p>
<p>Can also mitigate <code>scrollTo</code> strangeness that might do <code>x</code> then <code>y</code>. </p>
<h2 id="i-did-log-a-bug">
I did log a bug
<a name="i-did-log-a-bug" href="#i-did-log-a-bug">#</a>
</h2>
<p>I saw some performance regressions in the first 2 demo's I pulled up to test with</p>
<ol>
<li><a href="https://codepen.io/argyleink/pen/oNLaBdv">swipe prototype</a></li>
<li><a href="https://codepen.io/argyleink/pen/GRxMPGb">snap matrix</a></li>
</ol>
<p><a href="https://issues.chromium.org/u/1/issues/544635549">Filed a bug</a>. </p>
<p>I wouldn't necessarily file this as perfectly fixed, I still felt it was a bit clumsy or not enabling diagonal scrolling as smoothly as I'd like. </p>
<p><strong>Overall exciting and meaningful IMO tho.</strong> </p>
<p>Your thoughts?</p>Ranting Devigner - Adam Argylehttps://nerdy.dev/ranting-devigner?utm_source=rss2026-08-08T05:46:10.000Z<img style="display: none" src="https://nerdy.dev/media/argyleink_blogspot.jpg" alt="A wheat paste wall and art post wall used in the background of the ranting devigner blog. This wall is from Pike Place Market in Seattle, WA, famously next to the Bubble Gum Wall. This wall was also used for a Flash website portfolio I built back then too." height="1200" width="1600" />
<p>My <a href="https://blogspot.com">Blogspot</a> in 2011: <a href="http://rantingdevigner.blogspot.com/">Ranting Devigner</a></p>
<ul>
<li>see what <a href="http://rantingdevigner.blogspot.com/2011/03/3-environmental-design-links.html">tech articles</a> I was reading <sup>lol</sup></li>
<li>dev and <a href="http://rantingdevigner.blogspot.com/2011/02/week-6-reading.html">design rants</a> I was making <sup>also lol</sup></li>
</ul>
<p><code>Devigner = Designer + Developer</code><br>
<small>Before "<b>Design Engineer</b>" was coo</small></p>Kevin Powell Trying Out Prop For That - Adam Argylehttps://nerdy.dev/kevin-powell-trying-out-prop-for-that?utm_source=rss2026-08-05T15:11:07.000Z<img style="display: none" src="https://nerdy.dev/media/kevin-powell-prop-for-that.jpg" alt="some title" height="720" width="1280" />
<p><a href="https://www.youtube.com/kevinpowell">Kevin Powell</a> tries out <a href="https://prop-for-that.netlify.app">Prop For That</a>, makin it look so slick and easy š«¶</p>
<p><a href="https://www.youtube.com/watch?v=fG6ToJJ9x_Y">Watch on YouTube</a></p>Max Value Of A CSS Length Layout Unit - Adam Argylehttps://nerdy.dev/max-value-of-a-css-length-layout-unit?utm_source=rss2026-08-05T14:53:20.000Z<p><code>33554432px</code></p>
<p>the <a href="https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/platform/geometry/layout_unit.h;l=66;drc=23f5271fa18d22362f3c739c631ef83ac709a1c1">maximum value for a CSS length</a> in a layout context. #randomCSSfacts</p>
<p><cite><a href="https://front-end.social/@bramus/117043307620167329">Bramus on Masto</a></cite></p>WWW Ep250 With Christina Martinez - Adam Argylehttps://nerdy.dev/www-ep250-with-christina-martinez?utm_source=rss2026-08-03T20:55:45.000Z<img style="display: none" src="https://nerdy.dev/media/www-ep250.jpg" alt="Whiskey web and whatnot episode 250" height="2000" width="2000" />
<p><span class="Tag">Ep #250</span><br>
<strong>Live at React Miami with Christina Martinez</strong></p>
<p><a href="https://robbiethewagner.dev">Robbie</a>, <a href="https://github.com/christina-de-martinez">Christina</a> and I chat fun coding experiments, personifying agents, OpenClaw, hot takes and a little bit of whatnot.</p>
<p>⤷ <a href="https://whiskey.fm/silly-software-sugar-snap-peas-and-coding-in-gen-z-slang-w-christina-martinez">whiskey.fm</a> · <a href="https://www.youtube.com/watch?v=UfUFYnY4u2Y">youtube</a> · <a href="https://open.spotify.com/episode/65Lv5YYJVMiCxYmCrq0Xxv">spotify</a> · <a href="https://podcasts.apple.com/us/podcast/silly-software-sugar-snap-peas-and-coding-in-gen-z/id1552776603?i=1000779321860">apple</a></p>Reading matters deeply - Robin Rendlehttps://robinrendle.com/notes/reading-matters-deeply/2026-08-02T22:23:40.000Z<p><a href="https://aworkinglibrary.com/writing/reading-matters-deeply">Mandy Brown</a>:</p>
<blockquote>
<p>...reading isnāt about reaching empathic dead ends, or recruiting platitudes about how we must understand each other [...] To reduce reading to the practice of empathy is to divorce it of its real power and pleasure: to enjoy the fruits of another personās creative effort, to think with the writer and their characters, not becoming them, <em>but becoming more fully yourself</em>.</p>
</blockquote>Show me the work - Robin Rendlehttps://robinrendle.com/notes/show-me-the-work/2026-08-01T18:05:07.000Z<p>Whenever someone tries to impress me with a job title I feel sorry for them. Like when a child tries to impress me by explaining that āWolverine is cool.ā Look, kid: I basically invented Wolverine. Iāve been thinking about Wolverine since before you were born. Wolverine and me are best buds how dare you come to me with these childish facts. Have you seen my t-shirt? My Wolverine-themed chain wallet? My sick yellow socks? I know everything about Logan ā see, weāre on a first name basis here ā and he calls me all the time to ask how Iām doing. He was the best man at my wedding. So do I know that Wolverine is cool? Go back to school and get yourself an education.</p>
<p><em>Ahem.</em> Anyway, like I said, Iāve always felt pity for folks with ridiculous job titles but I hadnāt really been able to put this feeling into words until I heard AOC answer a question about running for president in 2028:</p>
<blockquote>
<p>Whatās funny about that, they assume that my ambition is positional. They assume that my ambition is a title or a seat, and my ambition is way bigger than that. My ambition is to change this country.</p>
<p>Presidents come and go, senate house seats, elected officials...all come and go. But single payer healthcare is forever.</p>
</blockquote>
<p>I canāt put into words how much I admire this. Although sure, a title might be nice. It might communicate what level you are, or help barter for more money and power. It might get you a better job. But Iād argue that those are the jobs you donāt want. Constantly vying for attention and glory is the best way for the work to suck.</p>
<p>Most fields have figured this out: even the biggest bozo in the world is unlikely to introduce themselves as a Senior Staff Principal Novelist, or a Lead Poet, or an AI-Native Movie Director. But in the software design field thereās a total lack of shame. Someone will shake your hand with the most pathetic, lick-spittle job title in a vain attempt to impress or intimidate, to place themselves above you in a deeply lame, invisible hierarchy.</p>
<p>So letās get serious here: Wolverine does not introduce himself as an AI-Native Senior Principal X-Boy.</p>
<p>Heās just fucking <em>Wolverine</em>, my dude.</p>CSS Infinity Use Cases - Adam Argylehttps://nerdy.dev/css-infinity-use-cases?utm_source=rss2026-07-25T19:57:08.000Z<img style="display: none" src="https://nerdy.dev/media/css-infinity-and-beyond.jpg" alt="Buzz light year showing flying with a title showing css infinity and beyond" height="550" width="1500" />
<script type="module">
import "https://cdn.jsdelivr.net/npm/baseline-status";
</script>
<p>CSS <code>infinity</code> (and <code>-infinity</code>!) solve some pretty specific problems elegantly, but can also just be plain fun to use.</p>
<p><baseline-status featureId="calc-constants"></baseline-status></p>
<p><small>Showing support for <code>infinity</code>, <code>-infinity</code>, <code>NaN</code>, <code>pi</code>, and <code>e</code></small></p>
<p>Lets spur creative CSS juices with <code>infinity</code> and follow a couple use cases.</p>
<h2>
Basics and gotchas
<a name="basics-and-gotchas" href="#basics-and-gotchas">#</a>
</h2>
<p><code>infinity</code> and <code>-infinity</code> need to always be wrapped in <code>calc()</code>.</p>
<p> If you want it to represent a dimension, it also needs to be multiplied by a unit like:</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">div</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> border-radius</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:inherit"> z-index</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>Not quite limited to <code>calc()</code> too, you can use it with other <code>calc()</code>-like scenarios like <code>clamp()</code>, <code>min()</code>, <code>max()</code>, etc, which we'll dig into a bit š¤š»</p>
<h2>
1. Circles and Pills
<a name="1.-circles-and-pills" href="#1.-circles-and-pills">#</a>
</h2>
<p>Before <code>infinity</code>, I would have used scientific notation like <code>1e9px</code> (which is <code>1000000000px</code>) to create a "big enough" radius for circles and pills at any size. </p>
<p>But with <code>infinity</code>..!?</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.radius-full</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> border-radius</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<div class="radius-full-example">
<style>
.radius-full-example {
width: 100px;
aspect-ratio: 1;
background: var(--surface-1);
box-shadow: var(--shadow-2);
border-radius: calc(infinity * 1px);
}
</style>
</div>
<div class="pill-example">
<style>
.pill-example {
width: 100px;
aspect-ratio: 3/1;
background: var(--surface-1);
box-shadow: var(--shadow-2);
border-radius: calc(infinity * 1px);
}
</style>
</div>
<h2>
2. Perma-state
<a name="2.-perma-state" href="#2.-perma-state">#</a>
</h2>
<p>Setting duration <code>calc(infinity * 1s)</code> makes an animation/transition so long that it appears to be frozen āļø</p>
<p>Hover over those boxes and the duration will be pinned to happen over infinity seconds, sticking the state for the duration of the page's life.</p>
<div class="perma-state-example">
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<style>
.perma-state-example {
--size: min(3vi, 3ch);
display: grid;
grid: var(--size) var(--size) var(--size) / auto-flow var(--size);
gap: 5px;
> div {
border: 2px solid var(--surface-1);
transition: background calc(infinity * 1s) ease;
&:hover {
background: var(--surface-1);
transition-duration: .2s;
}
}
}
</style>
<p>I like how the duration of your hover is permanently made visible too. Visible millisecond duration via background color.</p>
<h2>
3. z-index
<a name="3.-z-index" href="#3.-z-index">#</a>
</h2>
<p>Need to beat <code>z-index: 999999999</code> or something? </p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.tippy-top-of-stacking-context</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> z-index</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity)</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>This will max out at the largest int a browser allows: <code>2147483647</code>. Speaking of that number, you can see it by using counters like this:</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.css-max-int</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> counter-reset</span><span style="color:#ff1493">:</span><span style="color:inherit"> cssInt </span><span style="color:#4263eb">calc</span><span style="color:inherit">(infinity)</span><span style="color:#030507">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#030507"> &</span><span style="color:#ff1493">:</span><span style="color:inherit">:after {</span></span>
<span class="line"><span style="color:inherit"> content: </span><span style="color:#4263eb">counter</span><span style="color:inherit">(cssInt)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507"> }</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<style>
.css-max-int {
counter-reset: cssInt calc(infinity);
&::after {
font-weight: bold;
content: " " counter(cssInt);
}
}
</style>
<p class="css-max-int">See!</p>
<h2>
4. To infinity and beyond
<a name="4.-to-infinity-and-beyond" href="#4.-to-infinity-and-beyond">#</a>
</h2>
<p>Use <code>calc(infinity * 1px)</code> to remove the floor or ceiling of a clamp.</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">div</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> inline-size</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> clamp</span><span style="color:inherit">(</span></span>
<span class="line"><span style="color:#4263eb"> calc</span><span style="color:inherit">(-infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">)</span><span style="color:#be4bdb">,</span><span style="color:#868e96"> /* no floor */</span></span>
<span class="line"><span style="color:inherit"> 100</span><span style="color:#ff1493">%</span><span style="color:#be4bdb">,</span><span style="color:inherit"> </span></span>
<span class="line"><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">) </span><span style="color:#868e96">/* no ceiling */</span></span>
<span class="line"><span style="color:inherit"> )</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<h2>
5. Freeze view transitions
<a name="5.-freeze-view-transitions" href="#5.-freeze-view-transitions">#</a>
</h2>
<p>Make view transitions never complete. </p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#030507">::view-transition-group(</span><span style="color:#4263eb">*</span><span style="color:#030507">),</span></span>
<span class="line"><span style="color:#030507">::view-transition-old(</span><span style="color:#4263eb">*</span><span style="color:#030507">),</span></span>
<span class="line"><span style="color:#030507">::view-transition-new(</span><span style="color:#4263eb">*</span><span style="color:#030507">) {</span></span>
<span class="line"><span style="color:inherit"> animation-duration</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">s</span><span style="color:inherit">)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>The <code>::view-transition</code> tree stays in the devtools DOM, giving you an opportunity to inspect or tweak.</p>
<h2>
6. Bools
<a name="6.-bools" href="#6.-bools">#</a>
</h2>
<p>Clamp an arbitrary number down to exactly 0 or 1, then use it:</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.flippy</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:#030507"> --active</span><span style="color:#ff1493">:</span><span style="color:inherit"> 0</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507"> --on</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> clamp</span><span style="color:inherit">(0</span><span style="color:#be4bdb">,</span><span style="color:#4263eb"> var</span><span style="color:inherit">(--active) * infinity</span><span style="color:#be4bdb">,</span><span style="color:inherit"> 1)</span><span style="color:#030507">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:inherit"> background</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> hsl</span><span style="color:inherit">(200 80</span><span style="color:#ff1493">%</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(50</span><span style="color:#ff1493">%</span><span style="color:#ff1493"> -</span><span style="color:#4263eb"> var</span><span style="color:inherit">(--on) </span><span style="color:#ff1493">*</span><span style="color:inherit"> 20</span><span style="color:#ff1493">%</span><span style="color:inherit">))</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:inherit"> translate</span><span style="color:#ff1493">:</span><span style="color:inherit"> 0 </span><span style="color:#4263eb">calc</span><span style="color:inherit">(</span><span style="color:#4263eb">var</span><span style="color:inherit">(--on) </span><span style="color:#ff1493">*</span><span style="color:inherit"> -10</span><span style="color:#ff1493">px</span><span style="color:inherit">)</span><span style="color:#030507">;</span></span>
<span class="line"></span>
<span class="line"><span style="color:#030507"> &</span><span style="color:#ff1493">:</span><span style="color:inherit">active {</span></span>
<span class="line"><span style="color:inherit"> --active: 1</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507"> }</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>One variable now can drive color, offset, opacity, gaps, whatever. </p>
<p>Flip with classes, media queries, etc, anything that can toggle a variable can become the moment a different style choice is made.</p>
<h2>
7. Backdrop
<a name="7.-backdrop" href="#7.-backdrop">#</a>
</h2>
<p>You can use the spread feature of <code>box-shadow</code> to create a <strong>non-interactive</strong> backdrop:</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.backdrop</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> box-shadow</span><span style="color:#ff1493">:</span><span style="color:inherit"> 0 0 0 </span><span style="color:#4263eb">calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">) #0005</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>Paint past the "entire viewport".</p>
<h2>
8. Scroll Trigger
<a name="8.-scroll-trigger" href="#8.-scroll-trigger">#</a>
</h2>
<p>Trigger a scroll driven transition in, and never transition out.</p>
<pre class="shiki css-variables" style="background-color:#f8f9fa;padding:1em;border-radius:.5em;overflow:auto;color:#030507" tabindex="0"><code><span class="line"><span style="color:#4263eb">.nav-title</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> timeline-trigger-activation-range-end</span><span style="color:#ff1493">:</span><span style="color:#4263eb"> calc</span><span style="color:inherit">(infinity </span><span style="color:#ff1493">*</span><span style="color:inherit"> 1</span><span style="color:#ff1493">px</span><span style="color:inherit">)</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span>
<span class="line"></span>
<span class="line"><span style="color:#4263eb">.product-title</span><span style="color:#030507"> {</span></span>
<span class="line"><span style="color:inherit"> animation</span><span style="color:#ff1493">:</span><span style="color:inherit"> slide-and-fade 150</span><span style="color:#ff1493">ms</span><span style="color:inherit"> ease both</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:inherit"> animation-trigger</span><span style="color:#ff1493">:</span><span style="color:inherit"> play-forwards play-backwards</span><span style="color:#030507">;</span></span>
<span class="line"><span style="color:#030507">}</span></span></code></pre>
<p>Though you'll see in the demo I use <code>scroll 100%</code> which is a specced way that feels closer to the intent I was going for, in that I wanted the range end to be the end of the scroll area.</p>
<p>Try it:</p>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/BypVjyj?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/BypVjyj"> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<p>Also, just for funsies to share, here's the scroll driven version of the same navbar effect. Doesn't use infinity, but fun to try and compare scroll-triggered vs scroll-driven animation.</p>
<p>
<iframe
class="codepen-embed"
scrolling="no"
title="null"
src="https://codepen.io/argyleink/embed/preview/zxNaGVK?default-tab=result&editable=true&theme-id=43079"
frameborder="no"
loading="lazy"
allowtransparency="true"
allowfullscreen="true"
>
See the Pen <a href="https://codepen.io/argyleink/embed/preview/zxNaGVK"> by Adam Argyle (<a href="https://codepen.io/argyleink">@argyleink</a>)
on <a href="https://codepen.io">CodePen</a>.
</iframe>
</p>
<h2>
Thats all
<a name="thats-all" href="#thats-all">#</a>
</h2>
<p>Hope you found that interesting! </p>
<p>Comment with your own creative uses of <code>infinity</code>?</p>WWW Ep249 With Joel Hooks - Adam Argylehttps://nerdy.dev/www-ep249-with-joel-hooks?utm_source=rss2026-07-23T19:57:08.000Z<img style="display: none" src="https://nerdy.dev/media/www-ep249.jpg" alt="Whiskey web and whatnot episode 247" height="2000" width="2000" />
<p><span class="Tag">Ep #249</span><br>
<strong>Live at React Miami with Joel Hooks</strong></p>
<p><a href="https://robbiethewagner.dev">Robbie</a>, <a href="https://joelhooks.com/">Joel</a> and I chat about <a href="https://pi.dev/">Pi</a>, OpenClaw, <a href="https://joelclaw.com/">JoelClaw</a>, YOLO mode, AGI, custom harnesses and a little bit of whatnot.</p>
<p>⤷ <a href="https://whiskey.fm/pi-extensions-yolo-mode-and-building-your-own-personal-claw-w-joel-hooks">whiskey.fm</a> · <a href="https://www.youtube.com/watch?v=WvqcvfGqVPY">youtube</a> · <a href="https://open.spotify.com/episode/0tdY7j7RprBQx2yCCDbllk">spotify</a> · <a href="https://podcasts.apple.com/us/podcast/pi-extensions-yolo-mode-and-building-your-own/id1552776603?i=1000777993502">apple</a></p>100 Ways To Center A Div - Adam Argylehttps://nerdy.dev/100-ways-to-center-a-div?utm_source=rss2026-07-21T02:46:06.000Z<p><a href="https://css-generators.com/center">100 ways to center a div</a><br>
<cite>by <a href="https://github.com/Afif13/">Temani Afif</a></cite></p>Sinistral Hands - Robin Rendlehttps://robinrendle.com/notes/sinistral-hands/2026-07-19T18:51:19.000Z<p>Thereās a line from Rutherford Crazeās <a href="https://mass-driver.com/article/from-human-hands">latest note</a> that hit me like a piano tumbling out of a six story building:</p>
<blockquote>
<p>When we ask Midjourney to draw an ox, it does not think of home. ChatGPT will never invent <a href="https://undercase.xyz/custom/a-guide-to-sinistral-hand">a new calligraphy technique</a>, because it has no wrists to feel uncomfortable.</p>
</blockquote>
<p>That link points to Phaedra Charlesās <a href="https://undercase.xyz/">Undercase Type</a> and a beautiful thing she printed called <a href="https://undercase.xyz/custom/a-guide-to-sinistral-hand">A Guide to Sinistral Hand</a>. Itās a small booklet, half type specimen and half essay, that reimagines type design and lettering from the view of left-handed folks:</p>
<blockquote>
<p>Left-handed writers have a notoriously difficult time with handwriting, and for good reason: like a pair of scissors, the alphabet is designed for right-handed use.</p>
<p>[...] If part of the beauty of handwriting lies in its ability to express the habits, experiences, and perspectives of the individual, why are left-handed people expected to hide their handedness by mimicking right-handed models?</p>
</blockquote>
<p>Sadly it isnāt in print but <a href="https://undercase.xyz/media/pages/custom/a-guide-to-sinistral-hand/2af7767931-1658855020/sinistralguide_072622.pdf">the PDF is still available</a>āand beware! As I was reading this thing it felt like not one but several pianos were descending on me from above, like this Steinway-shaped fact:</p>
<blockquote>
<p>In Hebrew, the direction of reading does not follow the direction of writing, meaning the letters do not point to the following letter. We will call this counter-momentum writing.</p>
</blockquote>
<p>Counter-momentum! Wonderful. We will certainly call it that. But what makes Phaedraās argument even more compelling is that the text is printed in a typeface that follows these principles, moving in counter-momentum, and I think it looks lovely and cool and <em>new</em>. Despite the booklet being printed way back in 2018.</p>
<p>Anyway, itās extraordinarily rare for a typeface to open a door in my mind, to push back against how I see the world, for me not to categorize it in an already existing room in my head and firmly seal the door behind it. But Phaedraās work here is exciting and fresh and reminds me that new things are still possible! New letters, new ideas, are <s>right</s> left out there in the open.</p>
<p>Oh and Undercase Typeās <a href="https://undercase.xyz/fonts/mollydooker">Mollydooker</a> takes this idea a bit further as a left-handed brush script, reminding me somewhat of <a href="https://fontsinuse.com/tags/2044/left-leaning-italics-backslanted">left-leaning italics</a>. But the rest of Phaedraās work is equally compelling, too: just take a look at <a href="https://undercase.xyz/fonts/ritme">Ritme</a> or <a href="https://undercase.xyz/fonts/mausoleum">Mausoleum</a>, I dare you, and try not to be impressed.</p>EP-1320 Medieval - Robin Rendlehttps://robinrendle.com/notes/ep1320-medieval/2026-07-12T17:09:47.000Z<p>Last week I picked up the <a href="https://teenage.engineering/products/ep-1320">EP-1320 Medieval</a> and Iāve been tinkering with it all weekend. Besides itās buck-wild look, it comes with a bunch of expertly recorded medieval samples: flutes, bowed harps, gitterns, reeds, trumpets, bells, battle toms, rowdy peasants, and coconut horse hooves. This makes it sound like a joke, a musical toy that immediately finds itself in the back of your closet, but what I love about this musical machine is how <em>seriously</em> it takes itself. Yes, this is a medieval sampler! Get with the times!</p>
<p>The EP-1320 reminds me of programming, or the first time I learned how to <code>cd</code>, <code>ls</code>, <code>open .</code> in the command line. You learn a few helpful words of this scary, foreign language and over time it opens up a world of possibilities. And, in time, a new way of thinking reveals itself.</p>
<p>(You program the machine, and the machine programs <em>you</em>.)</p>
<p>So the EP-1320 is not simple. You either learn itās way of doing things or go to hell. Like computers from before my time, this thing is modes-galore. Much to the horror of <a href="https://interactions.acm.org/archive/view/july-august-2012/a-personal-history-of-modeless-text-editing-and-cut-copy-paste">Larry Tesler</a>, youāre almost always in a mode and switching between them all the time: <em>sonus, manus, tempus, codex, claves, pocus</em> (to make matters worse/better, every command and mode is labelled in Latin). There are songs, patterns, groups, and scenes: you must think in a very specific way about music to use the EP-1320. You have to read <a href="https://teenage.engineering/guides/ep-1320">the guide</a>. Study <a href="https://teenage.engineering/guides/ep-1320/screen#3.1-icon-map">the icons</a>. Program <a href="https://teenage.engineering/apps/ep-sample-tool">the samples</a>.</p>
<p>And so, like programming, the EP-1320ās <em>inflexibility</em>, itās almost complete and absolute stubbornness, is what makes it so charming.</p>
<p>Plus, ya know, the coconut horse hooves.</p>AI and greener choices - Hidde's bloghttps://hidde.blog/ai-greener-choices/2026-06-26T00:00:00.000Z<p>The earth is heating up and AI isn't helping. It drives major increases in electricity use, water use and CO2 emissions. Yet, industry and governments alike seem keen to leverage the latest tech. Can we make greener choices?</p>
<p>Yesterday, I spoke at <a href="https://platformaioverheid.nl/event/save-the-date-congres-samen-versnellen-met-ai-de-overheid-van-morgen-begint-nu/">a conference on AI in government</a> about sustainable choices. The presentation and <a href="https://talks.hiddedevries.nl/UWcyII/groenere-keuzes-voor-je-ai-project">slides</a> were in Dutch, this post is a high level summary of what I covered.</p>
<p>As the presentation took place during a record-breaking heatwave, which meteorologists attribute to climate change, and there were some airconditioning-related issues, very little irony was lost on us.</p>
<h2>Words matter</h2>
<p>I started out talking about if AI is good or bad for sustainability and called it the wrong question. It's the wrong question, because both AI and sustainability are concepts that have many meanings.</p>
<p>AI can be understood in different ways:</p>
<ul>
<li>as a <strong>technology</strong>, there are many kinds; Microsoft alone has <a href="https://teybannerman.com/strategy/2026/03/31/how-many-microsoft-copilot-are-there.html">78 products named Copilot</a>, but also, there are many types of AI, like computer vision, natural language processing, generative AI and agentic architectures. Traditional vs generative can be a useful distinction in sustainability, because of the difference in energy impact.</li>
<li>as an <strong>economic phenomenon</strong> (<a href="https://isaiprofitable.com/">it isn't profitable yet</a>, so it may get more expensive or introduce ads, and there are lots of financial stakes that explain why it's sometimes forced on consumers)</li>
<li>as an <strong>infrastructure</strong> (behind the cloud metaphore, there are very real data centres that warrant closer inspection)</li>
</ul>
<p>Sustainability is multi-faceted too. In the <a href="https://www.w3.org/TR/web-sustainability-guidelines/">Web Sustainability Guidelines</a>, we center our definition around three pillars that ultimately need balance between them: Planet, People, and Profit:</p>
<ul>
<li><strong>Planet</strong>: its surface temperature rises due to emission of greenhouse gases that trap heat, and it has a finite amount of water of which only a small portion is suitable to drink.</li>
<li><strong>People</strong>: think of people, <a href="https://www.humanium.org/en/the-current-state-of-child-labour-in-cobalt-mines-in-the-democratic-republic-of-the-congo/">including children as young as 11 years old</a>, who are working in cobalt mines in Congo for the batteries that power our devices, or of people (and hospitals) who had no electricity during last year's Spain heatwave, while <a href="https://www.datacenterdynamics.com/en/analysis/how-did-iberian-operators-fair-in-the-great-power-cut/">data centres continued uninterruptedly</a>.</li>
<li><strong>Profit</strong>: within our capitalist system, the needs of planet and people need to be balanced with profit, in order for anyone to successfully make the case for change.</li>
</ul>
<p>So, there's some nuance about what the words mean, but despite that, it's worthwhile to try and reduce climate impact of our services. The <a href="https://vatican.va/content/leo-xiv/en/encyclicals/documents/20260515-magnifica-humanitas.html">pope said so</a>, and in government, it's an increasingly a priority (like in the UK, where the Digital Service expanded their design guidance last year with <a href="https://gov.uk/guidance/government-design-principles#minimise-environmental-impact">principle 11: Minimise environmental impact</a>) .</p>
<h2>It's ok not to use AI</h2>
<p>I shared five tips to make greener choices around AI, but couldn't help myself to add a bonus tip as tip zero: in many cases, <strong>not using AI</strong> for your project makes the most sense. Which is fine.</p>
<p>Many of us will have sat in meetings around a new idea or project, where someone put up their finger and said āoh, maybe we can use AI for thisā. The AI vendors primed us for this with <a href="https://hidde.blog/ai-hype">hype</a>.</p>
<p>Often, using AI, and especially generative AI, is like going to your local corner shop using a helicopter. What if you could solve the same problem with a couple of lines of Python, and Excel-sheet, people, or manually summarising?</p>
<p>I wanted to mention this specifically, because nobody wants to be the downer in the group and suggest not doing the thing that everyone is hyped about. But to be sustainable, we need to pick out just the cases where AI is absolutely necessary, and go without it for anything else.</p>
<h2>Five tips to make greener choices</h2>
<p>When using a specific type of AI actually solves your problem best, here's five tips to make greener choices.</p>
<h3>Smaller models</h3>
<p>When using generative AI, model size differs wildly. An example of a large model is DeepSeek v4 Pro, which has 1.6 trillion parameters (12 zeroes), while there are small models like Hugging Face's SmollLM that has 135 million parameters (6 zeroes).</p>
<p>A smaller model could save 30⨠emissions of CO2 (and equivalent greenhouse gases), explain Luccioni, Jernite, & Strubell in their paper ā<a href="https://arxiv.org/abs/2311.16863">Power Hungry Processing: Watts Driving the Cost of AI Deployment?</a>ā.</p>
<h3>More specific models</h3>
<p>A lot of generative AI uses so-called general purpose models, which are systems that know pretty much everything about the world. When hiring humans, we usually list a specific area of expertise. That's partially because there are no humans that know it all (just ones that think they do).</p>
<p>We should try to do the same with language models. If we're building a system that answers questions about taxes, we don't need to tell it what the capital of France is.</p>
<p>In ā<a href="https://arxiv.org/abs/2311.16863">Power Hungry Processing</a>ā, Luccioni, Jernite, & Strubell explains this: āmulti-purpose generative architectures are <strong>orders of magnitude more expensive</strong> than task-specific systems for a variety of tasks, even when controlling for the number of model parametersā (emphasis mine).</p>
<h3>Be smart about data centre usage</h3>
<p>In many applications of AI, the relevant software needs lots of computing: GPUs, CPUs, memory, and storage. This computing is often done in the ācloudā, or: data centres. The climate impact of data centres is widely seen as three components: <strong>electricity</strong>, <strong>CO2 emissions</strong> (and equivalent greenhouse gases), and <strong>water usage</strong>.</p>
<p>The International Energy Agency predicts the amount of data centres to <a href="https://www.iea.org/news/data-centre-electricity-use-surged-in-2025-even-with-tightening-bottlenecks-driving-a-scramble-for-solutions">double or triple over the next few years</a>. The electricity used for this will be green, partially. But it won't all be green : gas and coal will continue to be a share of what powers data centres.</p>
<p>On an operational level, we could reduce the load on data centres by reducing how many tokens we use, via smarter prompting (shorter, more specific, more explicit, less repetition through variables). The paper <a href="https://unesdoc.unesco.org/ark:/48223/pf0000394521.">Smarter, smaller, stronger</a> by Perez Ortiz and Drobnjak details tests that show reducing a response from 400 to 200 words reduced energy consumption by 54%.</p>
<p>On a policy level, one tip I learned at the <a href="https://hidde.blog/ai-sustainability-reporting/">AI reporting event I attended</a>, is to question how many 9's you really need. Data centres are convenient because they offer compute for rent and make it easy to scale. And they offer uptime, guaranteeing sometimes up to 99,99999 availability: five nines. More nines could mean less sustainability: some data centres will use diesel power or other unsustainable sources when they have a power cut. So to get to a higher uptime guarantee, they need to make such choices. What if we required less nines? What if we decided it's ok to have the AI thing not work for a couple of days a year?</p>
<h3>Recognise greenwashing</h3>
<p>Greenwashing is everywhere, and to make sustainable choices, we'll need to develop our skills to recognise it from afar. Sometimes it's easy to recognise, like an airline that said with them, you can āfly responsiblyā (a Dutch court <a href="https://hidde.blog/ai-greener-choices/uitspraken.rechtspraak.nl/details?id=ECLI:NL:RBAMS:2024:1512">said this is misleading</a>). <a href="https://eur-lex.europa.eu/eli/dir/2024/825/oj/eng">EU Directive 2024/825</a> effectively forbids greenwashing, but companies still tend to do it.</p>
<p>Examples from <a href="https://beyondfossilfuels.org/wp-content/uploads/2026/02/AI-for-climate-claims-Report_FEB-2026_FINAL-2-16.pdf">The AI Climate Hoax</a> include:</p>
<ul>
<li>ābait and switchā: often ātraditionalā AI has a much smaller footprint than generative AI; when companies point at how clean their traditional AI is while ignoring the effect of their generative AI, this is misleading</li>
<li>use of (own) research with little evidence</li>
<li>hidden emissions through clever bookkeeping (often leaving out Scope 3 or āembodiedā emissions)</li>
<li>empty promises, like pointing at technologies that don't exist yet</li>
<li>downplaying via selective shopping in data or data without context</li>
<li>fatalism: āwe'll reach those sustainability goals anyway, why bother tryingā</li>
</ul>
<h3>Measuring matters</h3>
<p>My last tip is around data collection. It's tricky to know how much energy data centres use, not the least because Big Tech <a href="https://techpolicy.press/how-big-tech-lobbied-the-eu-to-hide-data-centers-environmental-toll">successfully lobbied the EU to treat energy usage data as company secrets</a>.</p>
<p>When you do get data, it often does not include Scope 3 emissions, which are estimated to be <a href="https://blog.se.com/datacenter/2023/07/11/demystifying-data-center-scope-3-carbon-with-our-findings/">a very large part</a> (I've seen percentages from 30 to 89%, and I am not sure what's right, other than that it is large).</p>
<p>There can also be a major difference in reporting: some companies do location-based reporting, others market-based reporting. Location-based means that you get information about how much a specific data centre is actually using, whereas with market-based, factors outside are taken into account, including certificates for carbon.</p>
<p>Location-based data is the most helpful if your team is trying to make optimisations, because it allows them to see the numbers go down (or up),where they would appear constant with market-based reports.</p>
<p>Lastly, I mentioned grid intensity: because there are many different power sources, and they deliver different amounts of energy depending on the time and location, grid intensity vary. For instance, if it's sunny and windy today at noon, the grid intensity will be low because there is lots of green energy available. At other times there's less.</p>
<p>Your application can use this difference, that constantly changes, by moving your computing to the right place at the right time. This is also called ācarbon aware computingā and companies like Google <a href="https://blog.google/company-news/outreach-and-initiatives/sustainability/carbon-aware-computing-location">already do it</a>, to save emissions and costs at the same time.</p>
<h2>Summing up</h2>
<p>AI-related electricity usage, water use, and carbon emissions can be huge. That's a problem, but it's <em>also</em> an opportunity (cheesy but it's true). There is lots of low-hanging fruit that we can start addressing. As there's still so much to reduce, our efforts really can make a dent.</p>
<p>I really enjoyed giving this talk and hearing the audience comments afterwards. The main worry seems to be: how do I sell this within my organisation, and an answer emerged in the group: cost-savings and carbon-savings often go hand in hand.</p>
<hr/>
<p>Originally posted as <a href="https://hidde.blog/ai-greener-choices/">AI and greener choices</a> on <a href="https://hidde.blog">Hidde's blog</a>.</p>
<p><a href="mailto:hidde@hiddedevries.nl?subject=Reply%20to:%20AI and greener choices">Reply via email</a></p>WWW Ep248 Live At React Miami With Guests Jason Lengstorf And Kent C Dodds And Tanner Linsley And Francesco Cuilla - Adam Argylehttps://nerdy.dev/www-ep248-live-at-React-Miami-with-guests-Jason-Lengstorf-and-Kent-C-Dodds-and-Tanner-Linsley-and-Francesco-Cuilla?utm_source=rss2026-06-25T21:58:32.000Z<img style="display: none" src="https://nerdy.dev/media/www-ep248.jpg" alt="Whiskey web and whatnot episode 248" height="2000" width="2000" />
<p><span class="Tag">Ep #248</span><br>
<strong>Live at React Miami with guests <a href="https://jason.energy/">Jason Lengstorf</a>, <a href="https://kentcdodds.com/">Kent C. Dodds</a>, <a href="https://tannerlinsley.com/about">Tanner Linsley</a> and <a href="https://francescociulla.com/">Francesco Ciulla</a></strong></p>
<p><a href="https://robbiethewagner.dev">Robbie</a> and I chat with <strong>4 guests in 1 episode</strong>! </p>
<p>Topics span things like Lambo's, MCP vs <a href="https://openclaw.ai/">OpenClaw</a>, agents building agents, polymorphic UI libraries, <a href="https://github.com/github/spec-kit/blob/main/spec-driven.md">SDD</a> + state machines, how <a href="https://en.wikipedia.org/wiki/Prolog">Prolog</a> is the most hated programming language, and whatnot.</p>
<p>⤷ <a href="https://whiskey.fm/dark-factories-polymorphic-ui-and-why-developers-still-matter">whiskey.fm</a> · <a href="https://www.youtube.com/watch?v=ZZvZ4rl3p_o">youtube</a> · <a href="https://open.spotify.com/episode/21GUwCvDA8zBvp1zjIMpZw">spotify</a> · <a href="https://podcasts.apple.com/us/podcast/dark-factories-polymorphic-ui-and-why-developers/id1552776603?i=1000774155984">apple</a></p>
<p><small>Presented by <a href="https://www.gitkraken.com/lp/whiskeyfm">GitKraken</a> and <a href="https://clerk.com/">Clerk</a></small></p>Several short sentences on writing - Robin Rendlehttps://robinrendle.com/notes/several-short-sentences-on-writing/2026-06-21T23:44:58.000Z<p>This is the sort of book I usually hate. By law books about writing are so desperate to explain the world to me that I struggle to keep my eyes open. I donāt have much patience when I feel someoneās talking down to me, with them having figured the universe out already. Isnāt it always more exciting when a writer is on the tip of their toes just a half step ahead of you? When youāre invited to participate rather than being yelled at?</p>
<p>Verlyn Klinkenborgās <em>Several short sentences on writing</em> slips into that mode from time to time but has enough useful advice to recommend it. Like this first banger:</p>
<blockquote>
<p>A writerās real work is the endless winnowing of sentences,<br />
The relentless exploration of possibilities...</p>
</blockquote>
<p>Excellent, yes! But okay ā how do you do that?</p>
<blockquote>
<p>The answer is simple.<br />
Your job as a writer is making sentences.</p>
</blockquote>
<p>Thatās not earth-shattering advice, but itās helpful for me. The size of a project can be overwhelming and cutting the problem up into sentences frees me from the burden of all that future work that has to be done.</p>
<p>Or, as Verlyn puts it:</p>
<blockquote>
<p>Iām interested in the genre of the sentence,<br />
The genre thatās always overlooked.<br />
Many writers seem to believe we live in a universe of well-defined literary forms:<br />
The memoir, the profile, the feature, the first novel, the book proposal...</p>
</blockquote>
<p>I like this! Itās a good reminder to focus on each sentence microscopically, to ignore everything else beyond that. Because who knows if Iām writing a poem or a sci-fi novel when I start a project? Just take care of the sentences.</p>
<p>Perhaps the strangest thing about this book is that it isnāt just writing advice, as I kept thinking about how these suggestions can be applied to design work, too. For example: when working on a big design project I never work on the whole thing all at once. At the beginning Iāll focus on the smallest part of it: the sidebar, the navigation, a single button or action or feature. I think of these as āsentencesā or what I once called <a href="https://robinrendle.com/adventures/the-smallest-possible-bit/">the smallest possible bit</a>. Each change in the design modifies all the other changes. So Iāll constantly revise my prototypes as if Iām a brutal editor, demanding revision after revision, but because Iām working on a small piece of the puzzle itās much less intimidating. Who can make 50 versions of a sidebar? Anyone can!</p>
<p>Designers often struggle with this lack of focus on the āsentenceā of interface design. But I struggle with it more whilst writing. I get overwhelmed with all the possibilities and my drafts folder is littered with dead projects because I forgot about the sentences and all I could see was the plot or the genre or anything else.</p>
<p>But how do you get good at this though? This relentless focus? Hereās what Verlyn recommends:</p>
<blockquote>
<p>The urge to write is so strong.<br />
Aspiring writers want so badly to be pouring something out of themselves.<br />
You need a place where you can practice noticing and making sentencesā<br />
[...] Is it possible to practice noticing?<br />
I think so.<br />
But I also think it requires a suspension of yearning</p>
</blockquote>
<p>Sorry to interrupt you Verlyn, but !!!</p>
<p>First: Iāve felt this yearning to be a writer and a designer deeply in my bones. But Iāve avoided the writing, the sentence, the interface design, and the actual work in favor of bragging about being a writer or a designer. Itās easy to let the titles and the ego get the best of you. But the sentences are what matter most.</p>
<p>Second: this blog has always been that place for me to notice things. I write publicly because knowing that strangers will read this thing helps me winnow each sentence.</p>
<p>But when it comes to design it all needs to be locked up, private, sent into the <a href="https://dragonball.fandom.com/wiki/Hyperbolic_Time_Chamber">Hyperbolic Time Chamber</a>. The ideas are too embarrassing, too naive at the beginning. So early last year I started to keep a daily journal and began to fill it with junk: terrible, unforgivable ideas and scribbled drawings with words that make next to no sense. Itās a relief though, to have somewhere to notice things without it all being in the public record.</p>
<p>Anyway, I quite like what Verlyn has to say about cutting longer sentences into shorter ones because Iāve always struggled with the need to show off in my writing, to prove I can write a sentence that never stops. Verlyn argues this is due to fear and maybe thatās true. PerhapsĀ Iām afraid to put a full stop somewhere because itās hard and Iām an undisciplined writer, because I fear that folks will stop reading if each and every sentence doesnāt do a backflip-720-no-scope:</p>
<blockquote>
<p>The obsession with transition negates a basic truth about writing,<br />
A magical truth.<br />
You can get anywhere from anywhere,<br />
Always and almost instantly.</p>
</blockquote>
<p>I love this! <em>You can get anywhere from anywhere</em>. Each sentence is a portal. Each sentence has potential. This is very exciting! Who knows where the next one will lead!</p>
<p>But I also like the idea that cutting up long sentences isnāt just for the reader. A lot of Verlynās argument in the book is that writing isnāt solely to woo strangers. Instead, this act of revision should help us think more clearly:</p>
<blockquote>
<p>We assume that thought shapes the sentence.<br />
But thought and sentence are always a collaboration...<br />
[...] At first, what you mean to say will emerge<br />
By setting aside the things you donāt mean to say<br />
As well as trying to say the thing itself.</p>
</blockquote>
<p>And and and:</p>
<blockquote>
<p>Finding flaws is how you learn to make better sentences.<br />
[...] Some flaws do a wonderful job of hiding.</p>
</blockquote>
<p>I canāt help but connect this writing advice to software design again: bad ideas hide themselves until I make a prototype and find them. Every sentence is a prototype, too. Trying a thing, testing an idea.</p>
<p><em>Bad design does a wonderful job of hiding.</em></p>
<p>I like that for a couple of reasons. I like it because I donāt believe in the traditional design process. I think great design, like great writing, is a total shit show. Thereās no stages, no linear clunk, clunk, clunk of progress. Itās all terrible until suddenly it isnāt because youāve revised it ten thousand times.</p>
<p>Or:</p>
<blockquote>
<p>You have no idea what youāre going to say<br />
Until you discover what you want to say<br />
As you make the sentences that say it.</p>
<p>Every sentence is optional until it proves otherwise.<br />
Writing is the work of discovery.</p>
</blockquote>WWW Ep247 Live At React Miami With Ken Wheeler - Adam Argylehttps://nerdy.dev/www-ep247-live-at-React-Miami-with-Ken-Wheeler?utm_source=rss2026-06-20T06:38:14.000Z<img style="display: none" src="https://nerdy.dev/media/www-ep247.jpg" alt="Whiskey web and whatnot episode 247" height="2000" width="2000" />
<p><span class="Tag">Ep #247</span><br>
<strong>Live at React Miami with guest <a href="https://x.com/kenwheeler">Ken Wheeler</a></strong></p>
<p><a href="https://robbiethewagner.dev">Robbie</a>, Ken and I chat about proxies, pranks, survival bags, agent swarms and Ramon the 420 IQ Gorilla.</p>
<p>⤷ <a href="https://whiskey.fm/proxies-petty-pranks-and-ramon-the-420-iq-gorilla-w-ken-wheeler">whiskey.fm</a> · <a href="https://www.youtube.com/watch?v=HLRkh-dbFAk">youtube</a> · <a href="https://open.spotify.com/episode/5iqgL3LWIlZgnBDgrmCodZ">spotify</a> · <a href="https://podcasts.apple.com/us/podcast/proxies-petty-pranks-and-ramon-the-420-iq-gorilla-w/id1552776603?i=1000773454709">apple</a></p>Prop For That - Adam Argylehttps://nerdy.dev/prop-for-that?utm_source=rss2026-06-13T22:58:10.000Z<img style="display: none" src="https://nerdy.dev/media/prop-for-that.jpg" alt="A screenshot of the prop-for-that kitchen sink homepage hero area" height="626" width="1600" />
<script type="module">
import "https://cdn.jsdelivr.net/npm/baseline-status";
</script>
<p>Announcing <a href="https://prop-for-that.netlify.app/">Prop For That</a>, a JS library that backfills what CSS doesn't provide us yet (and maybe never will). </p>
<p>I'm done waiting for CSS to catch up to all the valuable information JS knows and done watching folks write the same little JS to just write a custom property to a component.</p>
<q class="info">
<p><a href="https://prop-for-that.netlify.app">demo</a> Ā· <a href="https://prop-for-that.netlify.app/docsite/">docs</a> Ā· <a href="https://www.npmjs.com/package/prop-for-that">npm</a></p>
</q>
<p><a href="https://codepen.io/argyleink/pen/XJpjNNa">Here's a basic example</a> taking the value from a range slider to draw a nice gradient that fills up the slider:</p>
<pre><code class="language-js"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">import</span><span style="color:var(--shiki-token-string-expression)"> 'prop-for-that/auto'</span></span>
<span class="line"><span style="color:var(--shiki-token-comment)">// or import 'https://esm.sh/prop-for-that/auto'</span></span></code></pre>
</code></pre>
<pre><code class="language-html"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)"><</span><span style="color:var(--shiki-token-string-expression)">input</span><span style="color:var(--shiki-token-function)"> type</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"range"</span><span style="color:var(--shiki-token-function)"> data-props-for</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"range"</span><span style="color:var(--shiki-token-function)"> min</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"0"</span><span style="color:var(--shiki-token-function)"> max</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"100"</span><span style="color:var(--shiki-token-function)"> value</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"40"</span><span style="color:var(--shiki-foreground)"> /></span></span></code></pre>
</code></pre>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-string-expression)">input</span><span style="color:var(--shiki-foreground)">[</span><span style="color:var(--shiki-token-function)">type</span><span style="color:var(--shiki-token-keyword)">=</span><span style="color:var(--shiki-token-string-expression)">"range"</span><span style="color:var(--shiki-foreground)">] {</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> background</span><span style="color:var(--shiki-token-keyword)">:</span><span style="color:var(--shiki-token-function)"> linear-gradient</span><span style="color:var(--shiki-token-constant)">(</span></span>
<span class="line"><span style="color:var(--shiki-token-keyword)"> to</span><span style="color:var(--shiki-token-constant)"> right </span><span style="color:var(--shiki-token-keyword)">in</span><span style="color:var(--shiki-token-constant)"> oklab</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> var</span><span style="color:var(--shiki-token-constant)">(--theme) </span><span style="color:var(--shiki-token-function)">calc</span><span style="color:var(--shiki-token-constant)">(</span><span style="color:var(--shiki-token-function)">var</span><span style="color:var(--shiki-token-constant)">(--live-value-pct) </span><span style="color:var(--shiki-token-keyword)">*</span><span style="color:var(--shiki-token-constant)"> 100</span><span style="color:var(--shiki-token-keyword)">%</span><span style="color:var(--shiki-token-constant)">)</span><span style="color:var(--shiki-token-punctuation)">,</span></span>
<span class="line"><span style="color:var(--shiki-token-function)"> var</span><span style="color:var(--shiki-token-constant)">(--track) 0</span></span>
<span class="line"><span style="color:var(--shiki-token-constant)"> )</span><span style="color:var(--shiki-foreground)">;</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<p><a href="https://codepen.io/argyleink/pen/XJpjNNa">codepen</a> Ā· <a href="https://prop-for-that.netlify.app/docsite/demos/range/">docs example</a> Ā· <a href="https://codepen.io/collection/WQEKJG">codepen collection</a></p>
<h2>
Why?
<a name="why?" href="#why?">#</a>
</h2>
<p>It's <strong>super common</strong> to need a few lines of JS for a simple thing like:</p>
<ul>
<li>the value of the color input</li>
<li>the mouse pointer position</li>
<li>the size of the scrollbar</li>
<li>the colors present in an image or video</li>
<li>the battery level</li>
<li>an element's visibility</li>
<li>etc</li>
</ul>
<p>With <a href="https://prop-for-that.netlify.app/">Prop For That</a>, you just declaratively specify on any element the props you want, and live props show up. </p>
<p><q>There's an imperitive API too, but the data attribute path is the slickest</q></p>
<p>Everything is a plugin that loads only if you need it too, ultimately putting you right where you wanted to be: <strong>creating something sick in CSS using dynamic information</strong> without wiring up some dorky JS.</p>
<h2>
What kind of props?
<a name="what-kind-of-props?" href="#what-kind-of-props?">#</a>
</h2>
<p>My <a href="/contextualism-talk-at-CSS-Day-2026">talk at CSS Day</a> was an enumeration of all the ways CSS can adapt to users, contexts, pages, etc⦠which made me hyper aware of all the ways CSS couldn't adapt without JS. </p>
<p>Here's a flat list of all the <strong>live props</strong> currently supported by the library:</p>
<ol>
<li>Pointer x/y in the window</li>
<li>Pointer x/y inside/local to an element</li>
<li>Viewport pixel height/width values</li>
<li>Visual viewport information</li>
<li>Element size information</li>
<li>Element visibility</li>
<li>Scrollbar and thin scrollbar sizes</li>
<li>Input element values </li>
<li>Input element dirty, touched, pristine, etc</li>
<li>Select element value, index, count, etc</li>
<li>Colors from an image or gradient (average, accent, light, dark, etc)</li>
<li>Colors occuring in a video</li>
<li>Video progress</li>
<li>Image loaded or broken + natural h/w</li>
<li>Clock time</li>
<li>FPS</li>
<li>Online/offline status</li>
<li>Page focused/visible</li>
<li>Scroll velocity</li>
<li>Accelerometer and device tilt/orientation</li>
<li>Geolocation</li>
<li>DPR, CPU cores, memory</li>
<li>Page navigation type (reload, back, etc)</li>
</ol>
<p>And a few Chromium only props:</p>
<ol>
<li>Network status like type, speed, save data, etc</li>
<li>Battery status</li>
<li>CPU pressure</li>
</ol>
<h2>
Style Queries
<a name="style-queries" href="#style-queries">#</a>
</h2>
<p>Style Queries being in all major browsers marks an important milestone for CSS, and made this library much more viable. </p>
<p><baseline-status featureId="container-style-queries"></baseline-status></p>
<p>Using Prop For That with <a href="https://una.im/style-queries/">Style Queries</a> looks like this:</p>
<pre><code class="language-js"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">import</span><span style="color:var(--shiki-token-string-expression)"> 'https://esm.sh/prop-for-that/auto'</span></span></code></pre>
</code></pre>
<pre><code class="language-html"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-foreground)"><</span><span style="color:var(--shiki-token-string-expression)">form</span><span style="color:var(--shiki-token-function)"> data-props-for</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"form-state"</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">input</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"name"</span><span style="color:var(--shiki-foreground)"> required></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">input</span><span style="color:var(--shiki-token-function)"> name</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"email"</span><span style="color:var(--shiki-token-function)"> type</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"email"</span><span style="color:var(--shiki-foreground)"> required></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> <</span><span style="color:var(--shiki-token-string-expression)">button</span><span style="color:var(--shiki-token-function)"> type</span><span style="color:var(--shiki-foreground)">=</span><span style="color:var(--shiki-token-string-expression)">"submit"</span><span style="color:var(--shiki-foreground)">>Save</</span><span style="color:var(--shiki-token-string-expression)">button</span><span style="color:var(--shiki-foreground)">></span></span>
<span class="line"><span style="color:var(--shiki-foreground)"></</span><span style="color:var(--shiki-token-string-expression)">form</span><span style="color:var(--shiki-foreground)">></span></span></code></pre>
</code></pre>
<pre><code class="language-css"><pre class="shiki css-variables" style="background-color:var(--shiki-background);color:var(--shiki-foreground)" tabindex="0"><code><span class="line"><span style="color:var(--shiki-token-keyword)">@container</span><span style="color:var(--shiki-foreground)"> style(--live-all-valid: 1) {</span></span>
<span class="line"><span style="color:var(--shiki-foreground)"> ā¦</span></span>
<span class="line"><span style="color:var(--shiki-foreground)">}</span></span></code></pre>
</code></pre>
<h2>
Bye noise
<a name="bye-noise" href="#bye-noise">#</a>
</h2>
<p><strong>Import, add attribute(s), have CSS fun.</strong></p>
<p>Go make cool shit and share it with me š¤š»š</p>Make Believe - Robin Rendlehttps://robinrendle.com/notes/make-believe/2026-06-13T16:14:41.000Z<p>This morning was a total stinker. I woke up with a dull headache, teeth grinding, fists clenched. Sometimes my body becomes haunted, a vessel for <em>a thing</em>; total and all consuming. It could be a conversation the day before or a problem Iām trying to solve, it doesnāt really matter what that the thing is. These moments suck because it feels like Iām trapped inside my body with no way out but itās extra annoying because the remedy is always so predictable and boring: stop work, find the nearest ocean, push my limp body up that hill, return to literature and books, books, books.</p>
<p>But when I woke up this morning I didnāt know that <em>Make Believe: On Telling Stories to Children</em> by Mac Barnett was the antidote. Because, dear reader, let me tell you: this book is only-the-finest-punk-rock-remedy for my bad brain goo.</p>
<p>Macās a childrenās writer and in <em>Make Believe</em> he argues that these books arenāt a silly genre, theyāre a form we should treat seriously and respect. Meaning, books for children arenāt a lesser kind of literature simply because theyāre for children. In fact, Mac argues, thereās an awful lot we can learn about the world from children, too:</p>
<blockquote>
<p>...what are āchildish enthusiasmsā but the ability to see the world with the freshness and wonder that literature requires? The child who stares and marvels at the workings of a garbage truck sees the garbage truck better than adults do. The kid who breathlessly recounts horse facts, who finds it overwhelming that such an amazing creature actually exists, is correct.</p>
</blockquote>
<p>Mac continues:</p>
<blockquote>
<p>Since the invention of the printing press, childrenās books have been a battleground between those who want to tell kids what to do and those who want to tell them stories. [...] adults often expect childrenās books to reinforce the prerogative of parents or priests or school principals. Most often, we confuse writers with teachers.</p>
</blockquote>
<p>I hate it when stories have treacly moral lessons as an adult, too. I like the complexity! The unknown bits of a story, the blurry edges that are impossible to put into words. So why should kids literature be any different?</p>
<blockquote>
<p>Rather than pushing a moral, good fiction invites the reader to make meaning. A moral is an immutable lesson, intentionally encoded into a story by the author, meant to be inscribed on the childās brain. Meaning, though, is created collaboratively...</p>
</blockquote>
<p>I could do this all day, quoting big chunks and spoiling every page of Macās very charming, very funny little book. Thankfully, Mac has a newsletter too that Iām now utterly obsessed by. Take this fantastic piece about <a href="https://lookingatpicturebooks.com/p/where-the-wild-things-are"><em>Where the Wild Things Are</em></a> for example:</p>
<blockquote>
<p>MAC: As Max is crowned āking of all wild thingsā the pictures get even bigger, and that white bar shrinks, until we come to maybe the most famous sentence in any picture book: āāAnd now,ā cried Max, ālet the wild rumpus start.āā The rumpus is three glorious full-bleed, two-page illustrations. The white space is gone. There are no words.</p>
<p>(These are called āwordless spreads.ā)</p>
<p>JON: After all, what would you write? A bunch of sounds? Itās so much louder this way.</p>
</blockquote>Contextualism Talk At CSS Day 2026 - Adam Argylehttps://nerdy.dev/contextualism-talk-at-CSS-Day-2026?utm_source=rss2026-06-12T10:13:27.000Z<img style="display: none" src="https://nerdy.dev/media/contextualism-at-cssday-2026.jpg" alt="Contextualism title slide from the website" height="500" width="1500" />
<p>ā talk "Contextualism" at <a href="https://cssday.nl/">CSS Day 2026</a></p>
<p><a href="https://css-day-2026.netlify.app/">Slides</a> Ā· <a href="https://prop-for-that.netlify.app/">Prop For That</a> </p>