OK, here we are, on my website. How is it generated? How is it hosted?
First, let’s talk about the context. The technical constraints always come from the context.
This is a very low traffic site, with only static content. It contains a basic website, plus some downloadable PDFs of things I wrote.
That’s already a very different problem from the things I work on at work!
Priorities
First of all, since this is my project, I get to choose the priorities.
- I care a lot about the content. There isn’t a lot of new content here, but what’s here should be solid.
- I care about site performance. Fortunately, static HTML on modern hosting is already fast, so I don’t have to do much to improve it.
- I care about continuity. If I publish a piece of writing here, I want the link to keep working indefinitely.
- I care about basic security. Note 1: Don’t run web applications unless you can commit to security patches… Note 2: I do have a valid TLS cert now. Though I certainly didn’t have a TLS cert in the early days - nobody did, not for a site like this. I remember when I first wanted one, it was still a huge pain to get a certificate — you had to buy it through some awful DNS registrar package deal, and manually download new cert files every time it expired. Now I just use letsencrypt.
- I care about minimizing useless maintenance overhead. I care about avoiding unnecessary runtime dependencies (which can in turn create security issues).
- I use this site to stay in touch with basic Linux administration and old school web technology. I like tinkering with my own HTML. I like poking around at nginx configuration. I like remembering how much you can get done with something super, super basic. No containerization here, not so far.
- I care about minimizing hosting costs (up to a point).
In sum, I’m here to learn a few new things, play with servers a little, and keep a stable web presence.
Non-priorities
There are also some things I don’t really care about.
- I don’t really care about analytics or server monitoring (as long as the server is not on fire).
- I don’t care about tracking inbound links.
- I don’t care about supporting discussion or dialogue on the site itself. I love talking to people, I just don’t have to run a forum right here.
- I’m not optimizing SEO. At all. But my name is already unusual so that’s doing some SEO all by itself.
Hosting
I’ve had a lot of web hosting arrangements over the years. I think the history was something like this:
- 1999: My very first, very silly website was static HTML hosted by my ISP. They had a unix system you could log into, back when small-town local ISPs were more common, the kind that could serve a website for every user at
server.com/~user
. I think you had to upload the files with FTP. It wasn’t encrypted, but using a dialup connection to their systems, maybe it wasn’t all that insecure? - 2000-2002: Every dorm room at my college had wired Ethernet, a public IP address, and a stable hostname. So I self-hosted my website from an ancient version of OSX (which had a built-in web server back in the day).
- 2003-4: I had a personal website in some sandbox folder of a shared campus web server.
- 2005–6: I was starting grad school and didn’t have a web presence for a year or two.
- 2007–2014: I registered this website and set it up on “shared hosting.” It was cheap but irritating; I disliked cPanel.
- 2014–present: Switched over to hosting on a cheap virtualized linux box. Originally it ran Apache, later switched to nginx. It’s boring. It works great. CPU load is usually near 0%.
Site generation
Historically, this site has always been basically static HTML, with hand-rolled CSS. I used to write a new stylesheet every so often, just because I could.
I’ve always supplemented the static files with some extra programmatic tools, when I needed them. For example:
- In 2002, the site was static, but it hosted some images on a Python-based web server, which provided analytics.
- From 2007 to 2022, I had a WordPress blog hosted in a subdirectory of the main site. I liked the (old-school) WordPress post editor, and I liked blog comments back in the days when people actually used to use them.
- In about 2013, I wrote some dynamic code to programmatically display my progress in writing my dissertation. It used data from a git repository history and from Asana (a task tracking application) to display the progress. The data on the server had to be updated periodically, with a script I invoked manually - I never needed to automate it.
- In 2016 or so, I wrote a Ruby script to generate the navigation menu for the static files.
- In 2022, I ported the static site over to Middleman to make it easier to maintain. I also like Markdown.
Right now, a static site generator is the sweet spot for me between “100% hand edited HTML files in a directory” and “100% dynamically generated content.”
I do wish I had a lightweight solution for contact forms. I used to use PHP for that once in a while, but only because I used to need it for WordPress. Now… 🤷♀️.
Conclusions
This site looks pretty basic, but it actually takes a lot of work over the years to keep it going. The requirements of the web are always changing. I don’t want it to look too dated. I want it to work on mobile. I want it to keep running for decades at a time.
Minimalism is not actually all that cheap, when you think about it.