I built my personal blog Samuele’s Space using Hugo, a fast and flexible static site generator, combined with the Blowfish theme for modern styling. My goal was a fast, lightweight, and easily maintainable blog with a sleek design and minimal effort to deploy – and Hugo delivered exactly that.
⚙️ How Hugo Works & Why I Chose It#
Hugo is a static site generator, which means it takes Markdown files (like blog posts), applies templates and themes, and turns them into static HTML, CSS, and JavaScript files. There’s no server-side rendering or database — just fast, secure, and simple files ready to host anywhere.
Key Benefits of Hugo:#
- Markdown-first: Content is written in plain
.md
files with front matter (metadata like title, date, tags). - Themes & templating: Easily apply themes (like Blowfish) that handle the layout, styling, and behavior.
- Blazing fast builds: Hugo can rebuild hundreds of pages in milliseconds.
- No backend required: All output is static, so you can host it on GitHub Pages, Netlify, or any static file server.
- Built-in features: Hugo includes things like taxonomy (categories/tags), table of contents, image processing, and more — no plugins needed.
🐡 Why I Chose the Blowfish Theme#
Blowfish is a powerful and minimal Hugo theme designed with developers and writers in mind. I chose it because it gave me:
A clean, modern aesthetic out of the box
Excellent mobile responsiveness
Extensive configuration options without touching any CSS
First-class support for features like:
- Search
- Code highlighting with copy buttons
- Light/dark mode with auto-detect
- Table of contents, reading time, and “Zen mode”
- Custom backgrounds and hero sections
It also supports multiple homepage layouts (hero
, background
, card
, etc.) and article header styles (e.g. big, background, thumbnail). These can all be customized via the params.toml
configuration file — no hacking into templates or overriding theme files needed.
What I especially appreciate is that Blowfish offers a polished user experience but remains extremely lightweight. It prioritizes performance and accessibility while letting me personalize everything through simple TOML settings.
🧪 Customizing Blowfish with params.toml
#
The heart of the customization is the params.toml
file. This file defines how the site should behave and look.
Color & Appearance#
colorScheme = "fire"
defaultAppearance = "light"
autoSwitchAppearance = true
enableSearch = true
enableCodeCopy = true
This sets a “fire” color palette, enables light/dark mode switching, and turns on features like code snippet copying and search.
Homepage Design#
[homepage]
layout = "background"
showRecent = true
showRecentItems = 3
layoutBackgroundBlur = true
This creates a homepage with a blurred background image and recent blog post cards.
Article Page Configuration#
[article]
showDate = true
showAuthor = true
showReadingTime = true
showTableOfContents = true
showZenMode = true
These options make blog posts readable and accessible, with TOC, reading time, and Zen Mode for distraction-free reading.
🖼 Using BGJar for Background Art#
One unique touch is the animated SVG background on my homepage. I used BGJar, a free online SVG generator. You pick a style, customize colors and shapes, and export it.
I used the “Animated Shape” pattern and configured it in my params.toml
:
defaultBackgroundImage = "imgs/Animated Shape(2).svg"
This adds a playful yet subtle motion to the page, especially when blurred by the homepage layout.
💻 Hosting with GitHub & Deploying via GitHub Actions#
My entire blog lives in this GitHub repository: 🔗 github.com/samuele-cozzi-io/website
Every time I push to the main
branch, GitHub Actions rebuilds and deploys the site using this workflow:
name: Deploy Hugo site to Pages
on:
# Runs on pushes targeting the default branch
push:
branches:
- main
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.143.1
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Install Dart Sass
run: sudo snap install dart-sass
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
fetch-depth: 0
- name: Setup Pages
id: pages
uses: actions/configure-pages@v4
- name: Install Node.js dependencies
run: "[[ -f package-lock.json || -f npm-shrinkwrap.json ]] && npm ci || true"
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: |
hugo \
--gc \
--minify \
--baseURL "${{ steps.pages.outputs.base_url }}/"
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./public
# Deployment job
deploy:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
This builds the site into the public/
directory and publishes it to the gh-pages
branch, which GitHub Pages serves from.
🚀 Just push changes — Hugo does the rest.
🏁 Final Thoughts#
Hugo + Blowfish + GitHub Pages is a dream stack for technical blogs:
- It’s fast.
- It’s version-controlled.
- It’s customizable.
- It’s zero-cost to host.
With just Markdown files, a theme, and a bit of SVG magic, I’ve built a fully-featured blog I’m proud of. If you’re curious to explore, check out:
- 🖥 Live Blog: samuele-cozzi-io.github.io/website
- 💾 Source Code: GitHub Repo
- 🎨 Background Generator: BGJar
- 📚 Hugo Docs: gohugo.io
- 💡 Blowfish Theme: blowfish.page
Some bytes of this blog post were co-written with AI. The brain behind it is still very much human.