Home avatar

vors

Latest recipes

All recipes →

Guides & how-tos

All guides →

Latest from the blog

Ntfy: Self-Hosted Push Notifications That Replace Twelve SaaS Webhooks

Count the ways your homelab currently tries to get your attention. The backup script emails you. Prometheus pages through some webhook. One app posts to a Discord you only joined for notifications, another insists on Telegram, a third wants a Pushover token you bought once and forgot about. Each new tool brings its own notification mechanism, and pretty soon your phone is being prodded by half a dozen different SaaS middlemen, several of which you’re trusting with messages like “the front door sensor opened at 3am.”

The Real Cost of Self-Hosting: Electricity, Time, and What You Actually Save

There is a story self-hosters tell themselves, usually at about 1am while staring at a rack of blinking lights, and it goes like this: “I’m saving so much money by not paying for all these subscriptions.” It is a lovely story. It is also, in my experience, mostly fiction — or at least a great deal more complicated than the version we like to repeat at dinner parties to justify the noise coming from the cupboard.

Whisper: Self-Hosted Speech-to-Text That Runs on a Raspberry Pi

I have a drawer full of Raspberry Pis that I bought with grand plans and then quietly retired. So when OpenAI released Whisper as an open model — actual weights, MIT licence, no API key required — my first thought was not “this will revolutionise transcription”. It was “can I make the saddest Pi in the drawer earn its keep”. The answer, with some caveats I’ll be honest about, is yes.

Traefik vs Nginx Proxy Manager: Reverse Proxies for the Rest of Us

Sooner or later, every homelab outgrows the colon. You start with 192.168.1.40:8989 for Sonarr, :3000 for Grafana, :8080 for the thing you can no longer remember, and you keep a sticky note of port numbers like it’s 2003. Then you want HTTPS, because typing passwords over plain HTTP makes your skin crawl, and suddenly you need a reverse proxy: one thing on ports 80 and 443 that looks at the hostname and routes the request to the right backend, terminating TLS on the way through.

Tahini and Halva Blondies with Sesame Brittle

Blondies are the unsung sibling of the brownie, and for a long time I treated them as an afterthought, a beige consolation prize for people who do not like chocolate. Then I started building them around tahini, and they became something I make on purpose. This version is fudgy and dense in the middle, with the deep butterscotch hum of brown sugar and the savoury, faintly bitter edge of sesame paste running all the way through. Pockets of halva melt into soft, marbled veins, and a scatter of homemade sesame brittle on top gives every square a glassy, caramelised crunch. It is sweet, yes, but grown-up sweet, the kind of thing you can eat with strong coffee and not feel you have ruined your afternoon.

GitOps with Flux: Letting Git Be Your Cluster's Source of Truth

There’s a particular kind of dread that comes from not knowing what’s actually running in your cluster. You applied a manifest weeks ago, then patched something live to fix an outage, then someone else tweaked a config map, and now the YAML in your repo and the reality in the cluster have quietly diverged. Nobody can say with confidence what’s deployed, which means nobody can rebuild it from scratch. That drift is the enemy, and GitOps is the cure.

Saag Paneer with Fenugreek

Saag paneer is the comfort dish of British curry houses for good reason: soft cubes of fresh cheese in a silky, deep-green spinach sauce. The twist here is two-fold. First, the paneer is pan-fried until golden and slightly crisp before it goes in, so it holds its shape and tastes nuttier. Second, a generous crumble of dried fenugreek leaves (kasuri methi) lends the savoury, faintly maple-like aroma that lifts the whole dish out of the ordinary.

Baked Eggs with Nduja, Mozzarella, and Basil

There is a particular kind of weekend morning that calls for something more than toast but less than a full sit-down production, and this is the dish I reach for every time. Eggs baked in a spiced tomato sauce are a global comfort, but the version that has earned a permanent place in my kitchen leans hard on one ingredient: nduja, the soft, spreadable, fiercely spicy salami from Calabria. It melts into the sauce like a secret, lending a smoky heat and a deep savoury richness that ordinary chilli flakes simply cannot match. With torn mozzarella going stringy in the heat and basil thrown over at the last second, it is brunch that tastes like far more effort than it is.

Brioche Feuilletée: The Laminated Brioche That Sits Between Bread and Pastry

I held off making brioche feuilletée for years because the name alone sounded like a dare. Brioche I could do half-asleep; lamination I respected from a safe distance, the way you respect a wasp. Putting the two together felt like volunteering to fail at both at once. Then one cold Sunday I had nothing planned, a block of good butter, and the kind of stubbornness that only arrives with the second coffee. By the afternoon I had a loaf that pulled apart in buttery, ribboned sheets, and I have been quietly smug about it ever since.

Coconut and Lime Cake with Toasted Meringue

This is the cake I make when I want to feel like I am on holiday in a kitchen that is, in reality, grey and drizzly and three minutes from a bus stop. Coconut and lime is one of those pairings that simply works, the way salt works with caramel; the sweetness of the coconut wants the sharp green edge of lime, and the lime wants something soft and creamy to lean against. The twist here, and the reason people go quiet when you bring it to the table, is the toasted meringue on top. Instead of a buttercream or a glaze, you swirl a billowing Italian-style meringue over the cake and blast it with a blowtorch until it scorches into something between a toasted marshmallow and a campfire memory.

No-Knead Overnight Sourdough Loaf with Roasted Garlic and Rosemary

There is a particular kind of smugness that comes from pulling a sourdough loaf out of the oven, and I have learned to lean into it. This one earns the swagger honestly: a slow overnight ferment that does almost all the work for you, blistered crust, an open and chewy crumb, and tucked all the way through it the sweet, mellow hum of roasted garlic and the resinous note of rosemary. It smells, on the day you bake it, like the best decision you have made all week.

Almond Financiers with Brown Butter

If you have ever stood at a French patisserie counter and quietly wondered what the little gold bars in the window were, this is your answer. Financiers are small almond cakes, traditionally baked in rectangular moulds meant to resemble bars of gold, with a crisp, faintly chewy crust and a soft, moist crumb that tastes intensely of toasted nuts and butter. They are a masterclass in how a short ingredient list can deliver an outsized result, and the single thing that makes them extraordinary rather than merely pleasant is brown butter.

TOTP and WebAuthn: Two-Factor Authentication Without Authy

There was a moment, somewhere around the third time Authy decided my desktop app should no longer exist, that I realised I had handed the keys to my entire digital life to a company whose roadmap I had no say in. The desktop client was deprecated, the cloud backup was a black box, and exporting my tokens turned out to be deliberately awkward. That’s the wrong feeling to have about the thing standing between an attacker and every account I own.

Running Stable Diffusion on a Budget GPU: What Actually Works Below 8GB VRAM

Every thread about running Stable Diffusion locally eventually arrives at the same smug conclusion: just buy a 4090. This is wonderful advice if you have a spare grand and a power supply that doesn’t sound like a hairdryer. The rest of us are sitting on a 6GB laptop card, an old GTX 1060, or a 4GB GPU that the internet has decided is e-waste. Good news: the internet is wrong, and I have spent enough late nights proving it to write this down.

MetalLB and Kubernetes Bare-Metal Networking: LoadBalancers Without a Cloud

The first thing that goes wrong when you build a Kubernetes cluster on your own hardware is the most anticlimactic possible failure. You deploy something, set its Service type to LoadBalancer the way every tutorial told you to, and then… nothing. kubectl get svc shows EXTERNAL-IP stuck on <pending>, forever, with the quiet patience of a thing that is never going to happen.

This is not a bug. On a cloud provider, type: LoadBalancer is a request that the cloud’s controller fulfils by provisioning an actual load balancer and handing you a public IP. On bare metal there is no cloud controller listening, so the request just sits there. MetalLB is the missing piece: it implements that controller for your own network, so a homelab or on-prem cluster can finally do the thing the cloud does for free.

Red Lentil and Coconut Dal with Crispy Curry Leaves

There is a particular kind of tiredness that only dal can fix. Not the dramatic exhaustion that sends you to the takeaway menu, but the low, ordinary fatigue of a Tuesday, when you want something warm and nourishing and you want it without a trip to the shops. This red lentil and coconut dal is my answer, built almost entirely from the cupboard, and it carries one small flourish that turns it from supper into something I actually look forward to: a sizzling spoonful of coconut oil shot through with crackling curry leaves, poured over at the last second.

Char Siu: Honey Five-Spice Roast Pork

Char siu is the glossy, mahogany-red roast pork that hangs in Cantonese shop windows, sweet and savoury at once. The twist here keeps the soul of it — a honey and five-spice glaze — while swapping fiddly skewers and a special oven for an ordinary roasting tray and grill. A tray of water below keeps the meat juicy, and a final brush of warmed honey gives that signature sticky lacquer and charred edges. Serve sliced over rice, in steamed buns, or chopped through noodles.

Writing CLI Tools in Go: From Zero to Useful in an Afternoon

I write a lot of little command-line tools. Glue that wires two APIs together, a thing that munges a CSV the way I actually need it, a daemon that watches a directory and pokes something when a file lands. For years my reflex was a Bash script that grew tentacles, or a Python file that worked fine on my machine and nowhere else. These days I reach for Go, and I keep reaching for it because the gap between “idea” and “a binary I can hand to someone” is genuinely about an afternoon. Here’s why, and how.

Paperless-ngx: A Paperless Office That Actually Works

I have owned three filing cabinets in my life. Each one followed the same arc: pristine and hopeful for a fortnight, then a graveyard of bank statements I will never read, slowly fossilising under a pile of takeaway menus. The promise of the “paperless office” was sold to me decades ago and never delivered, because the missing piece was never the scanner. It was knowing where anything went afterwards.

Paperless-ngx is the piece that was missing. It is the first system I have used that turns a heap of scanned PDFs into something I can actually search, and it has quietly replaced every filing cabinet, shoebox, and “important_FINAL_v2.pdf” folder I once relied on.

Chai Concentrate: Brewed Slowly, Kept in the Fridge, Better Than a Café

I have made chai the proper way exactly twice in my life — standing over a pan first thing in the morning, crushing cardamom while still half-asleep, waiting for that single rolling boil where the milk threatens to climb out of the saucepan. Both times it was wonderful. Both times I thought, I will never do this on a weekday again. And I didn’t. The café down the road got my money instead, three quid a cup, foamed by a machine, vaguely cinnamony, mostly disappointing.

Blood Orange Polenta Cake (Gluten-Free)

Every winter I wait for blood oranges the way other people wait for asparagus. They turn up sullen and ordinary on the outside, then you cut one open and there’s that bruised, dramatic crimson and a flavour that’s part orange, part raspberry, part something darker and more grown-up. This cake is the best thing I know to do with them: a dense, sticky, almond-and-polenta sponge that drinks a tart citrus syrup until it’s almost a pudding. And, more or less by accident, it happens to be completely gluten-free.

Podman: Running Containers Without Docker (and Without Losing Your Mind)

For about a decade, “containers” and “Docker” were synonyms in most people’s heads, mine included. You installed Docker, you ran docker run, a daemon somewhere did the work, and you didn’t think too hard about the fact that the daemon ran as root and you were talking to it through a socket that was, functionally, a key to the whole machine. Podman is what you get when someone looks at that arrangement and asks why it has to be like that. The answer, it turns out, is that it doesn’t.

De-Googling Your Life: A Realistic, Step-by-Step Migration Plan

Every so often someone announces, with the zeal of the newly converted, that they have “deleted Google” — and then quietly admits three weeks later that they still use Maps, still use the Play Store, and have a Gmail address forwarding to their new account because everything they ever signed up for points at it. I’ve watched this fail enough times to be suspicious of the all-or-nothing approach. De-Googling is not a single heroic act; it’s a migration project, and migration projects succeed when you sequence them properly and let nothing break in production.

Saffron and Cardamom Rice Pudding (Firni)

Firni is the pudding I reach for when I want something that feels celebratory but takes almost nothing from the storecupboard. It is a chilled, set rice pudding made not with whole grains but with ground rice, which gives it a remarkably smooth, almost silken texture quite unlike the looser, spooned rice puddings of a British nursery tea. Perfumed with saffron, cardamom and a whisper of rose, served cold in little bowls and scattered with pistachios, it is quietly luxurious. My small twist is a spoonful of ground almonds stirred in towards the end, which adds body and a faint nuttiness that rounds out the fragrant milk.

Loki: Log Aggregation for People Who Can't Afford Splunk

There are two kinds of homelabber: the ones who SSH into each box and run journalctl when something breaks, and the ones who got tired of doing that around the fourth machine. I crossed that line a while ago. Once you have a handful of hosts and a stack of Docker containers, “which log, on which box, from which container?” becomes a small archaeological dig every single time, usually conducted in a hurry while something is on fire.

Wok-Charred Egg Fried Rice

There is a reason takeaway egg fried rice tastes the way it does, and it is not magic — it is heat. The twist here is double: cold, day-old rice that fries up in separate, springy grains, plus a properly screaming wok that scorches the rice for that elusive smoky note the Cantonese call wok hei. Spring onion, light and dark soy, and a whisper of sesame finish it. Twenty minutes, two pans dirtied, and a bowl far better than the foil tub.

K3s Multi-Node: Adding a Second Machine to Your Cluster

A single-node K3s install is a wonderful thing. It’s Kubernetes that fits in a few hundred megabytes of RAM, it boots in seconds, and it lets you learn the whole ecosystem on one spare machine. But a cluster of one is a contradiction in terms. The day a sensible person finally gives in and orders a second mini PC — or rescues an old laptop from the cupboard — is the day K3s starts being genuinely useful. Pods can be rescheduled, you can drain a node to do maintenance, and a single dead disk stops being the end of the world.

Blackberry and Brown Butter Clafoutis

Clafoutis is the pudding to make when you want something that feels both effortless and a little bit special. It is essentially a thick, sweet batter poured over fruit and baked until it sets into something between a custard, a flan and a baked pancake, with puffed golden edges and a soft, trembling middle. Traditionally it is made with cherries, but blackberries are wonderful here, their dark juice bleeding into the pale custard as they bake. The twist that gives it real character is brown butter, whisked into the batter so the whole thing carries a nutty, toasted warmth beneath the fruit.

Wake-on-LAN Automation: Powering Servers On and Off with Home Assistant

I have a beefy machine in the cupboard that exists to do exactly one thing: transcode media and crunch the occasional batch job. It pulls something like 90 watts at idle, which over a year is a meaningful slice of the electricity bill for a box that’s genuinely busy maybe two hours a day. For ages I left it running because the alternative — getting up and pressing the power button when I wanted to watch something — was worse. Then I wired it into Home Assistant, and now it sleeps until it’s needed and shuts itself down when it’s idle. The savings paid for the effort in a couple of months.

Chicken Satay with Peanut Sauce

Satay is street food at its most irresistible: skewers of marinated chicken, grilled hard over flame until smoky and charred, served with a thick, savoury peanut sauce for dipping. The twist lies in a fragrant lemongrass-turmeric marinade that perfumes the meat and stains it gold, and a rich peanut sauce sharpened with lime and tamarind. Cooked on a griddle or barbecue, these are perfect for sharing, and the sauce is dangerously moreish.

Plum and Almond Upside-Down Cake

There is something quietly theatrical about an upside-down cake. You build it back to front, baking the fruit beneath a layer of batter, then turn the whole thing over to reveal a glistening, caramelised top you could not have arranged so prettily by hand. Plums are perfect for this treatment: as they roast in the caramel they slump and soften, releasing a jammy, slightly tart juice that seeps into the sponge below. The almond sponge is rich and tender, and the small twist that makes it sing is brown butter, which gives the whole cake a toasted, toffee-edged depth that ordinary creamed butter never quite reaches.

Container Image Housekeeping: Pruning, Pinning, and Not Running latest in Production

Container hosts have a way of quietly filling up. You pull images, you rebuild, you redeploy, and every iteration leaves a sediment of old layers behind. Then one ordinary morning a deploy fails with no space left on device, you go looking, and /var/lib/docker has eaten thirty gigabytes of disk you didn’t know you’d given it. Container image housekeeping is the least glamorous topic in this entire field, and it’s the one that’ll wake you at 3am if you ignore it.

Semolina and Coconut Cake (Namoura) with Orange Blossom Syrup

Some cakes are about lightness; this one is unapologetically about soak. Namoura is a Levantine semolina cake, dense and golden, cut into neat diamonds and drenched in fragrant syrup the moment it leaves the oven. The contrast between the hot, sturdy crumb and the cool, perfumed syrup is the whole magic, and the cake drinks in the liquid until each piece is moist, tender and glistening. My small twist is a handful of desiccated coconut folded through the batter, which adds a gentle chew and a background sweetness that flatters the orange blossom beautifully.

QNAP NAS as a Kubernetes Storage Backend: iSCSI, NFS, or Just Don't

Everyone who builds a homelab Kubernetes cluster hits the same wall about a week in: stateful workloads. Your pods are stateless and beautiful until you want to run Postgres, or a media server, or anything that remembers things between restarts. Then you need persistent volumes, and you look around your house, and your eyes land on the QNAP NAS humming away in the corner with several terabytes of perfectly good storage. Surely you can just point the cluster at that?

Hazelnut Dacquoise with Coffee Buttercream

There is a particular kind of pudding that looks far harder than it is, and dacquoise sits comfortably at the top of that list. Underneath the elegant name is a stack of nutty meringue discs, baked until crisp and faintly chewy, layered with a buttercream that here is shot through with proper coffee. It is the sort of thing you bring to the table and watch people sit up a little straighter, yet the whole construction rests on egg whites, ground nuts and a bit of patience. The one twist that lifts it from good to genuinely memorable is leaning hard into the coffee, using both fresh espresso and instant espresso powder so the bitterness has somewhere to land against all that sweetness.