How This Website Works
Every Page is an Obsidian Note
This website is powered entirely by my Obsidian vault. Every page you see — the homepage, project pages, and this post — corresponds to a single Markdown note in my vault.
I write and organize notes the way I normally would, using wikilinks to connect ideas. A simple Python script reads the vault, finds notes I've marked for publishing, and generates static HTML.
How It Works
The publish pipeline is a single command:
python3 publish.py
Here's what happens under the hood:
- Load — The script reads all
.mdfiles from my vault'sNotes/folder and parses their frontmatter and body content. - Filter — Only notes with
published: truein their frontmatter are selected. Everything else in the vault stays private. - Render — Markdown is converted to HTML. Wikilinks between published notes become real hyperlinks; wikilinks to unpublished notes become plain text.
- Backlinks — For each page, the script finds all other published notes that link to it, and adds a "Linked to this note" section at the bottom — just like Obsidian's backlinks panel.
- Write — Jinja2 templates produce the final HTML files.
What Gets Published
The publishing model is simple: add published: true to a note's frontmatter, and it becomes a page on the site. That's it.
---
published: true
---
All pages live at the root level as flat HTML files. There are no categories, no page types, no subdirectories. The homepage links to whatever notes I choose, and backlinks connect everything together.
No Build Tools, No Framework
The output is plain HTML and CSS. No JavaScript framework, no static site generator, no build step beyond the Python script. The only dependencies are mistune for Markdown parsing and jinja2 for templates.
Auto-Rebuild
The site rebuilds itself automatically. A cron job runs every 5 minutes, pulling the latest changes, re-running publish.py, and pushing any updated HTML back to the repo. If nothing changed, it does nothing.
Why This Approach
I wanted a setup where my notes are the single source of truth. I already use Obsidian daily — flipping a checkbox in a note's frontmatter is the lowest-friction way to publish. There's no CMS to log into, no deploy pipeline to manage, and no content to keep in sync across systems.
The vault stays a vault. The website is just a view into the parts I choose to share.