If you’re a nerd like me, you probably want a fast, clean, and fully controllable personal website — something that doesn’t fight you, doesn’t hide behind layers of abstraction, and doesn’t require a small Kubernetes cluster just to publish a blog post.

Enter Hugo — one of the fastest static site generators on the planet.

But speed is only part of the story.

What really makes Hugo shine is the philosophy behind it: simplicity, portability, and raw performance. You write your content in Markdown, organize it in a sane folder structure, pick a theme (or build your own), and Hugo does the rest — compiling everything into a blazing-fast static site that you can host basically anywhere.

No database. No runtime. No mysterious background processes eating your RAM at 3 AM.

Just files.


⚡ Why Hugo feels different

If you’ve ever wrestled with WordPress plugins, waited for a bloated CMS admin panel to load, or debugged why your blog suddenly needs 512 MB more memory… Hugo feels like stepping out of the fog.

With Hugo you get:

  • Ridiculous build speed — even large sites compile in seconds
  • Single binary deployment — no dependency hell
  • Markdown-first workflow — write anywhere, publish everywhere
  • Git-friendly content — your site finally behaves like code
  • Hosting freedom — GitHub Pages, Cloudflare Pages, S3, your homelab… whatever

For nerds (and proud of it), this is pure dopamine.


🧠 The mental model that clicks

The moment Hugo really “clicks” is when you realize:

Your website is just a compiled artifact.

You edit Markdown → Hugo builds → static files come out → web server serves them at light speed.

That’s it.

This model unlocks some beautiful workflows:

  • Version your entire site with Git
  • Preview locally in milliseconds
  • Deploy with a simple CI pipeline
  • Sleep peacefully knowing there’s no database to corrupt

🔧 Where Hugo really shines

Hugo is especially perfect if you:

  • run a homelab
  • like infrastructure-as-code
  • prefer Markdown over WYSIWYG editors
  • want near-zero maintenance
  • care about performance (yes, you probably do)

It’s less ideal if you need heavy dynamic features out of the box — but honestly, in 2026, most of that can be bolted on cleanly with APIs and edge functions.


🚀 My take

After trying heavier CMS platforms, going back to Hugo feels almost… suspiciously fast. The feedback loop is tight, the output is clean, and the control level is exactly where a technical person wants it.

If your goal is:

  • maximum speed
  • minimum moving parts
  • full ownership of your stack

…Hugo deserves a very serious look. So let’s jump into it.


In this tutorial you’ll learn:

  • How to install Hugo
  • How to create your personal website
  • How to customize a theme
  • How to deploy it (two ways):
    • Self-host (my favourite)
    • Host on Linode

Let’s go.


Prerequisites

You should have:

  • Basic terminal knowledge
  • Git installed
  • A Linux/macOS/WSL environment
  • A domain name (optional but recommended)

1. Install Hugo

Linux (Debian/Ubuntu)

sudo apt update
sudo apt install hugo

macOS (Homebrew)

brew install hugo

Verify installation

hugo version

2. Create Your Site

Create a new Hugo project:

hugo new site my-website
cd my-website

Your structure will look like:

my-website/
├── archetypes/
├── content/
├── layouts/
├── static/
├── themes/
└── hugo.toml

3. Add a Theme

Hugo without a theme is… ugly 😅

Let’s install the popular PaperMod theme.

git init
git submodule add https://github.com/adityatelange/hugo-PaperMod themes/PaperMod

Now edit your hugo.toml:

baseURL = "https://example.com/"
languageCode = "en-us"
title = "My Personal Website"
theme = "PaperMod"

4. Create Your First Post

hugo new posts/my-first-post.md

Edit the file:

---
title: "My First Post"
date: 2026-02-26
draft: false
---

Hello internet 👋  
This is my new Hugo website.

5. Run Locally

Start the dev server:

hugo server -D

Open:

http://localhost:1313

Boom — your site is alive.


6. Build the Production Site

When ready to deploy:

hugo --minify

Your static site will be generated in:

public/

This folder is what you deploy.


Option 1 — Self-Host (My Favourite)

If you want full control, self-hosting is the way.

Advantages

  • Full ownership
  • Maximum privacy
  • No platform lock-in
  • Fun 😎

Step 1 — Prepare Your Server

You need:

  • A home server…yes the old one laptop whos been abandoned for 10 years
  • Nginx installed
  • SSH access

Install nginx:

sudo apt install nginx

Step 2 — Upload Your Site

From your local machine:

rsync -avz public/ user@your-server:/var/www/mywebsite/

Step 3 — Nginx Config

Create:

sudo nano /etc/nginx/sites-available/mywebsite

Example config:

server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/mywebsite;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

Enable it:

sudo ln -s /etc/nginx/sites-available/mywebsite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Your self-hosted Hugo site is now live.


Option 2 — Host on Linode

If you prefer less hardware responsibility, Linode is a solid choice.

Advantages

  • Simple deployment
  • Reliable infrastructure
  • Cheap options
  • Good performance

Step 1 — Create a Linode

From the Linode dashboard:

  • Create → Linode
  • Choose Ubuntu LTS
  • Shared CPU is fine
  • Deploy

Step 2 — Install Nginx on Linode

SSH into your Linode:

sudo apt update
sudo apt install nginx

Step 3 — Upload Your Hugo Site

rsync -avz public/ root@LINODE_IP:/var/www/mywebsite/

Step 4 — Configure Nginx

Use the same configuration shown in the self-host section.

Reload nginx:

sudo systemctl reload nginx

Step 5 — Point Your Domain

At your DNS provider:

A record → yourdomain.com → LINODE_IP

Wait for DNS propagation.


Pro Tips

  • Use Git for version control
  • Automate deploys with CI/CD
  • Put Cloudflare in front for caching
  • Keep themes as git submodules
  • Use hugo server -D during development

Final Thoughts

Hugo is insanely fast, simple, and production-ready.

My personal recommendation:

  • Want control and fun → self-host
  • Want convenience → Linode

Both are solid — it depends on your philosophy.

Happy building 🚀