I’ve always been reluctant to post content to the internet. I’ve made an effort in the past to delete old posts and accounts when I got old enough to hate them. Even things like open source software that I create I’m often afraid to promote on the basis of it not being perfect and immune to scrutiny. I’ve come to find, though, that perfection is impossible and no one actually sees your stuff anyway - but if many do, then maybe you’re already doing something right.
Context
My first software job was on-site web development at a sports supplement company. Protein powder, bodybuilding, stuff I’m not really into. The development team at the time was just the team lead and 2 cousins, Chris and Ricky. Cool guys. In fact, you’re probably one of them, as they’re likely the only people who will ever read this post.
I worked there for a little over 2 years until Ricky suggested I look into Rust while he was researching blockchain technologies during a crypto boom around 2021 because of course, Rust is used to write smart contacts on Solana. I was never really into blockchain, and Ricky’s interest was also short-lived, but he saw the potential in Rust for general use so I looked into using it as a backend language with Rocket and similar.
I left that company to pursue this (they also left shortly after; such is life). I eventually started taking some Rust contracts, and Chris and Ricky and I remained friends. Ricky recently started his site & blog and gave us a challenge:
The blog
There’s already Zola which I’m sure is great for blogs, but we could go lighter. Plus, Zola uses pulldown_cmark to do all the heavy lifting of converting markdown to HTML, so after I implement that:
fn markdown_to_html(markdown_input: &str) -> String {
let parser = Parser::new_ext(markdown_input, Options::all());
let mut html_output = String::new();
html::push_html(&mut html_output, parser);
html_output
}
There’s not much else to build to warrant using Zola. This was the hard part and pulldown_cmark did the work for me.
The site isn’t much. You can see the source here. On launch, it reads the blog post files and persists it in memory (Rocket’s managed state). I figured this is better than reading the files on each GET, and it’s not like this blog will ever have enough posts for memory to be an issue. It’s simple enough that I think a database would be overkill. Maybe if I add comments, but frankly, I don’t want these pages to be soiled by user-generated content. When I add a post, I can update the managed state by visiting this reload endpoint which only runs if it’s been more than 10 seconds since the previous reload request.
The frontend uses Tera via rocket_dyn_templates. No frontend frameworks beyond that. The CSS logo at the top I created with pixelartcss.com, and the background animation JS (visible only on wider screens) I initially wrote for elg.gg.
Posts are stored in the static/posts
directory as markdown, with toml front matter at the beginning:
+++
title = "Airplane Mode"
date = "2025-06-30"
+++
Content goes here
The slug used in the URL is determined by the file name. This post is being sourced from this file.
I also added an RSS feed. I don’t personally use an RSS reader but it passes the W3C validator so it should be good.
The future
I don’t know if I’ll be able to commit to posting here at any reasonable frequency. The future of independent online blogging looks bleak, what with microblogging platforms and the exponential growth of LLMs muddying things up. You can’t tell if someone actually wrote what they posted anymore, and I got this far in life without feeling the need to post long-form content.
The majority of this post (minus the “The blog” section) was drafted during a flight to PAX East (hence the post title), during which I had no internet so maybe I’ll write again if I find myself in a similar situation. I didn’t have this blog site built at the time of writing so it took a month before I got around to building the site, revising this post, and publishing it. Maybe the existence of this site will be a motivator to continue writing. You’ll know I’ve ran out of topics when I post a dissertation comparing the GameCube port of Sonic Adventure 2 to the Dreamcast version.
Thanks for reading.