My CMS Setup

2023-09-11

I'm a big fan of Obsidian.md. I have been managing my notes there for a good couple of years now, and when I started my blog, I knew this would be my editing tool of choice for the following reasons:

  • Integration with my knowledge base,
  • Editing setup that I used to,
  • Great Markdown support.

My blog is hosted on Vercel and backed by persistent Redis, but I haven't found a straightforward way to integrate my favorite tools together, it's time to reinvent the wheel. My publications, along with media, are living in the 'posts' folder, following the naming convention: yyyy-mm-dd-title.md. On the other hand, my blog retrieves the list of articles from an index record inside the database; it's just a list of posts along with metadata. One interesting field is checksum, which I use to determine if the post has been edited. To keep my posts in sync with the database, I created a script that does the following:

  • If a post is not in the index, create it.
  • If a post is in the index, compare the checksum, and edit it if needed.
  • If a post is in the index but not in my folder, remove it.

The key of the actual post is its name, so I don't need the index for directly accessing a particular publication. All images are embedded into a post as base64. This approach does the job for my small website, but storing images on a CDN would be more preferable.

My vault is stored on GitHub, and the script is deployed as an Action. I do have git integration plugin installed for the Vault, so publishing the post is basically a commit.

While it's not an ideal solution, it does the thing for me, allowing to use tools I love and making the process a bit more enjoyable.

Subscribe for daily updates on software development, productivity, and more.