Colophon
Unapologetic was built on the phenomenal Astro web framework. It is written in valid HTML and CSS, and vanilla JavaScript. All interactive elements on the site — from pop-up footnotes to the theme switcher to the ridiculous cavalcade of easter eggs — are powered by organic, free-range, hand-coded web components.1 The site is served static from the edge by Fly.io. Every line of code was written by a human.
This website was built with the Zed code editor (as well as some earlier work in Nova). SVG elements were created in Pixelmator Pro or Affinity Designer 2. Words are written in Markdown, and likely conceived in Obsidian.
This website is fast. It consistently notches near-perfect scores on PageSpeed Insights and WebPageTest. Most pages weigh in at around 200Kb, and the vast majority of those bytes are font files which get cached after your first visit. Actually, pretty much everything gets cached after your first visit. There are further optimizations to be made, but shipping with no JavaScript framework and zero post-build external dependencies does wonders for your baseline.
Speaking of fonts, Unapologetic’s title and headers are typeset in Magnet. Its text is all Mallory. Both are by the inimitable Tobias Frere-Jones. Code blocks, as I like them in my own editor, are Intel One Mono.
This website is accessible. I am working towards full conformance with the WCAG 2.2 level AA accessibility standard. As of launch this site should already be close to that bar, but I expect there are still misses on some guidelines. I’m working my way through Sara Soueiden’s excellent Practical Accessibility course, and am applying those learnings here as I build knowledge in this area.2
Unapologetic has no interest in your personal data, but it does take interest in coarse-grained page view counts and user-agent information. This data is anonymously collected using a custom-built, privacy-preserving API. It’s loosely based on this example by Bear Blog, but with a number of improvements. At a high level: IP addresses are concatenated with user-agent strings and obfuscated through a keyed hashing function for the sole purpose of sorting out daily unique hits from repeat visitors. Each night at midnight, all data from the prior day is compacted into aggregate hit counts for each page on the site. Post-compaction, the day’s hashing key is recycled for a new one, and all IP/user-agent hashes and their associated data are deleted. Thus, within at most 24 hours from your last visit here, even the minuscule amount of data that could vaguely identify you is permanently erased.
While I hope it’s clear that this website goes above and beyond to maintain your privacy, your page views are still your data, and thus should be yours to control. If you’d like to opt out of Unapologetic’s anonymous aggregate hit counting entirely, I believe it’s your right to do so. Click this link to stop sending anonymous view counts to this website.
Building this website has been a labor of love. I’ve been thinking about this project for the better part of a decade, and I’m beyond excited to have finally completed it. If you like what I’ve done here, or just want to yell at me about how much of a waste of time it is to build elaborate easter eggs that no one will ever notice, I would truly love to hear from you.