<?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>Hugo on bismigel</title><link>https://bismigel.dev/tags/hugo/</link><description>Recent content in Hugo on bismigel</description><generator>Hugo</generator><language>en-us</language><copyright>bismigel</copyright><lastBuildDate>Fri, 02 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://bismigel.dev/tags/hugo/index.xml" rel="self" type="application/rss+xml"/><item><title>How this site is built</title><link>https://bismigel.dev/posts/2026-10-02-how-this-site-is-built/</link><pubDate>Fri, 02 Oct 2026 00:00:00 +0000</pubDate><guid>https://bismigel.dev/posts/2026-10-02-how-this-site-is-built/</guid><description/><content:encoded><![CDATA[<p>I write in Org, convert with pandoc, and build with Hugo. Here is the whole pipeline in one screen.</p>
<h1 id="writing">Writing</h1>
<p>Every post is a file in <code>org/</code>{.verbatim}. This one starts like:</p>
<div class="code-block">
  <div class="code-block-header">
    <span class="code-block-lang">org</span>
    <button type="button" class="code-copy" aria-label="Copy code">
      <span class="code-copy-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
</span>
      <span class="code-copy-icon code-copy-icon-check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
</span>
      <span class="code-copy-label">Copy</span>
    </button>
  </div>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-org" data-lang="org"><span class="line"><span class="cl"><span class="cs">#+TITLE</span><span class="c">: How this site is built</span>
</span></span><span class="line"><span class="cl"><span class="cs">#+DATE</span><span class="c">: 2026-10-02</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Body text in Org.</span></span></code></pre></div>
</div>
<p>Org gives me headings, tables, source blocks, footnotes, and export keywords. I never hand-write HTML.</p>
<h1 id="converting">Converting</h1>
<p>A small script turns each Org file into Hugo Markdown with front matter:</p>
<div class="code-block">
  <div class="code-block-header">
    <span class="code-block-lang">shell</span>
    <button type="button" class="code-copy" aria-label="Copy code">
      <span class="code-copy-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
</span>
      <span class="code-copy-icon code-copy-icon-check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
</span>
      <span class="code-copy-label">Copy</span>
    </button>
  </div>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">pandoc -s -f org -t markdown --wrap<span class="o">=</span>none org/post.org <span class="se">\
</span></span></span><span class="line"><span class="cl">  -o content/posts/post/index.md</span></span></code></pre></div>
</div>
<p>Pandoc maps <code>#+TITLE</code>{.verbatim} and <code>#+DATE</code>{.verbatim} to YAML front matter. One extra step maps <code>#+FILETAGS</code>{.verbatim} to Hugo tags.</p>
<h1 id="building-and-shipping">Building and shipping</h1>
<div class="code-block">
  <div class="code-block-header">
    <span class="code-block-lang">shell</span>
    <button type="button" class="code-copy" aria-label="Copy code">
      <span class="code-copy-icon"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 01-2-2V4a2 2 0 012-2h9a2 2 0 012 2v1"/></svg>
</span>
      <span class="code-copy-icon code-copy-icon-check"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>
</span>
      <span class="code-copy-label">Copy</span>
    </button>
  </div>
  <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">hugo --minify    <span class="c1"># Org -&gt; HTML into public/</span></span></span></code></pre></div>
</div>
<p>CI runs the same steps on every push:</p>
<ol>
<li>convert Org to Markdown</li>
<li>run <code>hugo --minify</code>{.verbatim}</li>
<li>build a small nginx image that contains <code>public/</code>{.verbatim}</li>
<li>push the image to GHCR and bump its tag</li>
</ol>
<p>ArgoCD watches the manifest and rolls out the new image. I never deploy by hand.</p>
<h1 id="four-jobs-four-tools">Four jobs, four tools</h1>
<p>Job          Tool</p>
<hr>
<p>writing      Org and Emacs
conversion   pandoc
build        Hugo
deploy       GHCR and ArgoCD</p>
<p>Each tool does one thing, which means I can replace any of them without touching the rest.</p>
]]></content:encoded></item></channel></rss>