<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Themes on Frank&#39;s Blog</title>
    <link>https://frankblogs.com/tags/themes/</link>
    <description>Recent content in Themes on Frank&#39;s Blog</description>
    <generator>Hugo -- 0.150.0</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 14 Sep 2025 21:12:48 +0800</lastBuildDate>
    <atom:link href="https://frankblogs.com/tags/themes/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The About Page Is Back</title>
      <link>https://frankblogs.com/posts/the-about-page-is-back/</link>
      <pubDate>Sun, 14 Sep 2025 21:12:48 +0800</pubDate>
      <guid>https://frankblogs.com/posts/the-about-page-is-back/</guid>
      <description>&lt;p&gt;In my last post, I declared that I had killed my &amp;ldquo;About&amp;rdquo; page. It was a pragmatic decision. The page was a ghost: it rendered as raw HTML, all its links pointed to &lt;code&gt;localhost:1313&lt;/code&gt;, and it pulled in a phantom Chinese site title that didn&amp;rsquo;t exist in my configuration.&lt;/p&gt;
&lt;p&gt;Then, immediately after publishing that post, I discovered my &amp;ldquo;Tags&amp;rdquo; page was broken in the exact same way.&lt;/p&gt;
&lt;p&gt;When I clicked the &amp;ldquo;Tags&amp;rdquo; link in my (perfectly functional) menu, it loaded a page that &lt;em&gt;also&lt;/em&gt; had no CSS and contained only a giant &amp;ldquo;#Tags&amp;rdquo; title, with no actual tags listed—even though my post was correctly tagged and published.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>In my last post, I declared that I had killed my &ldquo;About&rdquo; page. It was a pragmatic decision. The page was a ghost: it rendered as raw HTML, all its links pointed to <code>localhost:1313</code>, and it pulled in a phantom Chinese site title that didn&rsquo;t exist in my configuration.</p>
<p>Then, immediately after publishing that post, I discovered my &ldquo;Tags&rdquo; page was broken in the exact same way.</p>
<p>When I clicked the &ldquo;Tags&rdquo; link in my (perfectly functional) menu, it loaded a page that <em>also</em> had no CSS and contained only a giant &ldquo;#Tags&rdquo; title, with no actual tags listed—even though my post was correctly tagged and published.</p>
<p>This was the final, definitive clue.</p>
<h2 id="the-unified-bug-theory">The Unified Bug Theory</h2>
<p>This confirmed the problem wasn&rsquo;t a series of isolated glitches. It was one, single, catastrophic bug. My chosen theme, <code>hugo-paper</code>, had a fatal flaw.</p>
<p>Its &ldquo;list&rdquo; templates (like the homepage) worked perfectly.
But its &ldquo;single&rdquo; template (for the About page) and its &ldquo;terms&rdquo; template (for the Tags page) were both fundamentally broken. They contained code that, for some reason, failed only in the Cloudflare Pages production environment, defaulting all asset paths to <code>localhost</code>.</p>
<p>My local build (<code>hugo server -D</code>) worked perfectly, which had masked this problem for days and led me down a debugging rabbit hole of config files, environment variables, and build flags. None of those fixes worked, because the theme&rsquo;s engine itself was defective.</p>
<h2 id="the-theme-transplant">The Theme Transplant</h2>
<p>The solution was obvious. You don&rsquo;t fix a broken engine; you replace it.</p>
<p>I decided to perform a &ldquo;theme transplant.&rdquo; I ripped out <code>hugo-paper</code> completely. This involved:</p>
<ol>
<li>Running <code>git submodule deinit</code> and <code>git rm</code> to purge the old theme from my project.</li>
<li>Choosing a new, robust, and extremely popular theme: <strong>hugo-PaperMod</strong>.</li>
<li>Adding it as a new submodule: <code>git submodule add ... themes/PaperMod</code>.</li>
</ol>
<p>Of course, this came with its own final hurdles. My brand new Hugo version (v0.150.0) immediately threw an error because the new theme&rsquo;s config used a deprecated <code>paginate</code> key. After fixing that (it&rsquo;s now <code>[pagination].pagerSize</code>), the Tags page <em>still</em> showed up empty.</p>
<p>One final search revealed the truth: in our quest to create a &ldquo;clean&rdquo; config, we had removed the block that <em>activates</em> taxonomies. The final piece of the puzzle was adding this back to <code>hugo.toml</code>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">taxonomies</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="nx">tag</span> <span class="p">=</span> <span class="s2">&#34;tags&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="nx">category</span> <span class="p">=</span> <span class="s2">&#34;categories&#34;</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>Why I Killed My About Page</title>
      <link>https://frankblogs.com/posts/why-i-killed-my-about-page/</link>
      <pubDate>Sun, 14 Sep 2025 19:58:08 +0800</pubDate>
      <guid>https://frankblogs.com/posts/why-i-killed-my-about-page/</guid>
      <description>&lt;p&gt;This is my first post. It was supposed to be my second.&lt;/p&gt;
&lt;p&gt;My very first post should have been the &amp;ldquo;About&amp;rdquo; page. It’s the standard, simple, “Hello, this is who I am” page that every blog is supposed to have.&lt;/p&gt;
&lt;p&gt;But I deleted it. I killed it before this blog ever saw the light of day.&lt;/p&gt;
&lt;p&gt;This isn’t a great start, but it was a necessary one.&lt;/p&gt;
&lt;h2 id=&#34;this-was-supposed-to-be-easy&#34;&gt;This Was Supposed to Be Easy&lt;/h2&gt;
&lt;p&gt;My goal was simple: set up a personal blog using the &amp;ldquo;golden stack&amp;rdquo; of modern static sites: Hugo (as the engine), the &lt;code&gt;hugo-paper&lt;/code&gt; theme (for the clean look), Git, and Cloudflare Pages (for fast, free, global hosting).&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>This is my first post. It was supposed to be my second.</p>
<p>My very first post should have been the &ldquo;About&rdquo; page. It’s the standard, simple, “Hello, this is who I am” page that every blog is supposed to have.</p>
<p>But I deleted it. I killed it before this blog ever saw the light of day.</p>
<p>This isn’t a great start, but it was a necessary one.</p>
<h2 id="this-was-supposed-to-be-easy">This Was Supposed to Be Easy</h2>
<p>My goal was simple: set up a personal blog using the &ldquo;golden stack&rdquo; of modern static sites: Hugo (as the engine), the <code>hugo-paper</code> theme (for the clean look), Git, and Cloudflare Pages (for fast, free, global hosting).</p>
<p>And to be honest, it <em>worked</em>. Mostly.</p>
<p>Except for one, single, impossibly stubborn page.</p>
<h2 id="the-ghost-in-the-machine">The Ghost in the Machine</h2>
<p>After I pushed my code, a bizarre problem appeared. My homepage loaded perfectly. The <code>/posts/</code> list page loaded perfectly. They had the correct styles (CSS) and the correct English site title (&ldquo;Frank&rsquo;s Blog&rdquo;).</p>
<p>But the <code>/about/</code> page was a ghost.</p>
<p>It rendered as raw, unstyled HTML. Worse, every single link on that one page (the CSS file, the link back to the homepage, the footer links) was broken, pointing to an impossible address: <code>http://localhost:1313/</code>.</p>
<p>To make it even weirder, the footer—which was supposed to pull my site&rsquo;s English title—instead showed an old, non-existent <strong>Chinese</strong> title: &ldquo;Frank 的博客&rdquo;.</p>
<p>My site was having a split-personality crisis. The homepage knew it was an English site deployed to production, while the About page thought it was a Chinese site running on a local test server.</p>
<h2 id="the-debugging-rabbit-hole">The Debugging Rabbit Hole</h2>
<p>So began an epic debugging saga. An AI assistant and I went down every conceivable rabbit hole to fix this. We tried:</p>
<ol>
<li><strong>Fixing the Config File?</strong> We triple-checked <code>hugo.toml</code>. We fixed deprecated keys (<code>paginate</code>), corrected TOML syntax, and scoured the file for invisible whitespace characters. <strong>The problem remained.</strong></li>
<li><strong>A &ldquo;Ghost&rdquo; Config?</strong> We hypothesized a &ldquo;ghost&rdquo; multilingual file (<code>languages.toml</code>) left over from the theme&rsquo;s example site was forcing the build into a broken state. We hunted it down and deleted the entire <code>config</code> directory. <strong>The problem remained.</strong></li>
<li><strong>Build Environment Mismatch?</strong> The most maddening clue was that <code>hugo server -D</code> on my local Mac worked <strong>perfectly</strong>. The About page was beautiful. This suggested a conflict with Cloudflare&rsquo;s build environment. So, we set the <code>HUGO_VERSION</code> environment variable in Cloudflare to match my exact local version. <strong>The problem remained.</strong></li>
<li><strong>A Build Command Override?</strong> We thought maybe Cloudflare was ignoring the <code>baseURL</code> in the config. So we manually forced it in the build command: <code>hugo --baseURL https://frankblogs.com/</code>. <strong>The problem remained.</strong></li>
<li><strong>A File Structure Problem?</strong> Our final theory. Maybe the theme&rsquo;s &ldquo;single page&rdquo; template was buggy, but its &ldquo;list page&rdquo; template (used by the working homepage) was fine. We changed the file structure from <code>content/about.md</code> to <code>content/about/_index.md</code> to &ldquo;trick&rdquo; Hugo into using the working template. <strong>And still, it failed.</strong></li>
</ol>
<h2 id="the-verdict">The Verdict</h2>
<p>After trying every logical configuration fix, the conclusion was inescapable.</p>
<p>The problem wasn&rsquo;t my config. It wasn&rsquo;t Cloudflare. It was a deep, unfixable bug in the <code>hugo-paper</code> theme itself—a flaw in its single-page template that, for some reason, fails catastrophically <em>only</em> when built on the Cloudflare Pages environment, defaulting all its paths to <code>localhost</code>. It was invisible locally, but fatal in production.</p>
<p>So I had a choice: spend the next week learning the Go Template language to debug a third-party theme I didn&rsquo;t write&hellip; or just delete the broken feature.</p>
<p>I chose deletion.</p>
<p>This blog is going to be a record of building things that work. The first lesson is knowing when to cut your losses and pick the pragmatic path.</p>
<p>So, hello, world. There is no &ldquo;About&rdquo; page here. There is only this &ldquo;Posts&rdquo; page.</p>
<p>Because I know for a fact: <strong>this part works.</strong></p>
]]></content:encoded>
    </item>
  </channel>
</rss>
