<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>hugo on jwogrady</title>
		<link>https://www.jwogrady.com/tags/hugo/</link>
		<description>Recent content in hugo on jwogrady</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Mon, 21 Sep 2026 10:55:00 -0500</lastBuildDate>
		
			<atom:link href="https://www.jwogrady.com/tags/hugo/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Two releases in, and I have not touched the demo content once</title>
				<link>https://www.jwogrady.com/posts/clean-first-release/</link>
				<pubDate>Mon, 21 Sep 2026 10:55:00 -0500</pubDate>
				<guid>https://www.jwogrady.com/posts/clean-first-release/</guid>
				<description>&lt;p&gt;I want to show you something that went &lt;em&gt;right&lt;/em&gt;, because I&amp;rsquo;ve spent most of&#xA;this journal so far writing down things that broke.&lt;/p&gt;&#xA;&lt;p&gt;Pulse is a new Hugo theme — the design layer for status26.com, where Spectrum&#xA;is the one this site runs on. Two releases in as of this morning. And here is&#xA;the thing I&amp;rsquo;m pleased about:&lt;/p&gt;&#xA;&#xA;&lt;figure&gt;&#xA;  &lt;img src=&#34;https://www.jwogrady.com/posts/clean-first-release/pulse-v010_hu_435b46c53620ed14.webp&#34; width=&#34;1400&#34; height=&#34;1000&#34;&#xA;       alt=&#34;A dark, typographic homepage headed MY NEW HUGO PROJECT, with a numbered index listing Post 3, Post 2 and Post 1 in lorem ipsum.&#34; loading=&#34;lazy&#34; decoding=&#34;async&#34;&gt;&#xA;  &lt;figcaption&gt;Every word on this page came out of the generator. Only the design is mine.&lt;span class=&#34;credit&#34;&gt;Screenshot&lt;/span&gt;&#xA;  &lt;/figcaption&gt;&#xA;&lt;/figure&gt;&#xA;&#xA;&lt;p&gt;&lt;strong&gt;Every word on that page came out of the generator.&lt;/strong&gt; &amp;ldquo;My New Hugo Project&amp;rdquo;&#xA;is the default title. Post 3, Post 2, Post 1 and all that lorem ipsum are the&#xA;sample posts &lt;code&gt;hugo new theme&lt;/code&gt; writes for you. I have not edited a single&#xA;character of it.&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>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>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>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>
