The Interface is Destiny

Sat 26 Jul 2025

I’m rebooting this blog, and in doing so I’m trying to overcome some of the problems that I’ve faced in the past.

As a developer with a lot of frontend experience and exposure to usability theory, I know that, in a maxim, the interface is destiny. The previous incarnations of this blog were annoying for me to use:

  • Very early (distant-past) versions of this blog used Wordpress, as was the fashion of the day. But in WordPress is a form of sensory hell for those of us who value usability, flexibility, and hackability. Moreover I couldn’t stand the idea of my writing disappearing into an abyssal, opaque database that didn’t live on my own drives, wasn’t versioned, and could be lost to data corruption or storage failure.
  • Intermediate formats used everything from Buttondown to Patreon to Ghost to Medium, but none of these products made me feel good about my choices; while there are aspects about each that I respect, I felt frustrated with each for a variety of reasons; and since the loss of Twitter and the Great Dewokening of Meta, I’ve also become sensitive to the importance of owning one’s own data and platform. (And before you ask, Substack is off the menu for personal reasons.)
  • A couple years ago I attempted to produce a glossy, scrollytelling-forward version of this website powered by NextJS and a custom blog platform I was working on called Sbstr8. But I got a new job and, after spending all day in React, I couldn’t countenance spending my evenings in it as well. In addition, the format I adopted – image-heavy and animation/WebGL/code-friendly – just isn’t sustainable for a single author working in her spare time. And although Emmet makes .jsx and .tsx faster to type and easier to stomach, it is a poor substitute for Markdown. Finally, the absurd bundle size created by NextJS, plus the costs of hosting what is essentially a dynamic NodeJS app, pushed me over the edge. There is no way a blog should involve a multi-megabyte javascript bundle, no matter how clevery broken up and factored. No blog should require anything more than a static host. This is a form of unprincipled anti-engineerism.
  • What I came up with instead I’m pretty happy with. I call it the ZNAT stack – Zola, Neovim, AWS Amplify, and Terraform. I’ll be writing more about it in my next post, but you can already play with the blog template I’ve created from this site. Feel free to fork.

The ZNAT stack has the following properties:

  • Markdown-driven
  • Extensible
  • Neovim-friendly
  • Affordable to host, because AWS Amplify
  • Site is fast-loading with good SEO
  • Infra-as-code (via Terraform and a few other tricks)
  • Buttery-smooth workflow – edit Markdown, commit to git, push to github, and wait about sixty seconds

I’ve spent about two weeks of personal time working on this, off and on, and I’m happy with where I’ve landed. I’ll be getting particular next post. But in the meantime, I’m celebrating a cobbler’s happiest moment: creating a sturdy, beautiful pair of boots that are also so comfortable you just keep walking. 👢

RSS
https://www.lizmars.net/posts/feed.xml