
Travel and photography are two hobbies I enjoy, and they naturally pair well together. On many of the trips I’ve taken over the past 10 years I’ve kept a running log of where I’ve been, what I’ve done and what I’ve seen. The Hugo static site generator is a simple, easy to use way to publish content on the web; and it allows you to develop themes for different types of content. I built a custom Hugo theme, which I named ‘hugo-traveler’, to render my travel log.
The ‘hugo-traveler’ theme is currently on its third iteration; and I am quite happy with it. It uses the PhotoSwipe JavaScript framework to render the photo galleries, and supports both static SVG maps as well as dynamic maps using the MapLibre GL JS framework. While the theme was built to power my travel site, it is open for others to use. You can see it live here.

I wrote the Deskpad program as an exploration into dedicated program UX which didn’t involve a screen-based UI. It allows me to use an Elgato Streamdeck to control different functions in my office. It is currently used to manage music playback through Spotify using both the Spotify APIs to retrieve media content, and the D-Bus MPRIS protocol to control the Spotify client. I had to fork and extend a Go MPRIS SDK in order to handle some specific oddities of the ncspot client. It also displays view weather information on a Bluetooth-connected Divoom Timebox Mini speaker/screen. I built a Go weather server which retrieves weather information from both Environment Canada and NOAA APIs, and I also built a Go SDK for the Divoom Timebox protocol to allow the deskpad client to control the Divoom display.
My most successful contribution to the open-source community has been the development of a Go wrapper for the Google Smart Home Action APIs. Originally built for a personal project, I open-sourced it in 2022, and it has seen pull requests from multiple other contributors extending its functionality in the past few years. I am not actively developing it, but I still review the pull requests I receive.