Feed fetched in 222 ms.
Warning Content type is application/rss+xml; charset=UTF-8, not text/xml or applicaton/xml.
Feed is 38,432 characters long.
Feed has an ETag of W/"552755a9948c20a6442b6e00896b2770".
Feed has a last modified date of Wed, 18 Mar 2026 15:47:29 GMT.
Feed is well-formed XML.
Warning Feed has no styling.
This is an RSS feed.
Feed title: Chris Coyier
Feed self link matches feed URL.
Feed has an image at https://i0.wp.com/chriscoyier.net/wp-content/uploads/2021/07/IsUISvAq_400x400.jpg?fit=32%2C32&ssl=1.
Feed has 12 items.
First item published on 2026-03-18T15:47:28.000Z
Last item published on 2026-02-28T16:24:35.000Z
All items have published dates.
Newest item was published on 2026-03-18T15:47:28.000Z.
Info Feed's Last-Modified date is newer than the newest item's published date (2026-03-18T15:47:29.000Z > 2026-03-18T15:47:28.000Z).
Home page URL: https://chriscoyier.net/
Home page has feed discovery link in <head>.
Home page has a link to the feed in the <body>
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
<title>Chris Coyier</title>
<atom:link href="https://chriscoyier.net/feed/" rel="self" type="application/rss+xml"/>
<link>https://chriscoyier.net</link>
<description>Web craftsman, blogger, author, speaker.</description>
<lastBuildDate>Wed, 18 Mar 2026 15:47:29 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>hourly</sy:updatePeriod>
<sy:updateFrequency>1</sy:updateFrequency>
<image>
<url>https://i0.wp.com/chriscoyier.net/wp-content/uploads/2021/07/IsUISvAq_400x400.jpg?fit=32%2C32&ssl=1</url>
<title>Chris Coyier</title>
<link>https://chriscoyier.net</link>
<width>32</width>
<height>32</height>
</image>
<site xmlns="com-wordpress:feed-additions:1">74074248</site>
<item>
<title>Meets Style Sheets</title>
<link>https://chriscoyier.net/2026/03/18/meets-style-sheets/</link>
<comments>https://chriscoyier.net/2026/03/18/meets-style-sheets/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Wed, 18 Mar 2026 15:47:28 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13312</guid>
<description><![CDATA[I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s free on Wednesday, May 6th. I named my talk In-N-Out Styling. Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with […]]]></description>
<content:encoded><![CDATA[
<p>I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s <strong>free</strong> on Wednesday, May 6th.</p>
<figure class="wp-block-image size-large"><a href="https://smashingconf.com/meets-style-sheets"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="576" data-attachment-id="13313" data-permalink="https://chriscoyier.net/2026/03/18/meets-style-sheets/style_sheets_banner/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1401%2C788&ssl=1" data-orig-size="1401,788" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="style_sheets_banner" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=300%2C169&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1024%2C576&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1" alt="Promotional graphic for a virtual event titled 'Style Sheets' featuring coding elements, date and time details." class="wp-image-13313" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=300%2C169&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=768%2C432&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?w=1401&ssl=1 1401w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
<p>I named my talk <strong>In-N-Out Styling</strong>.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with Chris being Chris, there will be plenty of things which are food for discussion, as well as plenty of practical take-aways as well.</p>
</blockquote>
<p>I’ve been preparing for it. I’ve got like 35 minutes or so, and the concept of modern “entry” and “exit” styles is <em>plenty</em> for that time. It’s kinda complicated in my opinion, involving multiple ways of doing things, modern syntax with weird names, and specificity footguns. I think we can all come out of it with an understanding of what’s possible. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/18/meets-style-sheets/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13312</post-id>
</item>
<item>
<title>Kermit Roosevelt</title>
<link>https://chriscoyier.net/2026/03/14/kermit-roosevelt/</link>
<comments>https://chriscoyier.net/2026/03/14/kermit-roosevelt/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Sat, 14 Mar 2026 17:08:04 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13325</guid>
<description><![CDATA[I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and […]]]></description>
<content:encoded><![CDATA[
<p>I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. </p>
<p>It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and did the speech both in Spanish and English. </p>
<p>It was cute. A lot of astronauts and artists and stuff. </p>
<p>One kid did Theodore Roosevelt. </p>
<p>I’m not a smart man, and I just had no idea <a href="https://en.wikipedia.org/wiki/Attempted_assassination_of_Theodore_Roosevelt">this happened</a>. </p>
<p>1912. He’s giving a speech in my old stomping grounds, Milwaukee, Wisconsin. Dude friggin shoots him in the chest. The bullet goes through a thick, folded-up bit of paper in his pocket, but then still into his body. Then he’s like <em>“I’m good”</em> and continues his speech for <em>an hour.</em> He recoups a couple of weeks but they <em>leave the bullet in his body</em> and didn’t seem to care.</p>
<p>Kind of a badass. No wonder he leaned into the “Bull Moose” thing.</p>
<p>Then the kid is like,<em> and he had five kids, yadda, yadda, <strong>Kermit</strong>, yadda, yadda.</em></p>
<p>I was like LOL, he named <a href="https://america250.org/news/theodore-roosevelts-children/">one of his kids </a>Kermit. Turns out all of his kids led fascinating lives too! Kermit was an unhealthy kid, but ultimately went to Harvard and then did a bunch of literal jungle exploration with his dad (?!) and later Asia with his brother.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>… he postponed his marriage to join his father on a dangerous journey to the River of Doubt in Brazil. Both he and his father nearly died during this trip through the jungle.</p>
</blockquote>
<p>He fought in <em>both</em> World Wars, deciding to go to England and join the British Army to fight for them. Apparently, you can just do that? War breaks out, and you can just pick one of the countries and go there and fight for that side? WTF? He doesn’t make it all the way through WWII because of the health stuff, so they stick him up in Alaska, and he kills himself. Wild stuff.</p>
<p>Oh and speaking of his brother Theodore III…</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Along with his brother, Kermit, Roosevelt spent most of 1929 on a zoological expedition and was the first Westerner known to have shot a panda.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/14/kermit-roosevelt/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13325</post-id>
</item>
<item>
<title>AI is my CMS</title>
<link>https://chriscoyier.net/2026/03/13/ai-is-my-cms/</link>
<comments>https://chriscoyier.net/2026/03/13/ai-is-my-cms/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 13 Mar 2026 15:58:28 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13318</guid>
<description><![CDATA[I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold. AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it […]]]></description>
<content:encoded><![CDATA[
<p>I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold.</p>
<figure class="wp-block-embed is-type-rich is-provider-bluesky-social wp-block-embed-bluesky-social"><div class="wp-block-embed__wrapper">
<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:xhhcrzsilpamjmz4dvrpt7df/app.bsky.feed.post/3mgob4lodqs27" data-bluesky-cid="bafyreihmwfy5wpx35xuk7rsw3qzx2iycb7xxyd3gate3oxgt33h5o7g2oy"><p lang="en">Has someone written "AI is my CMS" yet? Feels inevitable. Like why run a build tool when you can just prompt another page?</p>— <a href="https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df?ref_src=embed">Chris Coyier (@chriscoyier.net)</a> <a href="https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df/post/3mgob4lodqs27?ref_src=embed">2026-03-10T01:52:20.536Z</a></blockquote><script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
</div></figure>
<p>AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it into some templates and an AI doing that same job instead? Isn’t <em>less tooling good?</em></p>
<p>I had missed that this particular topic already had quite a moment in the sun this past December. Lee Robinson wrote <a href="https://leerob.com/agents">Coding Agents & Complexity Budgets</a>. Without calling it out by name, Lee basically had a vibe-coding weekend where he ripped out <a href="https://www.sanity.io/">Sanity</a> from cursor.com. I don’t think Lee is wrong for this choice. Spend some money to save some money. Remove some complexity. Get the code base more AI-ready. Yadda yadda. </p>
<p>Even though Lee didn’t call out Sanity, <a href="https://www.sanity.io/blog/you-should-never-build-a-cms">they noticed and responded</a>. They <em>also</em> make some good and measured points, I think. Which makes this a pretty great blog back-and-forth, by the way, which you love to see. Some of their argument as to why it can be the right choice to have Sanity is that some abstraction and complexity can be good, actually, because building websites from content can be complicated, especially as time and scale march on. And if you rip out a tool that does some of it, only to re-build many of those features in-house, what have you really gained?</p>
<p>TIME FOR MY TWO CENTS.</p>
<p>The language feels a little wrong to me. </p>
<p>I think if you’re working with Markdown-files as content in a Next.js app… that’s already a CMS. You didn’t rip out a CMS, you ripped out <em>a cloud database</em>. Yes, that cloud database does binary assets also, and handles user management, and has screens for CRUDing the content, but to me it’s more of a cloud data store than a CMS. The advantage Lee got was getting the data and assets <em>out</em> of the cloud data store. I don’t think they were using stuff like the fancy <a href="https://www.sanity.io/docs/content-lake/groq-introduction">GROQ</a> language to get at their content in fine-grained ways. It’s just that cursor.com happened to not really <em>need</em> a database, and in fact was using it for things they probably shouldn’t have been (like video hosting). </p>
<p>Me, I don’t think there is one right answer. If keeping content in Markdown files and building sites by smashing those into templates is wrong, then every static site generator ever built is wrong (🙄). But keeping content in databases isn’t wrong either. I tend to lean that way by default, since the power you get from being able to<em> query</em> is so obviously and regularly useful. </p>
<p>Maybe they are both right in that having LLM tools that have the power to wiggleworm their way into the content no matter where it is, is helpful. In the codebase? Fine. In a DB that an MCP can access? Fine.</p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/13/ai-is-my-cms/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13318</post-id>
</item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/11/13316/</link>
<comments>https://chriscoyier.net/2026/03/11/13316/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Wed, 11 Mar 2026 14:22:23 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13316</guid>
<description><![CDATA[Jerod Santo: After 13 years, 1042 podcasts, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my final News last Monday and Adam shipped our Friends finale yesterday. Huge congrats Jerod! Heck of a legacy.]]></description>
<content:encoded><![CDATA[
<p><a href="https://jerodsanto.net/2026/03/so-long-changelog/">Jerod Santo</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>After 13 <a href="https://jerodsanto.net/2013/04/changeloggin/">years</a>, 1042 <a href="https://changelog.com/person/jerodsanto">podcasts</a>, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my <a href="https://changelog.com/news/182">final News</a> last Monday and Adam shipped our <a href="https://changelog.com/friends/129">Friends finale</a> yesterday.<br></p>
</blockquote>
<p>Huge congrats Jerod! Heck of a legacy. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/11/13316/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13316</post-id>
</item>
<item>
<title>Claude is an Electron App</title>
<link>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/</link>
<comments>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Tue, 10 Mar 2026 18:12:09 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13310</guid>
<description><![CDATA[Juicy intro from Nikita Prokopov:]]></description>
<content:encoded><![CDATA[
<p><a href="https://tonsky.me/blog/fall-of-native/">Juicy intro from Nikita Prokopov</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>In <a href="https://www.dbreunig.com/2026/02/21/why-is-claude-an-electron-app.html" target="_blank" rel="noreferrer noopener">“Why is Claude an Electron App?”</a> Drew Breunig wonders:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Claude spent $20k on an agent swarm implementing (kinda) a C-compiler in Rust, but desktop Claude is an Electron app.</p>
<p>If code is free, why aren’t all apps native?</p>
</blockquote>
<p>And then argues that the answer is that LLMs are not good enough yet. They can do 90% of the work, so there’s still a substantial amount of manual polish, and thus, increased costs.</p>
<p>But I think that’s not the real reason. The real reason is: native has nothing to offer.</p>
</blockquote>
<p></p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13310</post-id>
</item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/09/13298/</link>
<comments>https://chriscoyier.net/2026/03/09/13298/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 09 Mar 2026 15:54:38 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13298</guid>
<description><![CDATA[The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs […]]]></description>
<content:encoded><![CDATA[
<p>The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs with unsaved changes in a document (WordPress, CodePen, etc) will prevent the browser from quitting. </p>
<p>I screenshot this because I’d never seen that prompt before and it seems like a nice reminder for macOS to let you know:</p>
<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" decoding="async" width="966" height="394" data-attachment-id="13299" data-permalink="https://chriscoyier.net/2026/03/09/13298/screenshot-2026-03-05-at-3-36-56-pm/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1" data-orig-size="966,394" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot 2026-03-05 at 3.36.56 PM" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=300%2C122&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=966%2C394&ssl=1" alt="Notification on a Mac warning to close apps before a scheduled software update, advising users to save documents and quit open applications." class="wp-image-13299" style="aspect-ratio:2.4518836085013227;width:683px;height:auto" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?w=966&ssl=1 966w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=300%2C122&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=768%2C313&ssl=1 768w" sizes="(max-width: 966px) 100vw, 966px" /></figure>
<p>I’m not going to, ya know, actually do it probably, but I should.</p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/09/13298/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13298</post-id>
</item>
<item>
<title>Mad CSS</title>
<link>https://chriscoyier.net/2026/03/06/mad-css/</link>
<comments>https://chriscoyier.net/2026/03/06/mad-css/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 06 Mar 2026 20:25:47 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13295</guid>
<description><![CDATA[Round One of Mad CSS is out on YouTube!]]></description>
<content:encoded><![CDATA[
<p>Round One of <a href="https://www.madcss.com/">Mad CSS</a> is out on YouTube! </p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="16 of the Biggest Web Devs Compete with CSS" width="500" height="281" src="https://www.youtube.com/embed/nuxSFTjXrhI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/06/mad-css/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13295</post-id>
</item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/06/13293/</link>
<comments>https://chriscoyier.net/2026/03/06/13293/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 06 Mar 2026 18:41:04 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13293</guid>
<description><![CDATA[Lars Mensel: … the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.]]></description>
<content:encoded><![CDATA[
<p><a href="https://larsmensel.com/2026/the-clankers-paradox">Lars Mensel</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>… the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/06/13293/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13293</post-id>
</item>
<item>
<title>Me Trying To Take a Selfie in 2001</title>
<link>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/</link>
<comments>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Tue, 03 Mar 2026 02:41:12 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13278</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[
<p></p>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13279" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-3/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329014","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.022222222222222","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1" alt="A person taking a selfie in a bathroom mirror, wearing a black shirt and displaying a neutral expression." class="wp-image-13279" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">I photograph a <em>mirror</em> and then, like, <em>I’ll be in the mirror. </em></figcaption></figure>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13280" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-4/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"6.7","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978328824","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.022222222222222","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1" alt="Self-portrait of a man with short hair taking a photo in a mirror, with a bright flash reflecting in the image." class="wp-image-13280" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">Ooops flash on.</figcaption></figure>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13281" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-5/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329114","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.033333333333333","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1" alt="A man with a shaved head posing in a bathroom with soft lighting." class="wp-image-13281" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">You’re supposed to stick your neck out, right?</figcaption></figure>
<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="674" height="514" data-attachment-id="13282" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-6/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1" data-orig-size="674,514" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329170","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.033333333333333","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=300%2C229&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=674%2C514&ssl=1" alt="A young man with a shaved head standing in front of a bathroom mirror, wearing a black t-shirt." class="wp-image-13282" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?w=674&ssl=1 674w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=300%2C229&ssl=1 300w" sizes="auto, (max-width: 674px) 100vw, 674px" /><figcaption class="wp-element-caption">There it is. Ship it, ol’ buddy.</figcaption></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13278</post-id>
</item>
<item>
<title>FOREVERGREEN</title>
<link>https://chriscoyier.net/2026/03/02/forevergreen/</link>
<comments>https://chriscoyier.net/2026/03/02/forevergreen/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 02 Mar 2026 19:05:07 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13266</guid>
<description><![CDATA[In the first few minutes, Ruby says to me, “This is like The Giving Tree“, and by the end, I was like, “OK, you’re right.”]]></description>
<content:encoded><![CDATA[
<p><span style="margin: 0px; padding: 0px;">In the first few minutes, Ruby says to me, “<em>This is like The Giving Tr</em></span><em>ee</em>“, and by the end, I was like, “<em>OK, you’re right</em>.”</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="FOREVERGREEN — Academy Award®–Nominated Animated Short Film | Now Streaming for a Limited Time" width="500" height="281" src="https://www.youtube.com/embed/B4EPW7JUMTM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/forevergreen/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13266</post-id>
</item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/02/13264/</link>
<comments>https://chriscoyier.net/2026/03/02/13264/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 02 Mar 2026 15:26:02 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13264</guid>
<description><![CDATA[I like how Nolan paints this two-sided picture of AI coding. The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months. You could abstain out of moral principle. And that’s fine, especially if you’re at the […]]]></description>
<content:encoded><![CDATA[
<p>I like how <a href="https://nolanlawson.com/2026/02/07/we-mourn-our-craft/">Nolan paints this two-sided picture of AI coding</a>. </p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months.</p>
<p>You could abstain out of moral principle. And that’s fine, especially if you’re at the tail end of your career. And if you’re at the beginning of your career, you don’t need me to explain any of this to you, because you already use Warp and Cursor and Claude, with ChatGPT as your therapist and pair programmer and maybe even your lover. </p>
</blockquote>
<p>For me, it has me thinking: <em>in what ways am I still useful?</em> Like, if the code I write isn’t particularly useful, which is quite the blow as I thought that was kinda my main thing, then what is? </p>
<p>I’m hoping it’s still plenty of stuff, because I have lots of career left. I hope I’m useful because I can plan, I can be responsible, I can communicate, I can prioritize, and I can dream. Hopefully, I can turn that into a job for a long time. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/13264/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13264</post-id>
</item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/02/28/13262/</link>
<comments>https://chriscoyier.net/2026/02/28/13262/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Sat, 28 Feb 2026 16:24:35 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13262</guid>
<description><![CDATA[Cool little aside in Marcin Wichary’s How to shoot a screen using a board of keys: Acorn 8, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can […]]]></description>
<content:encoded><![CDATA[
<p>Cool little aside in Marcin Wichary’s <a href="https://unsung.aresluna.org/how-to-shoot-a-screen-using-a-board-of-keys/">How to shoot a screen using a board of keys</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://flyingmeat.com/acorn/" target="_blank" rel="noreferrer noopener">Acorn 8</a>, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can re-compose stuff afterwards, reveal covered stuff, remove windows, even change the wallpaper. A mouse cursor arrives too in its own tiny layer, like a cherry on top.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/02/28/13262/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13262</post-id>
</item>
</channel>
</rss>
<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>
<channel>
<title>Chris Coyier</title>
<atom:link href="https://chriscoyier.net/feed/" rel="self" type="application/rss+xml" />
<link>https://chriscoyier.net</link>
<description>Web craftsman, blogger, author, speaker.</description>
<lastBuildDate>Wed, 18 Mar 2026 15:47:29 +0000</lastBuildDate>
<language>en-US</language>
<sy:updatePeriod>
hourly </sy:updatePeriod>
<sy:updateFrequency>
1 </sy:updateFrequency>
<image>
<url>https://i0.wp.com/chriscoyier.net/wp-content/uploads/2021/07/IsUISvAq_400x400.jpg?fit=32%2C32&ssl=1</url>
<title>Chris Coyier</title>
<link>https://chriscoyier.net</link>
<width>32</width>
<height>32</height>
</image>
<site xmlns="com-wordpress:feed-additions:1">74074248</site> <item>
<title>Meets Style Sheets</title>
<link>https://chriscoyier.net/2026/03/18/meets-style-sheets/</link>
<comments>https://chriscoyier.net/2026/03/18/meets-style-sheets/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Wed, 18 Mar 2026 15:47:28 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13312</guid>
<description><![CDATA[I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s free on Wednesday, May 6th. I named my talk In-N-Out Styling. Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with […]]]></description>
<content:encoded><![CDATA[
<p>I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s <strong>free</strong> on Wednesday, May 6th.</p>
<figure class="wp-block-image size-large"><a href="https://smashingconf.com/meets-style-sheets"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="1024" height="576" data-attachment-id="13313" data-permalink="https://chriscoyier.net/2026/03/18/meets-style-sheets/style_sheets_banner/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1401%2C788&ssl=1" data-orig-size="1401,788" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="style_sheets_banner" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=300%2C169&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1024%2C576&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1" alt="Promotional graphic for a virtual event titled 'Style Sheets' featuring coding elements, date and time details." class="wp-image-13313" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=300%2C169&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=768%2C432&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?w=1401&ssl=1 1401w" sizes="(max-width: 1000px) 100vw, 1000px" /></a></figure>
<p>I named my talk <strong>In-N-Out Styling</strong>.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with Chris being Chris, there will be plenty of things which are food for discussion, as well as plenty of practical take-aways as well.</p>
</blockquote>
<p>I’ve been preparing for it. I’ve got like 35 minutes or so, and the concept of modern “entry” and “exit” styles is <em>plenty</em> for that time. It’s kinda complicated in my opinion, involving multiple ways of doing things, modern syntax with weird names, and specificity footguns. I think we can all come out of it with an understanding of what’s possible. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/18/meets-style-sheets/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13312</post-id> </item>
<item>
<title>Kermit Roosevelt</title>
<link>https://chriscoyier.net/2026/03/14/kermit-roosevelt/</link>
<comments>https://chriscoyier.net/2026/03/14/kermit-roosevelt/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Sat, 14 Mar 2026 17:08:04 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13325</guid>
<description><![CDATA[I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and […]]]></description>
<content:encoded><![CDATA[
<p>I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. </p>
<p>It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and did the speech both in Spanish and English. </p>
<p>It was cute. A lot of astronauts and artists and stuff. </p>
<p>One kid did Theodore Roosevelt. </p>
<p>I’m not a smart man, and I just had no idea <a href="https://en.wikipedia.org/wiki/Attempted_assassination_of_Theodore_Roosevelt">this happened</a>. </p>
<p>1912. He’s giving a speech in my old stomping grounds, Milwaukee, Wisconsin. Dude friggin shoots him in the chest. The bullet goes through a thick, folded-up bit of paper in his pocket, but then still into his body. Then he’s like <em>“I’m good”</em> and continues his speech for <em>an hour.</em> He recoups a couple of weeks but they <em>leave the bullet in his body</em> and didn’t seem to care.</p>
<p>Kind of a badass. No wonder he leaned into the “Bull Moose” thing.</p>
<p>Then the kid is like,<em> and he had five kids, yadda, yadda, <strong>Kermit</strong>, yadda, yadda.</em></p>
<p>I was like LOL, he named <a href="https://america250.org/news/theodore-roosevelts-children/">one of his kids </a>Kermit. Turns out all of his kids led fascinating lives too! Kermit was an unhealthy kid, but ultimately went to Harvard and then did a bunch of literal jungle exploration with his dad (?!) and later Asia with his brother.</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>… he postponed his marriage to join his father on a dangerous journey to the River of Doubt in Brazil. Both he and his father nearly died during this trip through the jungle.</p>
</blockquote>
<p>He fought in <em>both</em> World Wars, deciding to go to England and join the British Army to fight for them. Apparently, you can just do that? War breaks out, and you can just pick one of the countries and go there and fight for that side? WTF? He doesn’t make it all the way through WWII because of the health stuff, so they stick him up in Alaska, and he kills himself. Wild stuff.</p>
<p>Oh and speaking of his brother Theodore III…</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Along with his brother, Kermit, Roosevelt spent most of 1929 on a zoological expedition and was the first Westerner known to have shot a panda.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/14/kermit-roosevelt/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13325</post-id> </item>
<item>
<title>AI is my CMS</title>
<link>https://chriscoyier.net/2026/03/13/ai-is-my-cms/</link>
<comments>https://chriscoyier.net/2026/03/13/ai-is-my-cms/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 13 Mar 2026 15:58:28 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13318</guid>
<description><![CDATA[I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold. AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it […]]]></description>
<content:encoded><![CDATA[
<p>I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold.</p>
<figure class="wp-block-embed is-type-rich is-provider-bluesky-social wp-block-embed-bluesky-social"><div class="wp-block-embed__wrapper">
<blockquote class="bluesky-embed" data-bluesky-uri="at://did:plc:xhhcrzsilpamjmz4dvrpt7df/app.bsky.feed.post/3mgob4lodqs27" data-bluesky-cid="bafyreihmwfy5wpx35xuk7rsw3qzx2iycb7xxyd3gate3oxgt33h5o7g2oy"><p lang="en">Has someone written "AI is my CMS" yet? Feels inevitable. Like why run a build tool when you can just prompt another page?</p>— <a href="https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df?ref_src=embed">Chris Coyier (@chriscoyier.net)</a> <a href="https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df/post/3mgob4lodqs27?ref_src=embed">2026-03-10T01:52:20.536Z</a></blockquote><script async src="https://embed.bsky.app/static/embed.js" charset="utf-8"></script>
</div></figure>
<p>AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it into some templates and an AI doing that same job instead? Isn’t <em>less tooling good?</em></p>
<p>I had missed that this particular topic already had quite a moment in the sun this past December. Lee Robinson wrote <a href="https://leerob.com/agents">Coding Agents & Complexity Budgets</a>. Without calling it out by name, Lee basically had a vibe-coding weekend where he ripped out <a href="https://www.sanity.io/">Sanity</a> from cursor.com. I don’t think Lee is wrong for this choice. Spend some money to save some money. Remove some complexity. Get the code base more AI-ready. Yadda yadda. </p>
<p>Even though Lee didn’t call out Sanity, <a href="https://www.sanity.io/blog/you-should-never-build-a-cms">they noticed and responded</a>. They <em>also</em> make some good and measured points, I think. Which makes this a pretty great blog back-and-forth, by the way, which you love to see. Some of their argument as to why it can be the right choice to have Sanity is that some abstraction and complexity can be good, actually, because building websites from content can be complicated, especially as time and scale march on. And if you rip out a tool that does some of it, only to re-build many of those features in-house, what have you really gained?</p>
<p>TIME FOR MY TWO CENTS.</p>
<p>The language feels a little wrong to me. </p>
<p>I think if you’re working with Markdown-files as content in a Next.js app… that’s already a CMS. You didn’t rip out a CMS, you ripped out <em>a cloud database</em>. Yes, that cloud database does binary assets also, and handles user management, and has screens for CRUDing the content, but to me it’s more of a cloud data store than a CMS. The advantage Lee got was getting the data and assets <em>out</em> of the cloud data store. I don’t think they were using stuff like the fancy <a href="https://www.sanity.io/docs/content-lake/groq-introduction">GROQ</a> language to get at their content in fine-grained ways. It’s just that cursor.com happened to not really <em>need</em> a database, and in fact was using it for things they probably shouldn’t have been (like video hosting). </p>
<p>Me, I don’t think there is one right answer. If keeping content in Markdown files and building sites by smashing those into templates is wrong, then every static site generator ever built is wrong (🙄). But keeping content in databases isn’t wrong either. I tend to lean that way by default, since the power you get from being able to<em> query</em> is so obviously and regularly useful. </p>
<p>Maybe they are both right in that having LLM tools that have the power to wiggleworm their way into the content no matter where it is, is helpful. In the codebase? Fine. In a DB that an MCP can access? Fine.</p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/13/ai-is-my-cms/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13318</post-id> </item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/11/13316/</link>
<comments>https://chriscoyier.net/2026/03/11/13316/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Wed, 11 Mar 2026 14:22:23 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13316</guid>
<description><![CDATA[Jerod Santo: After 13 years, 1042 podcasts, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my final News last Monday and Adam shipped our Friends finale yesterday. Huge congrats Jerod! Heck of a legacy.]]></description>
<content:encoded><![CDATA[
<p><a href="https://jerodsanto.net/2026/03/so-long-changelog/">Jerod Santo</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>After 13 <a href="https://jerodsanto.net/2013/04/changeloggin/">years</a>, 1042 <a href="https://changelog.com/person/jerodsanto">podcasts</a>, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my <a href="https://changelog.com/news/182">final News</a> last Monday and Adam shipped our <a href="https://changelog.com/friends/129">Friends finale</a> yesterday.<br></p>
</blockquote>
<p>Huge congrats Jerod! Heck of a legacy. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/11/13316/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13316</post-id> </item>
<item>
<title>Claude is an Electron App</title>
<link>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/</link>
<comments>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Tue, 10 Mar 2026 18:12:09 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13310</guid>
<description><![CDATA[Juicy intro from Nikita Prokopov:]]></description>
<content:encoded><![CDATA[
<p><a href="https://tonsky.me/blog/fall-of-native/">Juicy intro from Nikita Prokopov</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>In <a href="https://www.dbreunig.com/2026/02/21/why-is-claude-an-electron-app.html" target="_blank" rel="noreferrer noopener">“Why is Claude an Electron App?”</a> Drew Breunig wonders:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Claude spent $20k on an agent swarm implementing (kinda) a C-compiler in Rust, but desktop Claude is an Electron app.</p>
<p>If code is free, why aren’t all apps native?</p>
</blockquote>
<p>And then argues that the answer is that LLMs are not good enough yet. They can do 90% of the work, so there’s still a substantial amount of manual polish, and thus, increased costs.</p>
<p>But I think that’s not the real reason. The real reason is: native has nothing to offer.</p>
</blockquote>
<p></p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13310</post-id> </item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/09/13298/</link>
<comments>https://chriscoyier.net/2026/03/09/13298/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 09 Mar 2026 15:54:38 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13298</guid>
<description><![CDATA[The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs […]]]></description>
<content:encoded><![CDATA[
<p>The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs with unsaved changes in a document (WordPress, CodePen, etc) will prevent the browser from quitting. </p>
<p>I screenshot this because I’d never seen that prompt before and it seems like a nice reminder for macOS to let you know:</p>
<figure class="wp-block-image size-full is-resized"><img data-recalc-dims="1" decoding="async" width="966" height="394" data-attachment-id="13299" data-permalink="https://chriscoyier.net/2026/03/09/13298/screenshot-2026-03-05-at-3-36-56-pm/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1" data-orig-size="966,394" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Screenshot 2026-03-05 at 3.36.56 PM" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=300%2C122&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=966%2C394&ssl=1" alt="Notification on a Mac warning to close apps before a scheduled software update, advising users to save documents and quit open applications." class="wp-image-13299" style="aspect-ratio:2.4518836085013227;width:683px;height:auto" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?w=966&ssl=1 966w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=300%2C122&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=768%2C313&ssl=1 768w" sizes="(max-width: 966px) 100vw, 966px" /></figure>
<p>I’m not going to, ya know, actually do it probably, but I should.</p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/09/13298/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13298</post-id> </item>
<item>
<title>Mad CSS</title>
<link>https://chriscoyier.net/2026/03/06/mad-css/</link>
<comments>https://chriscoyier.net/2026/03/06/mad-css/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 06 Mar 2026 20:25:47 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13295</guid>
<description><![CDATA[Round One of Mad CSS is out on YouTube!]]></description>
<content:encoded><![CDATA[
<p>Round One of <a href="https://www.madcss.com/">Mad CSS</a> is out on YouTube! </p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe title="16 of the Biggest Web Devs Compete with CSS" width="500" height="281" src="https://www.youtube.com/embed/nuxSFTjXrhI?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/06/mad-css/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13295</post-id> </item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/06/13293/</link>
<comments>https://chriscoyier.net/2026/03/06/13293/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Fri, 06 Mar 2026 18:41:04 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13293</guid>
<description><![CDATA[Lars Mensel: … the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.]]></description>
<content:encoded><![CDATA[
<p><a href="https://larsmensel.com/2026/the-clankers-paradox">Lars Mensel</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>… the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/06/13293/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13293</post-id> </item>
<item>
<title>Me Trying To Take a Selfie in 2001</title>
<link>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/</link>
<comments>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Tue, 03 Mar 2026 02:41:12 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13278</guid>
<description><![CDATA[]]></description>
<content:encoded><![CDATA[
<p></p>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13279" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-3/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329014","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.022222222222222","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1" alt="A person taking a selfie in a bathroom mirror, wearing a black shirt and displaying a neutral expression." class="wp-image-13279" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">I photograph a <em>mirror</em> and then, like, <em>I’ll be in the mirror. </em></figcaption></figure>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13280" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-4/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"6.7","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978328824","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.022222222222222","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1" alt="Self-portrait of a man with short hair taking a photo in a mirror, with a bright flash reflecting in the image." class="wp-image-13280" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">Ooops flash on.</figcaption></figure>
<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="768" data-attachment-id="13281" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-5/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1280%2C960&ssl=1" data-orig-size="1280,960" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329114","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.033333333333333","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=300%2C225&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1024%2C768&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1" alt="A man with a shaved head posing in a bathroom with soft lighting." class="wp-image-13281" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?w=1280&ssl=1 1280w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /><figcaption class="wp-element-caption">You’re supposed to stick your neck out, right?</figcaption></figure>
<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="674" height="514" data-attachment-id="13282" data-permalink="https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-6/" data-orig-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1" data-orig-size="674,514" data-comments-opened="1" data-image-meta="{"aperture":"3","credit":"","camera":"DiMAGE S414","caption":"DCF 1.0","created_timestamp":"978329170","copyright":"","focal_length":"7.17578125","iso":"200","shutter_speed":"0.033333333333333","title":"DCF 1.0","orientation":"1"}" data-image-title="DCF 1.0" data-image-description="" data-image-caption="<p>DCF 1.0</p>
" data-medium-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=300%2C229&ssl=1" data-large-file="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1" src="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=674%2C514&ssl=1" alt="A young man with a shaved head standing in front of a bathroom mirror, wearing a black t-shirt." class="wp-image-13282" srcset="https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?w=674&ssl=1 674w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=300%2C229&ssl=1 300w" sizes="auto, (max-width: 674px) 100vw, 674px" /><figcaption class="wp-element-caption">There it is. Ship it, ol’ buddy.</figcaption></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/feed/</wfw:commentRss>
<slash:comments>2</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13278</post-id> </item>
<item>
<title>FOREVERGREEN</title>
<link>https://chriscoyier.net/2026/03/02/forevergreen/</link>
<comments>https://chriscoyier.net/2026/03/02/forevergreen/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 02 Mar 2026 19:05:07 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13266</guid>
<description><![CDATA[In the first few minutes, Ruby says to me, “This is like The Giving Tree“, and by the end, I was like, “OK, you’re right.”]]></description>
<content:encoded><![CDATA[
<p><span style="margin: 0px; padding: 0px;">In the first few minutes, Ruby says to me, “<em>This is like The Giving Tr</em></span><em>ee</em>“, and by the end, I was like, “<em>OK, you’re right</em>.”</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="FOREVERGREEN — Academy Award®–Nominated Animated Short Film | Now Streaming for a Limited Time" width="500" height="281" src="https://www.youtube.com/embed/B4EPW7JUMTM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/forevergreen/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13266</post-id> </item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/03/02/13264/</link>
<comments>https://chriscoyier.net/2026/03/02/13264/#comments</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Mon, 02 Mar 2026 15:26:02 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13264</guid>
<description><![CDATA[I like how Nolan paints this two-sided picture of AI coding. The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months. You could abstain out of moral principle. And that’s fine, especially if you’re at the […]]]></description>
<content:encoded><![CDATA[
<p>I like how <a href="https://nolanlawson.com/2026/02/07/we-mourn-our-craft/">Nolan paints this two-sided picture of AI coding</a>. </p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months.</p>
<p>You could abstain out of moral principle. And that’s fine, especially if you’re at the tail end of your career. And if you’re at the beginning of your career, you don’t need me to explain any of this to you, because you already use Warp and Cursor and Claude, with ChatGPT as your therapist and pair programmer and maybe even your lover. </p>
</blockquote>
<p>For me, it has me thinking: <em>in what ways am I still useful?</em> Like, if the code I write isn’t particularly useful, which is quite the blow as I thought that was kinda my main thing, then what is? </p>
<p>I’m hoping it’s still plenty of stuff, because I have lots of career left. I hope I’m useful because I can plan, I can be responsible, I can communicate, I can prioritize, and I can dream. Hopefully, I can turn that into a job for a long time. </p>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/03/02/13264/feed/</wfw:commentRss>
<slash:comments>1</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13264</post-id> </item>
<item>
<title></title>
<link>https://chriscoyier.net/2026/02/28/13262/</link>
<comments>https://chriscoyier.net/2026/02/28/13262/#respond</comments>
<dc:creator><![CDATA[Chris Coyier]]></dc:creator>
<pubDate>Sat, 28 Feb 2026 16:24:35 +0000</pubDate>
<category><![CDATA[Uncategorized]]></category>
<guid isPermaLink="false">https://chriscoyier.net/?p=13262</guid>
<description><![CDATA[Cool little aside in Marcin Wichary’s How to shoot a screen using a board of keys: Acorn 8, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can […]]]></description>
<content:encoded><![CDATA[
<p>Cool little aside in Marcin Wichary’s <a href="https://unsung.aresluna.org/how-to-shoot-a-screen-using-a-board-of-keys/">How to shoot a screen using a board of keys</a>:</p>
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><a href="https://flyingmeat.com/acorn/" target="_blank" rel="noreferrer noopener">Acorn 8</a>, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can re-compose stuff afterwards, reveal covered stuff, remove windows, even change the wallpaper. A mouse cursor arrives too in its own tiny layer, like a cherry on top.</p>
</blockquote>
]]></content:encoded>
<wfw:commentRss>https://chriscoyier.net/2026/02/28/13262/feed/</wfw:commentRss>
<slash:comments>0</slash:comments>
<post-id xmlns="com-wordpress:feed-additions:1">13262</post-id> </item>
</channel>
</rss>
{
"alt-svc": "h3=\":443\"; ma=86400",
"cache-control": "max-age=300, must-revalidate",
"cf-cache-status": "DYNAMIC",
"cf-ray": "9dff6eb7da895751-CMH",
"content-type": "application/rss+xml; charset=UTF-8",
"date": "Sat, 21 Mar 2026 19:41:09 GMT",
"etag": "W/\"552755a9948c20a6442b6e00896b2770\"",
"host-header": "wpcloud",
"last-modified": "Wed, 18 Mar 2026 15:47:29 GMT",
"link": "<https://chriscoyier.net/wp-json/>; rel=\"https://api.w.org/\"",
"server": "cloudflare",
"server-timing": "a8c-cdn, dc;desc=jfk, cache;desc=HIT;dur=2.0",
"strict-transport-security": "max-age=31536000",
"transfer-encoding": "chunked",
"vary": "Accept-Encoding, Cookie",
"x-ac": "32.jfk _atomic_dca HIT",
"x-nananana": "Batcache-Set"
}
{
"meta": {
"type": "rss",
"version": "2.0"
},
"language": "en-US",
"title": "Chris Coyier",
"description": "Web craftsman, blogger, author, speaker.",
"copyright": null,
"url": "https://chriscoyier.net",
"self": "https://chriscoyier.net/feed/",
"published": null,
"updated": "2026-03-18T15:47:29.000Z",
"generator": null,
"image": {
"title": "Chris Coyier",
"url": "https://i0.wp.com/chriscoyier.net/wp-content/uploads/2021/07/IsUISvAq_400x400.jpg?fit=32%2C32&ssl=1"
},
"authors": [],
"categories": [],
"items": [
{
"id": "https://chriscoyier.net/?p=13312",
"title": "Meets Style Sheets",
"description": "I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s free on Wednesday, May 6th. I named my talk In-N-Out Styling. Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with […]",
"url": "https://chriscoyier.net/2026/03/18/meets-style-sheets/",
"published": "2026-03-18T15:47:28.000Z",
"updated": "2026-03-18T15:47:28.000Z",
"content": "<p>I’ve accepted an invitation to speak at Smashing’s (Online) Conference Meets Style Sheets. It’s <strong>free</strong> on Wednesday, May 6th.</p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https://smashingconf.com/meets-style-sheets\"><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"576\" data-attachment-id=\"13313\" data-permalink=\"https://chriscoyier.net/2026/03/18/meets-style-sheets/style_sheets_banner/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1401%2C788&ssl=1\" data-orig-size=\"1401,788\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}\" data-image-title=\"style_sheets_banner\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=300%2C169&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?fit=1024%2C576&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1\" alt=\"Promotional graphic for a virtual event titled 'Style Sheets' featuring coding elements, date and time details.\" class=\"wp-image-13313\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=1024%2C576&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=300%2C169&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?resize=768%2C432&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/style_sheets_banner.png?w=1401&ssl=1 1401w\" sizes=\"(max-width: 1000px) 100vw, 1000px\" /></a></figure>\n\n\n\n<p>I named my talk <strong>In-N-Out Styling</strong>.</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Long time CSS evangelist Chris Coyier will talk about how you can style things on their way into view on a webpage, and on their way out. Of course, with Chris being Chris, there will be plenty of things which are food for discussion, as well as plenty of practical take-aways as well.</p>\n</blockquote>\n\n\n\n<p>I’ve been preparing for it. I’ve got like 35 minutes or so, and the concept of modern “entry” and “exit” styles is <em>plenty</em> for that time. It’s kinda complicated in my opinion, involving multiple ways of doing things, modern syntax with weird names, and specificity footguns. I think we can all come out of it with an understanding of what’s possible. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13325",
"title": "Kermit Roosevelt",
"description": "I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and […]",
"url": "https://chriscoyier.net/2026/03/14/kermit-roosevelt/",
"published": "2026-03-14T17:08:04.000Z",
"updated": "2026-03-14T17:08:04.000Z",
"content": "<p>I was at a school function the other day where the 2nd graders performed a bunch of Aesop’s Fabels and it was great. </p>\n\n\n\n<p>It was a double-header with 3rd graders who then read prepared reports on famous people. It was cross-disciplinary thing as the kids brought props from design class, costumes from performing arts, and did the speech both in Spanish and English. </p>\n\n\n\n<p>It was cute. A lot of astronauts and artists and stuff. </p>\n\n\n\n<p>One kid did Theodore Roosevelt. </p>\n\n\n\n<p>I’m not a smart man, and I just had no idea <a href=\"https://en.wikipedia.org/wiki/Attempted_assassination_of_Theodore_Roosevelt\">this happened</a>. </p>\n\n\n\n<p>1912. He’s giving a speech in my old stomping grounds, Milwaukee, Wisconsin. Dude friggin shoots him in the chest. The bullet goes through a thick, folded-up bit of paper in his pocket, but then still into his body. Then he’s like <em>“I’m good”</em> and continues his speech for <em>an hour.</em> He recoups a couple of weeks but they <em>leave the bullet in his body</em> and didn’t seem to care.</p>\n\n\n\n<p>Kind of a badass. No wonder he leaned into the “Bull Moose” thing.</p>\n\n\n\n<p>Then the kid is like,<em> and he had five kids, yadda, yadda, <strong>Kermit</strong>, yadda, yadda.</em></p>\n\n\n\n<p>I was like LOL, he named <a href=\"https://america250.org/news/theodore-roosevelts-children/\">one of his kids </a>Kermit. Turns out all of his kids led fascinating lives too! Kermit was an unhealthy kid, but ultimately went to Harvard and then did a bunch of literal jungle exploration with his dad (?!) and later Asia with his brother.</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>… he postponed his marriage to join his father on a dangerous journey to the River of Doubt in Brazil. Both he and his father nearly died during this trip through the jungle.</p>\n</blockquote>\n\n\n\n<p>He fought in <em>both</em> World Wars, deciding to go to England and join the British Army to fight for them. Apparently, you can just do that? War breaks out, and you can just pick one of the countries and go there and fight for that side? WTF? He doesn’t make it all the way through WWII because of the health stuff, so they stick him up in Alaska, and he kills himself. Wild stuff.</p>\n\n\n\n<p>Oh and speaking of his brother Theodore III…</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Along with his brother, Kermit, Roosevelt spent most of 1929 on a zoological expedition and was the first Westerner known to have shot a panda.</p>\n</blockquote>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13318",
"title": "AI is my CMS",
"description": "I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold. AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it […]",
"url": "https://chriscoyier.net/2026/03/13/ai-is-my-cms/",
"published": "2026-03-13T15:58:28.000Z",
"updated": "2026-03-13T15:58:28.000Z",
"content": "<p>I mean… it’s not really, of course. I just thought such a thing would start to trickle out to people’s minds as agentic workflows start to take hold.</p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-bluesky-social wp-block-embed-bluesky-social\"><div class=\"wp-block-embed__wrapper\">\n<blockquote class=\"bluesky-embed\" data-bluesky-uri=\"at://did:plc:xhhcrzsilpamjmz4dvrpt7df/app.bsky.feed.post/3mgob4lodqs27\" data-bluesky-cid=\"bafyreihmwfy5wpx35xuk7rsw3qzx2iycb7xxyd3gate3oxgt33h5o7g2oy\"><p lang=\"en\">Has someone written \"AI is my CMS\" yet? Feels inevitable. Like why run a build tool when you can just prompt another page?</p>— <a href=\"https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df?ref_src=embed\">Chris Coyier (@chriscoyier.net)</a> <a href=\"https://bsky.app/profile/did:plc:xhhcrzsilpamjmz4dvrpt7df/post/3mgob4lodqs27?ref_src=embed\">2026-03-10T01:52:20.536Z</a></blockquote><script async src=\"https://embed.bsky.app/static/embed.js\" charset=\"utf-8\"></script>\n</div></figure>\n\n\n\n<p>AI agents are already up in your codebase fingerbanging whole batches of files on command. What’s the difference between a CMS taking some content and smashing it into some templates and an AI doing that same job instead? Isn’t <em>less tooling good?</em></p>\n\n\n\n<p>I had missed that this particular topic already had quite a moment in the sun this past December. Lee Robinson wrote <a href=\"https://leerob.com/agents\">Coding Agents & Complexity Budgets</a>. Without calling it out by name, Lee basically had a vibe-coding weekend where he ripped out <a href=\"https://www.sanity.io/\">Sanity</a> from cursor.com. I don’t think Lee is wrong for this choice. Spend some money to save some money. Remove some complexity. Get the code base more AI-ready. Yadda yadda. </p>\n\n\n\n<p>Even though Lee didn’t call out Sanity, <a href=\"https://www.sanity.io/blog/you-should-never-build-a-cms\">they noticed and responded</a>. They <em>also</em> make some good and measured points, I think. Which makes this a pretty great blog back-and-forth, by the way, which you love to see. Some of their argument as to why it can be the right choice to have Sanity is that some abstraction and complexity can be good, actually, because building websites from content can be complicated, especially as time and scale march on. And if you rip out a tool that does some of it, only to re-build many of those features in-house, what have you really gained?</p>\n\n\n\n<p>TIME FOR MY TWO CENTS.</p>\n\n\n\n<p>The language feels a little wrong to me. </p>\n\n\n\n<p>I think if you’re working with Markdown-files as content in a Next.js app… that’s already a CMS. You didn’t rip out a CMS, you ripped out <em>a cloud database</em>. Yes, that cloud database does binary assets also, and handles user management, and has screens for CRUDing the content, but to me it’s more of a cloud data store than a CMS. The advantage Lee got was getting the data and assets <em>out</em> of the cloud data store. I don’t think they were using stuff like the fancy <a href=\"https://www.sanity.io/docs/content-lake/groq-introduction\">GROQ</a> language to get at their content in fine-grained ways. It’s just that cursor.com happened to not really <em>need</em> a database, and in fact was using it for things they probably shouldn’t have been (like video hosting). </p>\n\n\n\n<p>Me, I don’t think there is one right answer. If keeping content in Markdown files and building sites by smashing those into templates is wrong, then every static site generator ever built is wrong (🙄). But keeping content in databases isn’t wrong either. I tend to lean that way by default, since the power you get from being able to<em> query</em> is so obviously and regularly useful. </p>\n\n\n\n<p>Maybe they are both right in that having LLM tools that have the power to wiggleworm their way into the content no matter where it is, is helpful. In the codebase? Fine. In a DB that an MCP can access? Fine.</p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13316",
"title": null,
"description": "Jerod Santo: After 13 years, 1042 podcasts, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my final News last Monday and Adam shipped our Friends finale yesterday. Huge congrats Jerod! Heck of a legacy.",
"url": "https://chriscoyier.net/2026/03/11/13316/",
"published": "2026-03-11T14:22:23.000Z",
"updated": "2026-03-11T14:22:23.000Z",
"content": "<p><a href=\"https://jerodsanto.net/2026/03/so-long-changelog/\">Jerod Santo</a>:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>After 13 <a href=\"https://jerodsanto.net/2013/04/changeloggin/\">years</a>, 1042 <a href=\"https://changelog.com/person/jerodsanto\">podcasts</a>, 452 newsletters, and countless friends made along the way… it’s time to say goodbye to The Changelog. I shipped my <a href=\"https://changelog.com/news/182\">final News</a> last Monday and Adam shipped our <a href=\"https://changelog.com/friends/129\">Friends finale</a> yesterday.<br></p>\n</blockquote>\n\n\n\n<p>Huge congrats Jerod! Heck of a legacy. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13310",
"title": "Claude is an Electron App",
"description": "Juicy intro from Nikita Prokopov:",
"url": "https://chriscoyier.net/2026/03/10/claude-is-an-electron-app/",
"published": "2026-03-10T18:12:09.000Z",
"updated": "2026-03-10T18:12:09.000Z",
"content": "<p><a href=\"https://tonsky.me/blog/fall-of-native/\">Juicy intro from Nikita Prokopov</a>:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>In <a href=\"https://www.dbreunig.com/2026/02/21/why-is-claude-an-electron-app.html\" target=\"_blank\" rel=\"noreferrer noopener\">“Why is Claude an Electron App?”</a> Drew Breunig wonders:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Claude spent $20k on an agent swarm implementing (kinda) a C-compiler in Rust, but desktop Claude is an Electron app.</p>\n\n\n\n<p>If code is free, why aren’t all apps native?</p>\n</blockquote>\n\n\n\n<p>And then argues that the answer is that LLMs are not good enough yet. They can do 90% of the work, so there’s still a substantial amount of manual polish, and thus, increased costs.</p>\n\n\n\n<p>But I think that’s not the real reason. The real reason is: native has nothing to offer.</p>\n</blockquote>\n\n\n\n<p></p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13298",
"title": null,
"description": "The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs […]",
"url": "https://chriscoyier.net/2026/03/09/13298/",
"published": "2026-03-09T15:54:38.000Z",
"updated": "2026-03-09T15:54:38.000Z",
"content": "<p>The chances of macOS actually running an automatic update on my machines is super low. Even if I OK the “Update Tonight?” prompt, there is no way it actually goes through, because I’ll have apps open that prevent the restart. iTerm is a big one, that one won’t just quit on command. But even tabs with unsaved changes in a document (WordPress, CodePen, etc) will prevent the browser from quitting. </p>\n\n\n\n<p>I screenshot this because I’d never seen that prompt before and it seems like a nice reminder for macOS to let you know:</p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" width=\"966\" height=\"394\" data-attachment-id=\"13299\" data-permalink=\"https://chriscoyier.net/2026/03/09/13298/screenshot-2026-03-05-at-3-36-56-pm/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1\" data-orig-size=\"966,394\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"0\",\"credit\":\"\",\"camera\":\"\",\"caption\":\"\",\"created_timestamp\":\"0\",\"copyright\":\"\",\"focal_length\":\"0\",\"iso\":\"0\",\"shutter_speed\":\"0\",\"title\":\"\",\"orientation\":\"0\"}\" data-image-title=\"Screenshot 2026-03-05 at 3.36.56 PM\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=300%2C122&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?fit=966%2C394&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=966%2C394&ssl=1\" alt=\"Notification on a Mac warning to close apps before a scheduled software update, advising users to save documents and quit open applications.\" class=\"wp-image-13299\" style=\"aspect-ratio:2.4518836085013227;width:683px;height:auto\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?w=966&ssl=1 966w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=300%2C122&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/Screenshot-2026-03-05-at-3.36.56-PM.png?resize=768%2C313&ssl=1 768w\" sizes=\"(max-width: 966px) 100vw, 966px\" /></figure>\n\n\n\n<p>I’m not going to, ya know, actually do it probably, but I should.</p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13295",
"title": "Mad CSS",
"description": "Round One of Mad CSS is out on YouTube!",
"url": "https://chriscoyier.net/2026/03/06/mad-css/",
"published": "2026-03-06T20:25:47.000Z",
"updated": "2026-03-06T20:25:47.000Z",
"content": "<p>Round One of <a href=\"https://www.madcss.com/\">Mad CSS</a> is out on YouTube! </p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe title=\"16 of the Biggest Web Devs Compete with CSS\" width=\"500\" height=\"281\" src=\"https://www.youtube.com/embed/nuxSFTjXrhI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div></figure>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13293",
"title": null,
"description": "Lars Mensel: … the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.",
"url": "https://chriscoyier.net/2026/03/06/13293/",
"published": "2026-03-06T18:41:04.000Z",
"updated": "2026-03-06T18:41:04.000Z",
"content": "<p><a href=\"https://larsmensel.com/2026/the-clankers-paradox\">Lars Mensel</a>:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>… the only way out of the delusion that AI can replace all of us is to do good meaningful work, and to appreciate good work when we see it.</p>\n</blockquote>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13278",
"title": "Me Trying To Take a Selfie in 2001",
"description": null,
"url": "https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/",
"published": "2026-03-03T02:41:12.000Z",
"updated": "2026-03-03T02:41:12.000Z",
"content": "<p></p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-attachment-id=\"13279\" data-permalink=\"https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-3/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1280%2C960&ssl=1\" data-orig-size=\"1280,960\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"3\",\"credit\":\"\",\"camera\":\"DiMAGE S414\",\"caption\":\"DCF 1.0\",\"created_timestamp\":\"978329014\",\"copyright\":\"\",\"focal_length\":\"7.17578125\",\"iso\":\"200\",\"shutter_speed\":\"0.022222222222222\",\"title\":\"DCF 1.0\",\"orientation\":\"1\"}\" data-image-title=\"DCF 1.0\" data-image-description=\"\" data-image-caption=\"<p>DCF 1.0</p>\n\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=300%2C225&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?fit=1024%2C768&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1\" alt=\"A person taking a selfie in a bathroom mirror, wearing a black shirt and displaying a neutral expression.\" class=\"wp-image-13279\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0113.jpg?w=1280&ssl=1 1280w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" /><figcaption class=\"wp-element-caption\">I photograph a <em>mirror</em> and then, like, <em>I’ll be in the mirror. </em></figcaption></figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-attachment-id=\"13280\" data-permalink=\"https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-4/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1280%2C960&ssl=1\" data-orig-size=\"1280,960\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"6.7\",\"credit\":\"\",\"camera\":\"DiMAGE S414\",\"caption\":\"DCF 1.0\",\"created_timestamp\":\"978328824\",\"copyright\":\"\",\"focal_length\":\"7.17578125\",\"iso\":\"200\",\"shutter_speed\":\"0.022222222222222\",\"title\":\"DCF 1.0\",\"orientation\":\"1\"}\" data-image-title=\"DCF 1.0\" data-image-description=\"\" data-image-caption=\"<p>DCF 1.0</p>\n\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=300%2C225&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?fit=1024%2C768&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1\" alt=\"Self-portrait of a man with short hair taking a photo in a mirror, with a bright flash reflecting in the image.\" class=\"wp-image-13280\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0109.jpg?w=1280&ssl=1 1280w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" /><figcaption class=\"wp-element-caption\">Ooops flash on.</figcaption></figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-attachment-id=\"13281\" data-permalink=\"https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-5/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1280%2C960&ssl=1\" data-orig-size=\"1280,960\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"3\",\"credit\":\"\",\"camera\":\"DiMAGE S414\",\"caption\":\"DCF 1.0\",\"created_timestamp\":\"978329114\",\"copyright\":\"\",\"focal_length\":\"7.17578125\",\"iso\":\"200\",\"shutter_speed\":\"0.033333333333333\",\"title\":\"DCF 1.0\",\"orientation\":\"1\"}\" data-image-title=\"DCF 1.0\" data-image-description=\"\" data-image-caption=\"<p>DCF 1.0</p>\n\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=300%2C225&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?fit=1024%2C768&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1\" alt=\"A man with a shaved head posing in a bathroom with soft lighting.\" class=\"wp-image-13281\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=1024%2C768&ssl=1 1024w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=300%2C225&ssl=1 300w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?resize=768%2C576&ssl=1 768w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0117.jpg?w=1280&ssl=1 1280w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" /><figcaption class=\"wp-element-caption\">You’re supposed to stick your neck out, right?</figcaption></figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"674\" height=\"514\" data-attachment-id=\"13282\" data-permalink=\"https://chriscoyier.net/2026/03/02/me-trying-to-take-a-selfie-in-2001/dcf-1-0-6/\" data-orig-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1\" data-orig-size=\"674,514\" data-comments-opened=\"1\" data-image-meta=\"{\"aperture\":\"3\",\"credit\":\"\",\"camera\":\"DiMAGE S414\",\"caption\":\"DCF 1.0\",\"created_timestamp\":\"978329170\",\"copyright\":\"\",\"focal_length\":\"7.17578125\",\"iso\":\"200\",\"shutter_speed\":\"0.033333333333333\",\"title\":\"DCF 1.0\",\"orientation\":\"1\"}\" data-image-title=\"DCF 1.0\" data-image-description=\"\" data-image-caption=\"<p>DCF 1.0</p>\n\" data-medium-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=300%2C229&ssl=1\" data-large-file=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?fit=674%2C514&ssl=1\" src=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=674%2C514&ssl=1\" alt=\"A young man with a shaved head standing in front of a bathroom mirror, wearing a black t-shirt.\" class=\"wp-image-13282\" srcset=\"https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?w=674&ssl=1 674w, https://i0.wp.com/chriscoyier.net/wp-content/uploads/2026/03/PICT0119.jpg?resize=300%2C229&ssl=1 300w\" sizes=\"auto, (max-width: 674px) 100vw, 674px\" /><figcaption class=\"wp-element-caption\">There it is. Ship it, ol’ buddy.</figcaption></figure>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13266",
"title": "FOREVERGREEN",
"description": "In the first few minutes, Ruby says to me, “This is like The Giving Tree“, and by the end, I was like, “OK, you’re right.”",
"url": "https://chriscoyier.net/2026/03/02/forevergreen/",
"published": "2026-03-02T19:05:07.000Z",
"updated": "2026-03-02T19:05:07.000Z",
"content": "<p><span style=\"margin: 0px; padding: 0px;\">In the first few minutes, Ruby says to me, “<em>This is like The Giving Tr</em></span><em>ee</em>“, and by the end, I was like, “<em>OK, you’re right</em>.”</p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"FOREVERGREEN — Academy Award®–Nominated Animated Short Film | Now Streaming for a Limited Time\" width=\"500\" height=\"281\" src=\"https://www.youtube.com/embed/B4EPW7JUMTM?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen></iframe>\n</div></figure>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13264",
"title": null,
"description": "I like how Nolan paints this two-sided picture of AI coding. The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months. You could abstain out of moral principle. And that’s fine, especially if you’re at the […]",
"url": "https://chriscoyier.net/2026/03/02/13264/",
"published": "2026-03-02T15:26:02.000Z",
"updated": "2026-03-02T15:26:02.000Z",
"content": "<p>I like how <a href=\"https://nolanlawson.com/2026/02/07/we-mourn-our-craft/\">Nolan paints this two-sided picture of AI coding</a>. </p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>The worst fact about these tools is that they work. They can write code better than you or I can, and if you don’t believe me, wait six months.</p>\n\n\n\n<p>You could abstain out of moral principle. And that’s fine, especially if you’re at the tail end of your career. And if you’re at the beginning of your career, you don’t need me to explain any of this to you, because you already use Warp and Cursor and Claude, with ChatGPT as your therapist and pair programmer and maybe even your lover. </p>\n</blockquote>\n\n\n\n<p>For me, it has me thinking: <em>in what ways am I still useful?</em> Like, if the code I write isn’t particularly useful, which is quite the blow as I thought that was kinda my main thing, then what is? </p>\n\n\n\n<p>I’m hoping it’s still plenty of stuff, because I have lots of career left. I hope I’m useful because I can plan, I can be responsible, I can communicate, I can prioritize, and I can dream. Hopefully, I can turn that into a job for a long time. </p>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
},
{
"id": "https://chriscoyier.net/?p=13262",
"title": null,
"description": "Cool little aside in Marcin Wichary’s How to shoot a screen using a board of keys: Acorn 8, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can […]",
"url": "https://chriscoyier.net/2026/02/28/13262/",
"published": "2026-02-28T16:24:35.000Z",
"updated": "2026-02-28T16:24:35.000Z",
"content": "<p>Cool little aside in Marcin Wichary’s <a href=\"https://unsung.aresluna.org/how-to-shoot-a-screen-using-a-board-of-keys/\">How to shoot a screen using a board of keys</a>:</p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><a href=\"https://flyingmeat.com/acorn/\" target=\"_blank\" rel=\"noreferrer noopener\">Acorn 8</a>, a graphic app, has a delightful screenshotting feature parked under ⌘⇧7 that does something incredible: it takes a screenshot, but does so in a way where windows are separate layers, grouped by app. It’s amazing; you can re-compose stuff afterwards, reveal covered stuff, remove windows, even change the wallpaper. A mouse cursor arrives too in its own tiny layer, like a cherry on top.</p>\n</blockquote>",
"image": null,
"media": [],
"authors": [
{
"name": "Chris Coyier",
"email": null,
"url": null
}
],
"categories": [
{
"label": "Uncategorized",
"term": "Uncategorized",
"url": null
}
]
}
]
}