Skip to content

Colophon

for phillipharrington.com Updated: Apr 2026, Smithfield, NC

My CMS is Just HTML... Kinda

This website is static HTML built with Vite, Tailwind, and graspr-build — a small build package I made that turns custom HTML tags into plain HTML at build time. The "Kinda" part is those custom tags: I write things like <lnk>, <heading>, and <spaced> instead of repeating the same markup on every page. I wrote about it in HTML is Fun Again.

To write an article, I typically dictate my thoughts into Notes on my phone then edit at the computer. To publish it, I simply make an HTML file in my content/pages directory, and the build script handles the rest. When it's that simple, you'd think I would publish more often 😂

The code is here, and graspr-build is here, if you're curious.

Abstract URLs

The abstract URLs, e.g. /about, are simply HTML files without an extension containing the rendered output. During the build, I apply system metadata in the S3 bucket so they have Content-type: text/html applied to them and will render in the browser. No SPA. No routing or anything. But the pages load fast, it's just as good.

Locally I develop with the Vite dev server, which handles live-reload and serves the abstract URLs the same way production does — no extension, no trailing slash, no redirect. A small Vite plugin from graspr-build renders each page on the fly from the source files in content/pages.

A TailwindCSS Convert, Finally

The site uses TailwindCSS, which I finally converted to, but the notion of using it with a team and having a common framework for CSS is what sold me, so I'm using it here, too. It's honestly one less thing to worry about.

Other than that and the JS hamburger menu script, which I never update, all I have to do is write content, which I hardly ever get around to doing. No node-sass or any other junk just to slap together some HTML. It's refreshing.

Hosting is Just S3

The site is served from an AWS S3 bucket with a CloudFront distribution in front of it, which is why the pages load so fast. (And even that seems like an extravagance, when I could just as easily slap this mother onto GitHub pages and put Cloudflare in front of it.) I also use AWS for the SSL certificate and domain name. No database. No server-side junk. No container.