summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Spek <p.spek@tyil.nl>2025-12-17 14:54:18 +0100
committerPatrick Spek <p.spek@tyil.nl>2025-12-17 14:54:18 +0100
commit517d566b9a9184834b617a786998f49355874474 (patch)
tree3172269d3e045edc0ab0d00cf696dd3a7ae03ba6
parentbc9ddbeece68b3ee371ee4e945f9bdc017fd14d6 (diff)
downloadblog-517d566b9a9184834b617a786998f49355874474.tar.gz
blog-517d566b9a9184834b617a786998f49355874474.tar.bz2
Add A Dashboard for my Homelab
-rw-r--r--content/posts/2025/2025-12-17-a-dashboard-for-my-homelab.md69
1 files changed, 69 insertions, 0 deletions
diff --git a/content/posts/2025/2025-12-17-a-dashboard-for-my-homelab.md b/content/posts/2025/2025-12-17-a-dashboard-for-my-homelab.md
new file mode 100644
index 0000000..2c7d6d4
--- /dev/null
+++ b/content/posts/2025/2025-12-17-a-dashboard-for-my-homelab.md
@@ -0,0 +1,69 @@
+---
+date: 2025-12-17
+title: A Dashboard for my Homelab
+tags:
+- Go
+- Homelab
+- Programming
+---
+
+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](https://awesome-selfhosted.net/tags/personal-dashboards.html) for this
+purpose. If only I liked what was available already.
+
+After trying a few, I found [mafl](https://mafl.hywax.space/) 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](https://grocy.info/), 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 or me. I experimented a little with storing
+the information in a database with [GORM](https://gorm.io/), 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](https://dist.tyil.nl/dashlab/dashlab-1.0.0/), and include it as a
+[project](/projects/dashlab/releases/) 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!