Personal website of Nathan Johnson, built with Hugo and
deployed to GitHub Pages by the workflow in .github/workflows/hugo.yml on
every push to master. The custom domain is set in CNAME.
| I want to… | Go to |
|---|---|
| Write a new blog post | content/posts/<slug>/index.md (see below) |
| Edit my bio / paper list | content/about/index.md |
| Edit the homepage intro | content/_index.md |
| Upload a paper PDF | static/papers/ (linked as /papers/<file>.pdf) |
| Upload a site-wide image | static/img/ (linked as /img/<file>) |
| Change colors / styling | assets/scss/styles.scss |
| Change page structure | layouts/ |
| Change nav links, title, metadata | hugo.toml |
Create a folder under content/posts/ and put an index.md in it:
hugo new content/posts/my-new-post/index.md
Images that belong to the post go in the same folder and are referenced by
filename (). Set draft = false when it’s ready to
publish. Front matter looks like:
+++
date = '2026-08-09T12:00:00-07:00'
draft = false
title = 'My New Post'
tags = ['opinion']
+++
Requires the extended edition of Hugo (for SCSS):
hugo server
then open http://localhost:1313/. public/ and resources/ are build output
and are gitignored — never commit them; the GitHub Action rebuilds from
source on every push.
The site uses the maverick theme as a
base (git submodule at themes/maverick), but everything visible is
overridden by the project-level layouts/ and assets/ directories, which
take precedence. To change the design, edit the project files — leave the
submodule alone.