A Dashboard for my Homelab

Go Homelab Programming — Published on .

I was hoping to make a final blog post this year detailing the latest changes I made to my homelab. However, while trying to finish up, I was looking for a small dashboard to list all the services I’m hosting so friends and family can get a nice overview. As such, you’re getting a blog post about my homelab’s dashboard instead!

I’ve looked around for some pre-existing free software I could just deploy and be done with it. If it were that easy, I wouldn’t be having a whole blog post to write! Well, it could’ve been that easy, there’s plenty of existing projects for this purpose. If only I liked what was available already.

After trying a few, I found mafl to be the cleanest. But while setting it up, I realized a number of applications that I want to have easy access to, might not be very useful to other people. Furthermore, some of the applications I host, such as Grocy, are useful for me and my fiancee, but not so much for friends living abroad. I wanted to be able to filter out entries.

So I looked around some more, and found absolutely nothing offering this functionality. Its just a page with some links, how hard can it be to make myself? Lately I’ve been enjoying some Go programming, so perhaps this would make a nice project to get a bit more in to it.

After spending some time looking up how to do basic things, I found http.ServeMux to do the routing for me. I experimented a little with storing the information in a database with GORM, but realized after 2 days its not worth the effort. Besides, I’d have to create and secure an administration area, which is more work than I wanted this to be.

Thinking back about mafl, I thought I’d just set it all up with a simple YAML file. Its simple to configure for the end-user (me), while also being simple to implement for the developer (also me). As a small bonus, this means I can template the YAML file from Terraform code, which would automatically update the URLs to services if I ever change them, or complain if it’s trying to list a service which I’ve removed.

After a day or two of hacking around, I got something I was satisfied with, and seemed to work as desired. I built a container out of it, and deployed it. Asked a few friends to verify, and it worked in a single test round.

I found some free (as in freedom) icon sets to include, so its easier to find the link you’re looking for (again, inspired from mafl). I do think I’d want to add some generic icon set in the future, but for now its not a very high priority. I’m also not entirely sure I want to include the icons in my git repository, but they are SVGs, and thus technically just text files, so its not a sin in my book.

Lastly, I added a Makefile to make building just a little easier, with a dist target to build for a plethora of free software targets. This is mostly for my own convenience, so I can just copy over the dist directory from the project to dist.tyil.nl and call it a release.

With all this done, I felt ready to release a proper v1.0.0, and include it as a project on my blog. Now I can finally focus finishing up the complete rework of my homelab. With some luck I could finish up before the end of the year and write another blog post about it. Realistically speaking, however, I wouldn’t count on myself to write another blog post so soon. So if luck is not on our side, a pre-emptive warm wishes for 2026!