I needed a space to showcase my work, share ideas, and write articles — whether tutorials, reviews, editorials, or blog posts. GitHub is great for hosting code, but I wanted a space of my own online. This blog also serves as my digital portfolio.

What were the options for blogging?

Some popular options for getting started with a blog include:

These platforms offer end-to-end solutions with nice features like:

  • Focus on content with built-in formatting
  • SEO optimization
  • In-browser editing interfaces
  • Media and plugin support
  • Abstracted handling of themes, databases, hosting, and updates

But I wanted something free, minimal, and fully under my control.

GitHub Pages offers free hosting for static content — no backend, no database — just HTML, CSS, JS. That constraint inspired me to explore static site generators.

🚧 My reasons for choosing Hugo, and a deeper look at why I use it, will be covered in a dedicated follow-up post.


Setting up the blog

I followed this 5-step process (inspired by Bhanu Chaddha’s article):

  1. Install Hugo
  2. Create a project
  3. Set up Git
  4. Install a theme via submodule
  5. Add content and run the site

Everything below is based on my experience using Ubuntu 22.04. You may want to adapt it using the official Hugo setup instructions.


1. Install Hugo

On Ubuntu:

sudo snap install hugo --channel=extended

Then verify the installation:

hugo version

You should see output similar to:

hugo v0.96.0+extended linux/amd64 BuildDate=2022-03-26T09:15:58Z

2. Create your Hugo project

Navigate to the folder where you want your blog project to live:

cd ~/Documents
hugo new site emmanuel-io-github-io-hugo

This will create the Hugo project structure:

Congratulations! Your new Hugo site is created in /home/emmanuel/Documents/emmanuel-io-github-io-hugo.

3. Initialize Git

cd emmanuel-io-github-io-hugo
git init
git branch -m main  # If your default is still 'master'

4. Install a theme using Git submodule

For this blog, I used the Ananke theme. I added it as a submodule to keep it clean and version-controlled:

git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke

5. Add example configuration and content

To get a working site quickly, I copied the sample content and config from the theme:

cp -R ./themes/ananke/exampleSite/{config.toml,content*,static*} ./

6. Run the Hugo development server

hugo server

Open http://localhost:1313 in your browser to view the site.


7. Start customizing

At this point, I began adapting the configuration and writing my first content.

👉 In the next post, I’ll cover how I structured the blog, added multilingual support, integrated GitHub Actions, and customized the theme.