Colophon
This site is built with Astro and deployed via GitHub Actions from my (currently private) GitHub repository onto a VPS that I rent from Hetzner Online. The domain, bower.blog, is through Namecheap, and I use Cloudflare for my DNS routing. Page styling is mostly handrolled using Tailwind CSS and is designed to be fairly lightweight — I’m not using any webfonts, for example.
Posts are authored in Markdown (.md or .mdx), and photographs are hosted on
Cloudflare R2. Smaller images like icons are
served directly from my VPS.
Additionally, I host a small API on my VPS written in Python and FastAPI, also deployed via GitHub Actions.
The /rides page is sourced from my Strava activities, where I have a webhook set up to send activities to my server, where they are processed, pseudonymised, and converted into an SVG. These activities are then added to my static site config by way of an automatically raised pull request.
I have a similar process for my /photos with an endpoint to upload
the image artifacts to R2, and then raise a pull request in my repository with
a reference to the image. I have a Shortcut on my iPhone to POST to this endpoint
from the ‘Share’ sheet, so I can seamlessly upload from my camera roll.
/books and /theatre are currently manual processes and will probably remain so — I like to review and rate these things at the same time as logging them.
I generally maintain this website on a MacBook Pro M4 Pro in VS Code, though I sometimes make minor tweaks in the GitHub app on my iPhone when on the move and, on even rarer occasions, the Termius app for VPS access over SSH. I sometimes use AI tools like Claude Code for code changes, but never for the content itself. My full AI policy is at /ai.
I do not track you or anything, really. There are no cookies, no analytics, and no logs kept of your visit.
- Revision:
- 3 (
6dc740a) - First published:
- Last updated: