I made a decision!
2025-05-16
I made my decision! Drum roll please …
I decided to stick with the DIY spirit that I started my site with. The new
site is composed entirely of Go templates and some plain ol’ HTML/CSS/JS. No
fancy frontend library. I found this great site, html5up, that had
several classy lookin’ site designs that called to me. I picked the
“Editorial” theme because I like the clean lines, the orange accents, and the
“newspaper-y” feel.
In the end, I realized that I enjoy slinging Go code. It makes me happy. I’m
more likely to stay up-to-date with my site if I enjoy the process of updating.
I love the standard Go templating library with its rich
feature set. The Gin web framework supplements pretty much all of the
rest of my needs.
To help facilitate my new bloginess, I’ve made a few key changes to my site
codebase:
- I use gomarkdown for rendering my blog posts from Markdown to
HTML. I like having the metadata for my posts embedded in the Markdown
itself, so I’ve embedded the metadata as YAML front matter. Currently I need
to parse this myself; hopefully I can find a library that will do this work
for me.
- I use a Go library, minify, to compress
my CSS and JS files used for the site (especially the JS games). Previously,
I had used a pipe in my Gulp build script for minification. Now, I use
the Go minify library to compress my JS files when the server starts up.
- I composed the site almost entirely of Go HTML templates. Working from the
Editorial html5up files, I’ve abstracted the nav, sidebar, header, landing
pages, and list pages into Go templates.
- I further decoupled the content of my site from its presentation. I’ve
moved the site text into a series of JSON and YAML files. The Go server
hydrates the HTML templates at serve time. This way I can update the content
of my site without pouring over the site HTML. (Note: at some time in the
future, I think I will move all of the content/data files to YAML format–it’s
just easier for me to read.)
Let’s see how I did on meeting my original requirements:
- [x] Make it easier to post blog posts. On the whole using
gomarkdown to
render my Markdown blog pages as HTML should make it easier for me to blog.
- [x] Use a single toolchain. Of all requirements, the new site design
really shines here. All I need is
go build . and go run . to get my site
Go-ing. (Sorry, I couldn’t resist the bad pun.)
- [x] Maintain and publish my JavaScript games. This also is a big win,
as I don’t really need to change any code in my Go application to continue
serving the JS games. With that said, I did make some changes to improve
the UX of the games and to host them in the site chrome.
- [x] Has a clean look and feel. This template from html5up.net is exactly
what I was looking for. I spent so much time pouring over paid, free,
freemium, and highway robbery-priced templates available for TailwindCSS,
Bootstrap, Astro, UIKite, Foundation, Hugo, and others. So many others. I
finally decided that I just needed something that looked nice and had a
logical layout that I can expand on.
- [x] Allow for code reuse. I can continue to use the cloudbuild.yaml and
Dockerfile that I was already using for my site. I can reuse the JavaScript
video games as-is. The rest of the content … well, I have some migration to
do.
- [x] Has a server-side component for me to tinker with. Oh yeah. The
fundamental Go & Gin web framework that I was using already isn’t going
anywhere. In fact, I’m doubling down!
Honestly, I haven’t felt this much satisfaction or experienced as much “flow”
state in updating my personal portfolio site in a long time. I find myself
excited to continue building out new features, simplifying my code, and
posting my thoughts to this blog.