<?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 Andy Little</title><link>https://andylittle.net/tags/hugo/</link><description>Recent content in Hugo on Andy Little</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 22 Jul 2026 11:00:00 -0500</lastBuildDate><atom:link href="https://andylittle.net/tags/hugo/index.xml" rel="self" type="application/rss+xml"/><item><title>How This Site Is Built and Deployed</title><link>https://andylittle.net/blog/2026/how-this-site-is-built-and-deployed/</link><pubDate>Wed, 22 Jul 2026 11:00:00 -0500</pubDate><guid>https://andylittle.net/blog/2026/how-this-site-is-built-and-deployed/</guid><description>The stack behind andylittle.net: Hugo, PaperMod, and a GitHub Actions pipeline that deploys straight to my existing web host.</description><content:encoded><![CDATA[<p>I wanted a simple, fast personal site for writing about projects and whatever
else I&rsquo;m tinkering with, without dragging in a database, a CMS, or a hosting
bill I didn&rsquo;t already have. Here&rsquo;s what it&rsquo;s running on.</p>
<h2 id="hugo--papermod">Hugo + PaperMod</h2>
<p>The site is built with <a href="https://gohugo.io/">Hugo</a>, a static site generator
written in Go. Content is plain Markdown files with a bit of front matter;
Hugo turns that into a folder of HTML at build time. No server-side rendering,
no runtime dependencies, just files.</p>
<p>For the look and feel I&rsquo;m using <a href="https://github.com/adityatelange/hugo-PaperMod">PaperMod</a>,
a clean, fast community theme, pulled in as a git submodule rather than
forked. That keeps me on the upstream release train and out of the business
of maintaining CSS.</p>
<p>The site has three sections: <strong>Blog</strong> (this), <strong>About</strong>, and <strong>Projects</strong>.
Blog posts get dated permalinks (<code>/blog/2026/my-post/</code>), which keeps URLs
stable even if I ever reorganize or retitle things.</p>
<h2 id="deploying-without-a-new-host">Deploying without a new host</h2>
<p>I already have web hosting, so standing up something new just to serve static
files felt unnecessary. Instead, deployment is a GitHub Actions workflow that:</p>
<ol>
<li>Checks out the repo (with the theme submodule)</li>
<li>Installs the pinned Hugo extended release</li>
<li>Runs <code>hugo --gc --minify --cleanDestinationDir</code> to build the site</li>
<li>Copies the resulting <code>public/</code> directory to my host over <code>scp</code>, authenticated
with an SSH key</li>
</ol>
<p>Every push to <code>main</code> rebuilds and redeploys the site — no manual upload step,
no FTP client. The SSH host, username, private key, and target directory all
live as GitHub Actions repository secrets, never in the repo itself.</p>
<p>One thing that tripped me up: modern <code>scp</code> defaults to speaking the SFTP
protocol under the hood, and on my host that SFTP subsystem resolves relative
paths from a different root than an interactive SSH shell does. Uploads kept
failing with &ldquo;no such file or directory&rdquo; against a path that very much
existed. Forcing the legacy <code>scp</code> protocol (<code>-O</code>) fixed it — a good reminder
that &ldquo;it worked over SSH&rdquo; and &ldquo;it&rsquo;ll work over scp&rdquo; aren&rsquo;t always the same
claim.</p>
<h2 id="whats-next">What&rsquo;s next</h2>
<p>Mostly just writing more. The repo is set up so a new post is one command
away:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">hugo new blog/my-post-title.md
</span></span></code></pre></div><p>&hellip;and one <code>git push</code> away from being live.</p>
]]></content:encoded></item></channel></rss>