blog of ssh

favicon

how i built this blog (and why i stopped overengineering it)

a story, a mini tutorial, and a gentle reminder to keep things simple.

prelude

i wanted a blog. not a startup. not a product.


act i – the overengineer awakens

Like many engineers with too much curiosity and not enough constraint, I started building it from scratch.

My initial setup was:

The idea I had was:

I spent hours tweaking folders, configuring content collections, thinking about image optimization, theming, deployment… and not the actual content.


act ii – too much for what i needed

it worked. but it was heavy. and most importantly: I still wasn’t writing.

I had built a system that required energy before I could even think about writing words.


act iii - enter obsidian + hugo

Then Leo, my partner, sent me this blog post. I read it and immediately thought: yes, this is what I want.

I went with this simple workflow:

I also chose Bearblog Hugo theme, similarly to the author from the original post. It gave me:

it took 1 hour to set this up.


act iv – the tutorial (finally)

These steps outline what I did. There are many other ways to set up your content management, hosting, CI/CD pipeline, etc. You may be happier self-hosting everything at home, or using more sophisticated setup.

  1. install Hugo

I use Homebrew:

brew install hugo

confirm it worked:

hugo version
  1. create a new site
hugo new site my-blog
cd my-blog
  1. add the theme (i chose Bearblog)
git init
git submodule add https://github.com/janraasch/hugo-bearblog themes/hugo-bearblog

then, update hugo.toml (or config.toml) with the theme:

theme = "hugo-bearblog"
  1. create your first post
hugo new blog/hello-world.md

you’ll find the file in `content/blog/hello-world.md

  1. connect Obsidian (or any editor) to content/blog/ folder, and fill in the frontmatter (tips on how to add frontmatter to Obsidian note here):
---
title: "hello world"
date: 2025-04-24
draft: true
---

note that draft field is what Hugo looks at to decide whether a post should be published or hidden. Set draft to false to publish the post.

  1. run your site locally
hugo server -D

open your browser at http://localhost:1313

  1. add a favicon (optional)

drop favicon.ico into the static/ folder and favicon.png into the static/images folder.

you may also want to tweak the header layout of your site (i added the same image used for favicon next to my blog title).

  1. if you want to make changes to layout (optional)

you can fully customize the look and feel of your site.

let’s take an example of appending an image to site’s title. inspect the theme you use - notice where the title is placed:

<a href="{{ "" | relURL }}" class="title">
	<h2>{{ .Site.Title }}</h2>
</a>
<nav>{{- partial "nav.html" . -}}</nav>

to change header layout partial for your version of the site, you’ll just need to copy this file to your own layouts/partials folder, and change it as you like, for example:

mkdir -p layouts/partials
cp themes/hugo-bearblog/layouts/partials/header.html layouts/partials/header.html
<a href="{{ "" | relURL }}" class="title" style="display: flex; align-items: center; gap: 10px;">
	<h2>{{ .Site.Title }}</h2>
	<img src="/images/favicon.png" alt="favicon" width="50" height="50">
</a>
<nav>{{- partial "nav.html" . -}}</nav>
  1. add index (home) page content

add _ index.md file to the content/ folder and treat it as any other MD file. add some welcome information about your blog there.

#### Hey, this is my blog!
Welcome :)
  1. deploy (i used Netlify)

you can push your repo to GitHub and connect it to Netlify or any other product, or self-host your site.

for build, you can use

hugo --minify

to generate the public/ folder with minified html for static hosting anywhere.

with Netlify, i added a netlify.toml config, where i set target version of Hugo to use:

[build.environment]
HUGO_VERSION = "0.146.7"
HUGO_ENV = "production"

act v - the takeaway

Sometimes, building things from scratch is fun. Sometimes, it’s a creativity trap.

Tools should help you do the thing – not get in the way of it. This setup gets me to writing faster. And I can always tweak it later.


appendix

tools I used:


i’ll probably still overengineer something again in the future.

end

#Post #Software #Tutorial