I’ve been chasing a blog that’s “good enough” for a while. My first real blogging experience was as a Peace Corps volunteer in Uganda in 2018-2020. Sharing these new experiences with friends and family back home was not only gratifying, but also served as a method of communication and a way to process all sorts of feelings that came with one of the richest and most intense times of my life.

I used WordPress, which was slow but simple, and allowed me to upload and host media cheaply and quickly from my phone, which was good, since I often didn’t have access to enough power to charge my computer.

It was a great blog because it was good enough. It also had many shortcomings that I thought about over the years, pledging to create an improved blog one day.

I’ll admit I fell victim to letting “perfection become the enemy of good enough”, and as a result didn’t have a blog for many years. Inspired by the seamless and brilliant application Milanote, I fantasized about building a custom blog from scratch with modern web technology.

Luckily, I never finished. What a disaster. I found a framework called Quartz, which I found encapsulated 80% of my needs in a blog, and was more open-sourced and configurable enough to reach the next 19%.

Using quartz was incredibly joyful. I’d just started my batch at the Recurse Center and I was once again desperate for a platform to catalogue and share my thoughts.

I had a new blog up in a day or two, and it turned into a fantastic way to learn generously and to broadcast my ignorance to many people much smarter than me so they could tell me more about what I didn’t know about leetcode, embedded computing, javascript, 3d printing, and a lot more. It turned into the first generation of the blog you are reading now.

Since then, I’ve forked and modified the underlying Quartz repo a bit to my specific preferences. And I’m really happy with it!

Now that I have something I like, I want to share the characteristics I have been aiming for in a blog and why I think they are important:

Permalinks: Content changes, and so does the file organization of any body of knowledge. If these changes break links that have been shared in the past, no continuity can be built between a blog and its readers! One dream I have is that things I write can become permanent parts of the internet, things that at least a handful of people refer back to and find useful. Therefore, it’s important that custom permalinks are easy to create, and this is what the user sees displayed in their URL bar so that when they bookmark the link to an article, they are bookmarking the one the author wants them to.

A) Additional permalinks / redirects should also be possible though, in case a permalink DOES need to be updated for some reason. This allows for some flexibility while ensuring old permalinks never break

B) Top level links: it’s useful to organize files into folders, and it’s useful to be able to move them around many times over their lifetime. A good blog allows this to happen as many times as the blogger wants without affecting the permalinks at all. To that end, I think all permalinks should be top-level.

Folders, tags, and timelines All that said, I think a good blog provides some tools to show content in an organized manner to a user. Quartz makes this easy.

A) Folders, which are links in themselves, show a list of all articles within a folder, in chronological order B) Tags similarly get a URL as well, allowing blog articles to be grouped in more creative ways

Backlinks Building on top of the certainty that permalinks will never break, I think a great blog builds on not only the context of the internet and the world around it, but also on its own content. Obsidian, which Quartz is built on, is designed around a central capability of flexibly linking markdown files to other markdown files, and even visualizing the web of relationships formed as a result.

Random Epiphany: Obsidian, a markdown-based notetaking application, is by nature private. Like its igneous namesake, it’s opaque. Whereas quartz is clear, translucent-to-transparent, like a blog sharing some of ones ideas with the world!

Collocation with Notes By deploying my blog as a subsection of my notes, I get to have one central place to keep all my ideas. Out of that single set of stories, music, lists, and all sorts of other documents, I choose which I want to share and by default keep the remaining ones private.

Portable A good blog should be portable. None of its content should be especially hard to grab and pull out and put somewhere else. My blog achieves this in two ways:

  1. Because quartz just deploys markdown files as static content, those markdown files can be used an all sorts of other ways. Markdown is parseable programmatically, readable by humans, and can be opened by any text editor. It’s easy to copy and paste and to drop into HTML.
  2. Using a plugin from Obsidian, I am uploading all media files to a big S3 bucket. As a result, all media is in a big, flat list. I can download it and re-use it elsewhere. The S3 destinations are hardcoded into Obsidian, so it would take a bit of process to change all those links, but it is possible to parse through all S3 urls and change them if I ever wanted to host them in a different way.

But I have created some utilities that can scroll through my entire Obsidian vault and check all of the media links that exist throughout. I did this so that I could automatically delete any orphaned files, but it is also a good foundation for changing all URLs if I ever need to, and also getting some file management tools, like how many files do I have, how big are they. I could even create a utility to resize them if any are getting too big and expensive to host.

Iterable I want a blog I can preview, that I can change and see live results.

Mobile I want content that can be viewed on multiple devices and a website that can be too.

Anyways, that’s what I want in a blog, and I’m happy I’ve found an implementation that delivers on that. If you are interested in implementing any of these characteristics in a blog maybe this guide will help, and I’d be happy to help if I can, or hear about the characteristics you want in your garden/blog/sharing platform.