Homelab
This originally started as an attempt to deGoogle my life and become more privacy conscious. It was partly practical and partly an act of protest against the steady en-shitification of consumer software into subscriptions, corporate surveillance, walled gardens and services you never quite own.
At first I just wanted somewhere to store my files and run a media server.
It has since started becoming the backend for much of my digital life: reading, writing, research, automation, personal data and my second brain.
The lab
The lab runs primarily on Proxmox, with TrueNAS providing the storage layer and a collection of Linux environments running the services around it.
A lot of it has been designed around a few recurring ideas: privacy, security, data ownership, self-hosted software when possible and a general resistance to needing yet another subscription for something my own computers can do perfectly well.
At the moment, the lab spans:
- Storage and backups
- Personal media
- Networked audio
- Development environments
- Git
- Automation and scheduled jobs
- Ebook and article delivery
- Local databases
- Open-weight AI models
- Research infrastructure
- Personal knowledge systems
The fun part is making all of those things talk to one another.
A brief love letter to Tailscale
Tailscale, my beloved. If you were a human being, I would make such passionate love to you that my router would file for divorce.
It is probably one of my favourite pieces of software ever made. Raw networking is such a pain in the ass: port forwarding, random open ports, firewall rules, WireGuard keys, dynamic DNS, NAT traversal, CGNAT, routes, and genuinely an endless array of things that can fail for reasons known only by God and your router.
But Tailscale just deletes most of it.
All you do is install and authenticate the machine, and suddenly servers scattered across various networks act as if they're in the same room.
My NAS follows me. My services follow me. My workstation follows me.
MagicDNS means I don't need to remember IP addresses, NAT traversal happens without me thinking about it, and I don't need to punch holes into my router every time I want to reach something remotely.
I love you Tailscale.
Reading
Reading is probably one of the cooler parts of the entire system.
The summer after completing my undergrad, unemployment left me with an unusual amount of free time. Most of my friends were working and I suddenly had very little structure to my days, and so I spent an unreasonable amount of that time reading.
At one point I was finishing a 300β1,000+ page book roughly every three days.
Check my StoryGraph. It's true.
The problem was that I mostly read on a Kobo, and sideloading books onto it was really fucking clunky.
My normal process looked something like:
Download book β open send.djazz.se on my computer β
open the Kobo browser β Settings β Experimental Features β
Browse Internet β send.djazz.se β synchronise codes β
upload from source device β receive on Kobo β download β
finally read It works.
But it also feels really ridiculous when you do it enough times.
It might only take a few minutes each time, but I really didn't like the friction. I also had Instapaper half configured, articles saved in various places, notes & highlights trapped on devices and books living in an entirely separate ecosystem.
So I eventually sat down and asked a slightly more ambitious question:
What would it look like if books, articles, papers, highlights and notes were all parts of one continuous reading system?
The pipeline
From my perspective, the entire user experience is basically: upload a book or save a bookmark, and a few seconds later it's on my Kobo.
Underneath, the current flow looks roughly like this:
Ingestion β Karakeep β Kobo Queue β EPUB β Kobo
And on the way back:
Kobo β Reading Database β Obsidian / StoryGraph I built a small Reading Hub where I can submit links, articles, papers, books and other material. I also use the Karakeep browser extension for quickly saving things I encounter while browsing.
Eventually, I'd like to build a proper Reading Hub extension connected over Tailscale, so sending something into the system is effectively instantaneous from any of my devices, anywhere.
Everything first flows into Karakeep, which acts as the inbox and capture layer for the system.
From there anything I actually want to read can enter a curated Kobo Queue. Web pages are cleaned up, converted into EPUBs and delivered wirelessly through Calibre-Web. Instapaper acts as a fallback for pages where extraction becomes awkward.
Once I've read something, the flow reverses.
Reading state, annotations and metadata come back from the Kobo and are reconciled into a canonical local reading database.
From there:
- highlights and notes flow into Obsidian
- reading history can be analysed locally
- StoryGraph receives a controlled external projection of the library
- sideloaded books can still participate in the same system
- the canonical copy of the data remains mine
And because the infrastructure sits behind Tailscale, the reading system is always available to me without exposing the underlying services directly to the public internet.
The eventual goal is for books, articles, newsletters and papers to move through the same pipeline regardless of where they originally came from.
On paper, this probably sounds fairly simple.
But I have sunk well over 130 hours into it.
There are a surprising number of ugly edge cases hiding behind phrases like "sync reading progress", "convert article to EPUB" and "match this sideloaded book to StoryGraph".
I'll probably write about the technical side properly at some point.
But it works astonishingly well.
Mostly.
Obsidian second brain
I don't particularly want a gigantic folder containing thousands of disconnected notes. I want a personal knowledge layer that can connect what I read, what I write, what I'm researching and what I'm building.
I'll update this when it's progressed.
Local AI
This is more so of an "I promise I'll do this when I have more money" type of thing, and not an actual project.
But I will manifest it into reality.
Automation
The best part about homelabs is all the small boring things they do when no one is watching.
A script that quietly moves something to the right place. A scheduled job reconciling two databases. An article appearing on my Kobo without me ever connecting a cable. A highlight from a book turning up inside my Obsidian. A service noticing something has changed and dealing with it before I even think about it.
All of these are small changes, but together they increase quality of life in a way I simply can't numerate.
Not everything needs to be self-hosted.
There are plenty of cloud services I happily use when they are useful.
But running my own infrastructure gives me the freedom to connect things that were never designed to work together. It lets me keep canonical copies of important data in formats and systems I control while still using external products when needed.
There is also a political element to it.
I really don't like the direction in which a lot of consumer technology has moved: perpetual subscriptions, disappearing ownership, locked ecosystems, products becoming services, and copious amounts of personal data being collected simply because collecting it is possible.
Self-hosting isn't some complete escape from that world, nor do I think everyone should run a server rack in their house.
I just like having the option to say no.
And operating real infrastructure is one of the best ways I've found to actually understand how these systems work rather than treating them as magic boxes.
More than anything, though, I like knowing that if two parts of my digital life should be able to talk to each other, I can probably make them do it.