How I ended up building this site with Anchovy
Somehow, after over a decade of working with HTML5 and CSS3, and after building
site after site for open source and non-profit projects, I have finally put
together a website for myself. (The one I slapped together in an hour using vim
over SSH definitely doesn’t count!)
A multitude of blogging platforms and frameworks already fill the world. The
same can be said for website platforms, website frameworks, and static site
generators. So why a new framework for this site?
The answer, of course, is that none of them were quite what I wanted. Flask +
Jinja2 is nice for sites with enough dynamic content to justify the hosting
costs, but a personal website with a blog isn’t likely to cross that threshold,
and will require building out some boilerplate anyways. I did encounter and
appreciate Microbe, and even launched a
blog using it, but that project never supported website functionality, did not
offer a way to version control and preserve content, and was eventually left
unmaintained.
My next blog platform was Medium, which offers complete functionality without
demanding almost any sort of setup or maintenance, but requires a subscription
to do much customization or even to use your own domain. An, of course, it is
entirely impossible to build a website on the platform.
As building a personal website moved up my agenda, I determined that an SSG
would be the best choice, both in cost and maintainability. But I knew I didn’t
want to use something like Jekyll that would force me to completely abandon my
comfort zone in the Python web ecosystem. Since I had worked on a non-profit
project using Nikola, I felt comfortable enough with
the framework— but after porting another open-source website I quickly realized
I would be spending almost as much work stripping away the provided assumptions
as I would save by using it.
Flashback to Blot. A Python SSG
framework built by a friend, Blot captured my attention with its minimal
assumptions and pipeline processing structure. But the author moved on to the
React/Gatsby ecosystem before building much functionality or robustness into
the system.
Back to the present, I started digging through lists of Python SSGs, and
finally came across staticjinja.
This framework was actually too minimal, but included an example application
with markdown injected into Jinja templates. I decided to synthesize the
inspirations of Blot and staticjinja to my own SSG framework, which I would
engineer to soothe my inner perfectionist and satisfy my personal tastes with
minimal assumptions and dependencies and maximum extensibility. Along the way,
I settled on the name Anchovy, created
a dependency reporting system, and hand-rolled my own CSS preprocessor, with
the end result that this site requires very little custom code and zero
non-Python dependencies. Best of all, DigitalOcean builds and deploys the site
automatically when triggered from GitHub, so updates are painless enough to
actually create, and I don’t have to carefully store or remember a credential
for a random VPS.
So that’s the story of how this site came to be. Though I didn’t dive into too
many technical details, I hope to walk through Anchovy and some of the
engineering for d48.io specifically in further posts in the near future.