How I blog in 2025
I want to take some time to describe the current technical process of blogging on untilde.co.
For me, it is important to be able to jot down ideas and posts as quickly as possible. I already use Obsidian for a number of different things. I do enjoy it for writing and editing. I even made and published a plugin for Obsidian. So I decided to house my blogs also in obsidian. This all evolved and continues to evolve in 2025.
A tale of two directories
I work with two significant directories:
- My Obsidian Vault
- Local Clone of the Hugo git repository
The Obsidian Vault
For better or for worse I have all my personal notes and the public blog content in the same Obsidian Vault. To not confuse posts with my private notes I have a special folder called public/
in my Obsidian Vault. The individual blogs live in a subdirectory here.
The Filetree in Obsidian:
+inbox/
|-- a new personal note
notes/
|-- an old personal note
attachments/
|-- backpack.jpeg
public/
|-- untilde/
|-- 01 Knolling
|-- 02 Packing
....
|--- usysrc/
templates/
|-- blogpost
Some blog posts are numbered so that they can be sorted or appear in order in various file explorers. I guess that this is probably not future-proof, and they should be ordered by publish date or something else in the future. The built-in Obsidian file explorer is relevant during writing and editing for me.
The template for the blog post is applied using the Templater plugin. I use template tags to populate the date into the frontmatter:
---
title: <% tp.file.title %>
draft: false
date: <% tp.file.creation_date("YYYY-MM-DD") %>
tags:
slug:
---
Your blogpost here
To build the site from the markdown content, I use Hugo with a custom theme that I made from scratch called ‘untilde’. I usually have a preview server running with hugo server -D -t untilde
.
Commander is a great plugin to execute the scripts from my ribbon or the command palette in Obsidian. These are needed to sync my writing from the public/untilde folder to the local copy of my blog. I have two buttons: Sync and Publish.
Starting Hugo
I want to see my posts locally before I put them out there in the big scary internet. I usually pull up a new pane in Zellij and run:
hugo server -D -t untilde
This way I get to see all my posts even the ones that are still marked as draft. They appear very, very similar to how they would ‘in production’ and I typically do another round of proofreading here if I have the time and energy.
The Sync command
It executes a python script that lives in the repo of the blog. This script is the actual workhorse in this process. Essentially it copies files and transforms the markdown from Obsidian-style markdown to Hugo-style markdown. It changes the links, updates image embeds to the right path, optimizes the images and more. The length of the script grew a lot over time but since it is straight forward procedural code it’s easy to extend.
The Publish command
What it does:
- changes the working directory to the local copy of my Hugo blog repo
- creates a new git commit
- push to the remote(s)
The GitHub action is triggered by pushes:
name: Deploy to Production
on:
push:
branches: [main]
jobs:
prod-deploy:
name: prod-deploy
runs-on: ubuntu-latest
steps:
- name: get latest
uses: actions/checkout@v2
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3
with:
hugo-version: "0.139.4"
- name: Build
run: hugo --minify
- name: sync files
uses: SamKirkland/FTP-Deploy-Action@4.3.0
with:
server: ${{ secrets.ftp_server }}
username: ${{ secrets.ftp_user }}
password: ${{ secrets.ftp_password }}
local-dir: "public/"
When this is done our new or edited blogposts appear on the site.
I currently use echofeed to syndicate posts from my blog to mastodon. It runs every x minutes to check for new entries in the RSS of my site and then crafts a toot including the images from the post.
Is this a good approach?
I am happy that the .git folder is not blowing up my Obsidian Vault or the Vault metadata blowing up the git repo. But I am still not 100% sure that this is the best approach. There are many things that could certainly be improved about my ‘workflow’, but it… works, and it makes it super easy to publish something. I usually need a keyboard anyway to edit blog posts so it’s no problem that I am not able to publish something from a smartphone. Having all my writing in markdown files at least gives me the option to switch to a different process in the future.