<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>2026-09-20 on jwogrady</title>
		<link>https://www.jwogrady.com/archives/2026-09-20/</link>
		<description>Recent content in 2026-09-20 on jwogrady</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Sun, 20 Sep 2026 19:20:00 -0500</lastBuildDate>
		
			<atom:link href="https://www.jwogrady.com/archives/2026-09-20/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>It was the keys. It was always the keys.</title>
				<link>https://www.jwogrady.com/posts/the-keys-are-the-work/</link>
				<pubDate>Sun, 20 Sep 2026 19:20:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/the-keys-are-the-work/</guid>
				<description>&lt;p&gt;Last week I spent four days sorting out how we store client passwords and API&#xA;keys. Four days. On &lt;em&gt;password management&lt;/em&gt; — the single least glamorous thing&#xA;on the board, the kind of task you&amp;rsquo;d hand to whoever joined most recently.&lt;/p&gt;&#xA;&lt;p&gt;Best time I&amp;rsquo;ve spent this year, and it isn&amp;rsquo;t close.&lt;/p&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s why, and I&amp;rsquo;m going to spell it out because it took me an embarrassing&#xA;number of years to see it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A screenshot tool for a machine with no screenshot tool</title>
				<link>https://www.jwogrady.com/posts/screenshots-that-fit/</link>
				<pubDate>Sun, 20 Sep 2026 18:58:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/screenshots-that-fit/</guid>
				<description>&lt;p&gt;Sixteen entries in and not one of them has shown anything. Every finding today&#xA;has been &lt;em&gt;described&lt;/em&gt; — a byte count, a directory listing, a config block&#xA;retyped into a fenced code block. That&amp;rsquo;s fine for a number and useless for a&#xA;layout, and it means I&amp;rsquo;ve been asking the reader to trust the retyping.&lt;/p&gt;&#xA;&lt;p&gt;So I went looking for a screenshot tool and found that this box doesn&amp;rsquo;t have&#xA;one. Not chromium, not playwright, not imagemagick, not scrot, not even&#xA;Pillow. WSL here is a compiler and a text editor&amp;rsquo;s remote end, and nothing&#xA;else.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Two config directories, and I would have edited the wrong one</title>
				<link>https://www.jwogrady.com/posts/zed-config-is-windows-side/</link>
				<pubDate>Sun, 20 Sep 2026 18:52:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/zed-config-is-windows-side/</guid>
				<description>&lt;p&gt;I sat down to add the editor settings I&amp;rsquo;d written up in JRN 26-008 and found&#xA;&lt;code&gt;~/.config/zed/&lt;/code&gt; sitting there — existing, correctly named, and completely&#xA;empty.&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://www.jwogrady.com/posts/zed-config-is-windows-side/two-config-directories.png&#34; width=&#34;1000&#34; height=&#34;459&#34;&#xA;       alt=&#34;Terminal output: zero files in ~/.config/zed, while the Windows AppData Zed folder holds settings.json, snippets and themes, and five installed extensions.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;  &lt;figcaption&gt;Zero files on the Linux side. Everything on the Windows side.&lt;span class=&#34;credit&#34;&gt;Screenshot&lt;/span&gt;&#xA;  &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;Zero files. Meanwhile &lt;code&gt;AppData/Roaming/Zed/&lt;/code&gt; has the &lt;code&gt;settings.json&lt;/code&gt; I&amp;rsquo;ve&#xA;apparently been editing all along, and &lt;code&gt;AppData/Local/Zed/extensions/installed&lt;/code&gt;&#xA;has five extensions I don&amp;rsquo;t remember installing individually.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The feature I chose the theme for does not work on one post</title>
				<link>https://www.jwogrady.com/posts/colour-needs-repetition/</link>
				<pubDate>Sun, 20 Sep 2026 16:57:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/colour-needs-repetition/</guid>
				<description>&lt;p&gt;The index colours every subject by how often it&amp;rsquo;s used, so a table of fifty&#xA;entries is legible as a field before you&amp;rsquo;ve read a word of it. That&amp;rsquo;s why I&#xA;picked this theme.&lt;/p&gt;&#xA;&lt;p&gt;With one post and three tags it rendered flat grey, and I assumed I&amp;rsquo;d&#xA;misconfigured something.&lt;/p&gt;&#xA;&lt;p&gt;I hadn&amp;rsquo;t. Reading the partial explained it in about four lines:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go-html-template&#34; data-lang=&#34;go-html-template&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$counts&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;slice&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;   &lt;span style=&#34;color:#75715e&#34;&gt;{{/* distinct counts, ascending */}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$bands&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;len&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$counts&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$hue&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;div&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mul&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;mul&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;2&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;.0&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$span&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;float&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$b&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;))&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;float&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$bands&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One band per &lt;strong&gt;distinct count&lt;/strong&gt; — not per tag. Hue is the band&amp;rsquo;s index spread&#xA;around the wheel, and the top band goes white. Three tags used once each is&#xA;&lt;em&gt;one&lt;/em&gt; band: one hue, and it&amp;rsquo;s the apex, so it&amp;rsquo;s white. Nothing was broken.&#xA;There was simply nothing to distinguish.&lt;/p&gt;</description>
			</item>
			<item>
				<title>1,784,655 bytes to 36,616, by moving one file</title>
				<link>https://www.jwogrady.com/posts/one-point-seven-megabytes/</link>
				<pubDate>Sun, 20 Sep 2026 16:53:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/one-point-seven-megabytes/</guid>
				<description>&lt;p&gt;The desktop screenshot is 6664 × 2168 and 1.74 MB. It was being served at full&#xA;size into a column about 672px wide. Every byte past that width was downloaded&#xA;and thrown away.&lt;/p&gt;&#xA;&lt;p&gt;What surprised me is that the fix isn&amp;rsquo;t a setting. It&amp;rsquo;s &lt;em&gt;where the file lives&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;From this:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;content/posts/first-try.md&#xA;assets/my-virtual-desktop-setup.png&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;to this:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;content/posts/first-try/index.md&#xA;content/posts/first-try/my-virtual-desktop-setup.png&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That&amp;rsquo;s a &lt;strong&gt;page bundle&lt;/strong&gt;, and inside one the image stops being a loose asset&#xA;and becomes a &lt;em&gt;page resource&lt;/em&gt; — reachable via &lt;code&gt;.Page.Resources.Get&lt;/code&gt;, carrying&#xA;its own front matter for alt text and caption and credit, and eligible for&#xA;&lt;code&gt;.Resize&lt;/code&gt;. The theme&amp;rsquo;s figure partial then does what it already does for its&#xA;own images: anything over 1400px wide gets resized and converted to WebP at&#xA;q82.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A page can render perfectly and exist nowhere</title>
				<link>https://www.jwogrady.com/posts/journal-is-a-string-match/</link>
				<pubDate>Sun, 20 Sep 2026 16:49:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/journal-is-a-string-match/</guid>
				<description>&lt;p&gt;The post rendered. Right title, right date, theme styling, HTTP 200. And it&#xA;appeared in no index anywhere on the site.&lt;/p&gt;&#xA;&lt;p&gt;The theme&amp;rsquo;s home template, in full:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-go-html-template&#34; data-lang=&#34;go-html-template&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;{{&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$posts&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;where&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;site&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;.RegularPages&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Section&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;posts&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;}}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;An exact string match on the section. My file was at &lt;code&gt;content/first-try.md&lt;/code&gt; —&#xA;root section, empty string, filtered out. Moving it into &lt;code&gt;content/posts/&lt;/code&gt;&#xA;fixed it in one &lt;code&gt;git mv&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Then I hit the same shape of thing one level down. The date index is built&#xA;from an &lt;code&gt;archives&lt;/code&gt; taxonomy, and &lt;strong&gt;not&lt;/strong&gt; from the &lt;code&gt;date&lt;/code&gt; field:&lt;/p&gt;</description>
			</item>
			<item>
				<title>A theme that refuses to build, and why I came around to it</title>
				<link>https://www.jwogrady.com/posts/theme-that-refuses/</link>
				<pubDate>Sun, 20 Sep 2026 16:46:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/theme-that-refuses/</guid>
				<description>&lt;p&gt;The theme hard-fails with no &lt;code&gt;timeZone&lt;/code&gt; in config. Not a warning — a failed&#xA;build, on a line I hadn&amp;rsquo;t written yet.&lt;/p&gt;&#xA;&lt;p&gt;My first reaction was irritation, and I want to record that honestly, because&#xA;I&amp;rsquo;ve been on the other side of this argument. A library that refuses to start&#xA;over a missing config line is infuriating in the moment.&lt;/p&gt;&#xA;&lt;p&gt;Then I worked out what it&amp;rsquo;s preventing. Unset, Hugo uses the build machine&amp;rsquo;s&#xA;zone. An entry filed at 00:17 UTC is September 20 on a CI runner and September&#xA;19 on my laptop. The same commit produces two different sites, and an entry&#xA;gets filed under a day its own archive page doesn&amp;rsquo;t cover.&lt;/p&gt;</description>
			</item>
			<item>
				<title>I installed the theme and the theme did not appear</title>
				<link>https://www.jwogrady.com/posts/project-layouts-shadow-theme/</link>
				<pubDate>Sun, 20 Sep 2026 16:42:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/project-layouts-shadow-theme/</guid>
				<description>&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ git submodule add https://github.com/jwogrady/hugo-spectrum themes/hugo-spectrum&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Submodule rather than Hugo Modules, because Modules wants a &lt;code&gt;go.mod&lt;/code&gt; and this&#xA;theme doesn&amp;rsquo;t ship one. The submodule pins a commit, which means a checkout a&#xA;year from now builds the same site as today. I like that property a lot.&lt;/p&gt;&#xA;&lt;p&gt;Then I rebuilt and got my own handmade templates back.&lt;/p&gt;&#xA;&lt;p&gt;The scaffold &lt;code&gt;baseof.html&lt;/code&gt; and &lt;code&gt;page.html&lt;/code&gt; I&amp;rsquo;d written an hour earlier were&#xA;still sitting in &lt;code&gt;layouts/&lt;/code&gt;, and &lt;strong&gt;a project file at the same path beats the&#xA;theme&amp;rsquo;s entirely.&lt;/strong&gt; Not merged, not layered — replaced. Five files were&#xA;quietly overriding a theme I&amp;rsquo;d just installed, and the build was perfectly&#xA;happy about it.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Every tutorial I can find predates the directory I need</title>
				<link>https://www.jwogrady.com/posts/layouts-moved/</link>
				<pubDate>Sun, 20 Sep 2026 16:38:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/layouts-moved/</guid>
				<description>&lt;p&gt;Almost every Hugo tutorial says to put templates in &lt;code&gt;layouts/_default/&lt;/code&gt;.&#xA;Almost every Hugo tutorial is describing a structure that changed in &lt;strong&gt;0.146&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Tutorials say&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Actually&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/_default/baseof.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/baseof.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/_default/single.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/page.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/_default/list.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/list.html&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/partials/&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;&lt;code&gt;layouts/_partials/&lt;/code&gt;&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s what makes this genuinely nasty rather than merely annoying:&#xA;&lt;code&gt;_default/&lt;/code&gt; still works. Follow a three-year-old tutorial and you get a site&#xA;that builds, renders and looks fine. Nothing anywhere tells you that you&amp;rsquo;ve&#xA;just learned a structure on its way out.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Four editor defaults that are right for code and wrong for prose</title>
				<link>https://www.jwogrady.com/posts/zed-for-prose/</link>
				<pubDate>Sun, 20 Sep 2026 16:33:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/zed-for-prose/</guid>
				<description>&lt;p&gt;Zed&amp;rsquo;s defaults are tuned for code, which is the right call and leaves four of&#xA;them wrong for what I&amp;rsquo;m actually doing in here.&lt;/p&gt;&#xA;&lt;p&gt;Autosave, for reasons recorded an entry ago and not worth reliving.&lt;/p&gt;&#xA;&lt;p&gt;Soft wrap to &lt;code&gt;editor_width&lt;/code&gt; — markdown has no line length, and a horizontal&#xA;scrollbar inside a paragraph is a problem I inflicted on myself.&lt;/p&gt;&#xA;&lt;p&gt;The third one is the one I&amp;rsquo;d never have guessed. &lt;strong&gt;Turn trailing-whitespace&#xA;stripping off for markdown.&lt;/strong&gt; Two trailing spaces is a hard line break; strip&#xA;them on save and the editor silently rewrites your text, and the diff shows&#xA;nothing wrong because whitespace is invisible. A formatter that is correct for&#xA;every other filetype quietly corrupts this one.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The whole embed reconstructs from one string in the URL</title>
				<link>https://www.jwogrady.com/posts/spotify-id-is-in-the-link/</link>
				<pubDate>Sun, 20 Sep 2026 16:31:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/spotify-id-is-in-the-link/</guid>
				<description>&lt;p&gt;Hugo ships shortcodes for YouTube, Vimeo, X, Instagram and gists. Not Spotify.&#xA;So an embed is either raw HTML or something I write.&lt;/p&gt;&#xA;&lt;p&gt;I spent a while trying to move a copied iframe around before noticing that&#xA;the entire thing reconstructs from one string:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;open.spotify.com/album/6mnGRO87UFiKOoHL3BezZ7?si=abc123&#xA;                 ^type ^------- the id -------^ ^tracking&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That &lt;code&gt;?si=&lt;/code&gt; is share-tracking. It isn&amp;rsquo;t part of the address and it doesn&amp;rsquo;t&#xA;belong in a published page.&lt;/p&gt;&#xA;&lt;p&gt;Everything else — the width, the allow list, the frame border — is boilerplate&#xA;I can generate. So:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Raw HTML disappears from markdown without saying anything</title>
				<link>https://www.jwogrady.com/posts/goldmark-strips-html/</link>
				<pubDate>Sun, 20 Sep 2026 16:24:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/goldmark-strips-html/</guid>
				<description>&lt;p&gt;Put an iframe in a markdown file and it renders as nothing. Not a broken&#xA;element, not a comment, not a warning in the build log. The element simply&#xA;isn&amp;rsquo;t in the HTML, as though I&amp;rsquo;d never typed it.&lt;/p&gt;&#xA;&lt;p&gt;Goldmark — Hugo&amp;rsquo;s markdown renderer — discards raw HTML unless you tell it&#xA;otherwise:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-toml&#34; data-lang=&#34;toml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[&lt;span style=&#34;color:#a6e22e&#34;&gt;markup&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;goldmark&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;renderer&lt;/span&gt;]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;unsafe&lt;/span&gt; = &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I&amp;rsquo;ll defend the name. It&amp;rsquo;s site-wide and it re-enables &lt;em&gt;all&lt;/em&gt; raw HTML in&#xA;&lt;em&gt;all&lt;/em&gt; markdown, which is a sensible thing to refuse when content might come&#xA;from someone else, and a sensible thing to allow on a personal site where I&#xA;wrote every file.&lt;/p&gt;</description>
			</item>
			<item>
				<title>An editor and a filesystem can hold two different documents</title>
				<link>https://www.jwogrady.com/posts/the-file-on-disk/</link>
				<pubDate>Sun, 20 Sep 2026 16:18:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/the-file-on-disk/</guid>
				<description>&lt;p&gt;Here&amp;rsquo;s something I didn&amp;rsquo;t know this morning: an editor and a filesystem can&#xA;hold two different documents under one name, and neither is obliged to&#xA;mention it.&lt;/p&gt;&#xA;&lt;p&gt;I found out the slow way. Four rounds of &amp;ldquo;it&amp;rsquo;s not there&amp;rdquo; / &amp;ldquo;but I can see&#xA;it&amp;rdquo; before I checked the only thing that settles an argument like that:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ stat -c &amp;#39;%y %s bytes&amp;#39; content/first-try.md&#xA;2026-09-20 16:04:13 -0500  186 bytes&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The editor said thirteen lines. The disk said 186 bytes.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The image was fine. The page had nowhere to be.</title>
				<link>https://www.jwogrady.com/posts/no-theme-no-layouts/</link>
				<pubDate>Sun, 20 Sep 2026 16:05:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/no-theme-no-layouts/</guid>
				<description>&lt;p&gt;Two things were true at once and I couldn&amp;rsquo;t make them fit together.&lt;/p&gt;&#xA;&lt;p&gt;The build was publishing my image to &lt;code&gt;public/&lt;/code&gt;. The build was &lt;em&gt;not&lt;/em&gt; publishing&#xA;&lt;code&gt;public/first-try/index.html&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;I assumed one of those had to be a lie, and spent a while looking for which.&#xA;Neither was. The asset pipeline and the page renderer don&amp;rsquo;t know about each&#xA;other — a shortcode calling &lt;code&gt;resources.Get&lt;/code&gt; emits its image whether or not any&#xA;page renders successfully. So the image being served proved the shortcode&#xA;worked and proved precisely nothing about the page.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Two folders for files that are not content, and they behave in opposite ways</title>
				<link>https://www.jwogrady.com/posts/assets-is-not-static/</link>
				<pubDate>Sun, 20 Sep 2026 15:45:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/assets-is-not-static/</guid>
				<description>&lt;p&gt;Dropped a screenshot into &lt;code&gt;assets/&lt;/code&gt;, pointed some markdown at it, got nothing.&#xA;My first thought was that I&amp;rsquo;d typo&amp;rsquo;d the path. I hadn&amp;rsquo;t.&lt;/p&gt;&#xA;&lt;p&gt;It turns out Hugo has two directories for files that aren&amp;rsquo;t content, and&#xA;they&amp;rsquo;re near-opposites:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;static/&lt;/code&gt;&lt;/strong&gt; is a photocopier. A file at &lt;code&gt;static/x.png&lt;/code&gt; is served at &lt;code&gt;/x.png&lt;/code&gt;,&#xA;byte for byte, no questions asked.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;assets/&lt;/code&gt;&lt;/strong&gt; isn&amp;rsquo;t published &lt;em&gt;at all&lt;/em&gt;. It&amp;rsquo;s raw material. A file in there&#xA;reaches the output only when a template pulls it through &lt;code&gt;resources.Get&lt;/code&gt;, and&#xA;then at a path Hugo picks.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Day one: the stack, and why each piece earns its place</title>
				<link>https://www.jwogrady.com/posts/day-one-the-stack/</link>
				<pubDate>Sun, 20 Sep 2026 15:40:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/day-one-the-stack/</guid>
				<description>&lt;p&gt;I&amp;rsquo;m writing this one before I&amp;rsquo;ve built anything, which is deliberate. The&#xA;things that are about to cost me an hour will be obvious and unmemorable in a&#xA;week, and obvious-and-unmemorable is exactly the knowledge I keep having to&#xA;buy twice.&lt;/p&gt;&#xA;&lt;p&gt;So: notes while I&amp;rsquo;m inside it, not a tidy retrospective afterwards.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-stack&#34;&gt;The stack&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Hugo&lt;/strong&gt;, because the build is one binary. No Node toolchain underneath it,&#xA;nothing to &lt;code&gt;npm install&lt;/code&gt;, nothing to rot in six months when I come back to&#xA;this.&lt;/p&gt;</description>
			</item>
			<item>
				<title>A clean build of a website that does not exist</title>
				<link>https://www.jwogrady.com/posts/empty-site-renders-nothing/</link>
				<pubDate>Sun, 20 Sep 2026 15:24:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/empty-site-renders-nothing/</guid>
				<description>&lt;p&gt;If you have ever run the command, watched it succeed, gone to look at the&#xA;thing you just made, and found absolutely nothing there —&lt;/p&gt;&#xA;&lt;p&gt;yes. That. That&amp;rsquo;s what this is about.&lt;/p&gt;&#xA;&lt;p&gt;Three minutes into building this site I had a perfectly clean, completely&#xA;successful build of nothing at all.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;$ hugo new site .&#xA;$ hugo&#xA;&#xA;                  │ EN&#xA;──────────────────┼────&#xA; Pages            │  0&#xA;&#xA;Total in 41 ms&#xA;$ find public -type f&#xA;public/sitemap.xml&#xA;public/index.xml&#xA;public/tags/index.xml&#xA;public/categories/index.xml&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Four files. All of them machine-readable lists of the pages on my website.&#xA;All four of them describing zero pages. No actual web pages anywhere. Exit&#xA;code zero, forty-one milliseconds, no errors, no warnings, no complaints of&#xA;any kind.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
