Home avatar

vors

Latest recipes

All recipes →

Guides & how-tos

All guides →

Latest from the blog

Roasted Tomato and Goat Cheese Tart with Thyme Pastry

Tomato tarts have a way of looking effortless and tasting like summer, which is exactly why they get made on the days when summer is being stingy with its tomatoes. A wan, watery tart is one of life’s small disappointments, all soggy pastry and pale fruit. The fix is not to wait for perfect tomatoes; it is to teach ordinary ones to behave. You roast them low and slow until they collapse into something dense and jammy and twice as sweet, and suddenly a midweek punnet from the corner shop tastes like the south of France.

Technical Debt in a Home Lab: When to Refactor and When to Let It Rot

Somewhere in my homelab there is a service running in a container I built by hand in 2021, configured by SSH-ing in and editing files directly, with no Compose file, no documentation, and a startup command that lives only in my shell history. It has not gone down once. I am terrified of it, and I have decided to leave it exactly where it is.

This is the dirty secret of running infrastructure for fun: technical debt is real here too, but the economics are completely different from a workplace. At work, debt compounds across a team and a roadmap. At home, it compounds across exactly one person — you — and the only deadline is your own patience. That changes the calculus enormously, and it means the professional instinct to “do it properly” is sometimes the wrong instinct.

Pillowy Potato Gnocchi with Brown-Butter Sage

Gnocchi has a reputation for turning out gluey and heavy, but the secret is a light hand and dry, floury potatoes. These little dumplings are tender enough to dissolve on the tongue, and the twist lies entirely in the sauce: butter cooked until it turns golden and nutty, with sage leaves crisped to a whisper. It is barely a recipe, and yet it tastes like the best thing you have eaten all week.

CoreDNS and Kubernetes DNS: What Actually Happens When a Pod Looks Up a Name

For something so fundamental, Kubernetes DNS is astonishingly easy to take for granted. You write http://my-service in your code, it resolves, traffic flows, everyone goes home. Then one day a pod can’t reach another service, nslookup returns SERVFAIL, and you discover you have no idea what was happening under the hood the entire time. I have been that person at 1am, and I would rather you weren’t.

So let’s follow a single DNS lookup end to end. No magic, just a chain of unremarkable Linux mechanics that happen to be wired together rather cleverly.

LoRA Fine-Tuning on Consumer Hardware: Adding Skills to a Model Without Retraining It

“Fine-tuning” used to be a word that came with a server room attached. Retraining a multi-billion-parameter model meant a rack of data-centre GPUs, weeks of compute, and a budget that no homelab tinkerer was ever going to sign off on. Then a technique called LoRA quietly changed the maths, and now you can teach a large model a genuinely new skill on the same graphics card you use for gaming. I’ve done it on a single 24GB GPU over a long evening, and the result was good enough to be useful.

Tahini and Date Energy Bars (No Bake)

Most shop-bought energy bars are either a chalky disappointment or a chocolate bar wearing a fitness costume. These are neither. They are genuinely wholesome, sweetened only by dates, bound by nutty tahini, and full of oats and seeds, yet they taste like a treat rather than a punishment. They take about fifteen minutes of hands-on work, no oven, and one bowl. The small clever twist is tahini, that pourable sesame paste, which brings a savoury, slightly bitter depth that stops the dates tipping over into cloying sweetness and makes these taste like something from a good Levantine deli rather than a health-food aisle.

Hugo Advanced: Shortcodes, Partials, and Making Your Static Site Feel Dynamic

Most people meet Hugo as “the thing that turns Markdown into HTML very fast”, install a theme, and stop there. That is a perfectly good place to stop. But underneath the convenience sits a real templating system, and once you learn to drive it, a static site can do a surprising amount of what people reach for JavaScript frameworks to achieve — without shipping a single byte of runtime to the browser. The trick is that all the dynamism happens at build time. The visitor gets plain HTML; the cleverness was spent before they ever arrived.

Spaghetti Puttanesca

Puttanesca is the pasta sauce for nights when the cupboard looks bare but the appetite is loud. The twist that defines it is the trio of pantry strong-arms — black olives, capers and anchovy — melted with garlic and chilli into a tomato sauce that punches far above its humble ingredients. The anchovies dissolve completely, leaving no fishiness, only a deep savoury hum. No browning of meat, no long simmer; from cold pan to plate in about twenty minutes.

Prawn and Chorizo Linguine with Cherry Tomatoes

This is the supper I reach for when I am hungry, tired and unwilling to wash more than one pan. Smoky cooking chorizo renders down into a slick of paprika-stained oil, which then becomes the cooking fat for sweet king prawns and a tumble of cherry tomatoes that collapse into a quick, glossy sauce. My one small twist is to skip the usual splash of cream or wine entirely and instead build the sauce from the chorizo oil and a ladle of starchy pasta water, finished with lemon. The result is brighter, cleaner and far more more-ish than the heavy version, and it lands on the table in about twenty minutes.

Spiced Brown Butter Madeleines

A madeleine is a small thing to get worked up about, and yet people do, myself included. These little shell-shaped sponge cakes, crisp at the edges and tender in the middle, are one of those bakes that look fiddly and turn out to be among the easiest and most reliable things you can make. The famous feature is the domed bump on the back, the badge of a properly made madeleine, and it comes from a trick of temperature rather than skill. My twist is to lean into warmth and fragrance: brown butter for depth, and a quiet trio of cinnamon, cardamom and ginger that makes them taste like the most comforting cup of tea you have ever had.

mDNS and Avahi: Local Service Discovery That Works Until It Doesn't

You have done this a hundred times without thinking about it. You plug a Raspberry Pi into the network, type ssh [email protected], and it just works — no DNS server, no editing /etc/hosts, no looking up an IP that DHCP hands out semi-randomly. That .local resolution is multicast DNS (mDNS), and on Linux the daemon doing the heavy lifting is almost always Avahi. It is genuinely brilliant when it works, and genuinely maddening on the days it doesn’t, mostly because nobody ever explains what it’s actually doing.

Trivy and Container Scanning: Finding Vulnerabilities Before They Find You

Every Docker image you pull is a tarball of someone else’s decisions. That base image you chose two years ago because the tutorial used it? It’s carrying an OpenSSL with a known hole, a libc with a CVE, and three system packages you’ve never heard of, one of which has a remote code execution bug filed against it. You didn’t write any of that. You’re still running it.

Container scanning is the unglamorous practice of finding out what’s actually inside your images before an attacker does. And the tool I reach for first, every time, is Trivy — partly because it’s genuinely good, and partly because it’s free, fast, and doesn’t try to drag me into a sales call.

Celebrating Fathers: A Journey Through the Tradition of Father’s Day

Father’s Day, a day dedicated to honoring fathers and father figures, is celebrated worldwide with joy, gratitude, and love. But have you ever wondered about the origins and evolution of this cherished tradition? Let’s delve into the history, significance, and ways to celebrate Father’s Day, shedding light on the day dedicated to the men who shape our lives.

The concept of celebrating fatherhood can be traced back to ancient civilizations. In ancient Babylon, a young boy named Elmesu carved a Father’s Day message on a clay tablet over 4,000 years ago, wishing his father good health and a long life. This sentiment of honoring fathers continued through various cultures and eras.

Embracing Freedom: The Enduring Tradition of Juneteenth

As we navigate through the 21st century, it’s crucial to reflect on the significant moments in history that have shaped our collective identity. One such moment is Juneteenth, a day that resonates deeply within the American cultural fabric, symbolizing freedom, resilience, and the enduring spirit of community.

Juneteenth, celebrated on June 19th, commemorates the end of slavery in the United States. The origin of this holiday traces back to June 19, 1865, when Major General Gordon Granger arrived in Galveston, Texas, with the news that the Civil War had ended and enslaved people were now free. This was a monumental event, especially considering that this announcement came two and a half years after President Abraham Lincoln’s Emancipation Proclamation, which had officially outlawed slavery in the Confederate States.

Embracing the Light: The Timeless Tradition of Summer Solstice

The summer solstice, known as the longest day of the year, is a phenomenon that has been celebrated by civilizations across the globe for thousands of years. This celestial event, typically occurring around June 21st in the Northern Hemisphere, marks the peak of sunlight and the beginning of the gradual return to shorter days. The solstice is not merely a scientific occurrence but a profound moment that has inspired a rich tapestry of cultural rituals, festivities, and spiritual reflections.

Embracing Tradition: The Magic of Sankt Hans in Denmark

As the days grow longer and the summer solstice approaches, Denmark comes alive with the vibrant and age-old celebration of Sankt Hans. This enchanting festival, steeped in tradition and folklore, marks the height of midsummer and offers a unique glimpse into Danish culture. Join us as we delve into the captivating world of Sankt Hans and explore the rich history, customs, and communal spirit that make this event a cherished part of Denmark’s cultural fabric.

Git Internals: What Happens When You Type git commit

Most of us use Git the way we use a microwave: press the buttons, food gets warm, never think about the magnetron. git add, git commit, git push, repeat. That works right up until it doesn’t — a detached HEAD, a botched rebase, a “lost” commit — and suddenly the buttons stop making sense. The cure is understanding what Git actually does when you commit, because the underlying model is far simpler and more elegant than the porcelain commands suggest. Spend an afternoon with the plumbing and Git stops being magic.

Spiced Vegetable Samosas with Mint Chutney

The samosa needs no introduction: a crisp, golden triangle of pastry around a warmly spiced filling. The twist here is in the detail — a classic pea-and-potato filling sharpened with amchur for a gentle tang, served with a vivid, zingy mint-and-coriander chutney that cuts through the richness of the fried pastry. Made from scratch they are deeply satisfying, and the homemade dough fries up far crisper and flakier than anything from a packet. Perfect with tea.

Victoria Sponge with Roasted Strawberry Jam

There is nothing to a Victoria sponge, which is exactly why it’s so hard to make a really good one. Two plain sponges, jam, cream, a dusting of sugar. No frosting to hide behind, no exotic flavour to distract. It’s the cake your grandmother made and the cake that wins and loses village fetes, and the only way to make it sing is to get every humble component absolutely right. My one indulgence — the thing that makes people pause mid-bite — is making the jam myself, roasted, in the time it takes the oven to come up to temperature.

Cloudflare Tunnels: Exposing Services Without Opening Ports (and the Trade-Offs)

There’s a particular dread that comes with port-forwarding something on your home router. You log into a web interface that hasn’t changed since the Blair government, you punch a hole through to a box on your LAN, and then you spend the next week wondering whether you’ve just invited the entire internet to find that one unpatched service. Carrier-grade NAT might mean you can’t forward ports at all, and a dynamic IP means you’re chasing DDNS updates on top of everything else.

Longhorn vs OpenEBS: Persistent Storage for Kubernetes That Isn't a Nightmare

Kubernetes storage has a reputation, and the reputation is “here be dragons.” The moment you move past stateless web apps and want to run a database, a wiki or anything that remembers things, you hit the persistent volume problem. In the cloud you’d shrug and attach an EBS volume. In a homelab or on-prem cluster, you have a pile of machines with local disks and no shared storage to bind them together. A pod that gets rescheduled to a different node finds its data has stayed behind.

Matrix and Element: Self-Hosted Messaging That Federates

The pitch for Matrix is the same one email made fifty years ago and instant messaging has spent its entire existence refusing to make: you run your server, I run mine, and we talk anyway. No walled garden, no single company holding the keys, no app that gets bought and shut down. After running a Matrix homeserver for my family and a handful of friends for a couple of years, I’m convinced it’s the only self-hosted messaging story that actually delivers federation rather than just promising it. It’s also fiddly in ways worth being honest about.

Lamb Rogan Josh with Kashmiri Chilli

Rogan josh is the aromatic, brick-red lamb curry of Kashmir, and the secret to it tasting right is colour without ferocious heat. The twist here leans on Kashmiri chilli — prized for its vivid red hue and mild warmth — to give that signature glow, while a yoghurt-and-fennel base builds the gentle, perfumed depth the dish is loved for. Whole warm spices and a long, slow braise do the rest, leaving the lamb fork-tender in a glossy sauce. Worth the wait.

ComfyUI: Node-Based Image Generation for People Who Want Control

The first time you open ComfyUI, you will hate it. There’s no friendly prompt box waiting for your words, no big orange Generate button — just a tangle of boxes connected by coloured spaghetti, like someone wired up a modular synthesiser and walked off. I closed it the first time too. Then I went back, because the people producing the most consistent, repeatable, genuinely controllable images locally were all using it, and there’s usually a reason a difficult tool refuses to die.

Lamb Kofta with Mint Yoghurt and Pickled Red Onion

There is a version of cooking that involves three saucepans, a sieve, and a tea towel over your shoulder, and then there is kofta. Kofta is the kind of dinner that asks for one bowl, a hot pan, and roughly the same amount of effort as a sad burger but delivers something far more interesting. You squish spiced mince around a skewer, char the outside hard, and serve it with a cool, herby yoghurt and a tangle of bright pink onion. That’s it. That’s the whole trick, and it works every single time.

cert-manager: Automated TLS Certificates That Actually Renew

Everyone who has run a website for more than a year has lived this particular horror. You get an email. The subject line contains the word “expires.” You ignore it because you’re busy. Then on a Sunday morning, the morning, your site is throwing certificate warnings to every visitor and you’re SSH’d in trying to remember how certbot works while your coffee goes cold. TLS certificates expire on a schedule that is precisely engineered to be longer than your memory and shorter than your attention span.

Kustomize: Kubernetes Configuration Without the Template Sprawl of Helm

There’s a moment, somewhere around your third environment, when a Helm chart stops being a convenience and starts being a small programming language you didn’t ask to learn. You’re staring at {{- if .Values.ingress.enabled }} nested four levels deep, whitespace-sensitive, debugged by squinting at helm template output. The thing you wanted was “the same manifests as production, but with a different replica count and hostname.” The thing you got was Go templating wrapped around YAML, which is a syntax wrapped around a syntax, and your editor can’t help you with either.

LangChain vs LlamaIndex: Orchestrating LLMs Without Going Mad

The moment you try to build anything real with a language model, you discover the hard part isn’t the model. It’s everything around it: loading documents, splitting them sensibly, embedding them, stuffing the right context into a prompt, calling a tool, parsing the reply, and doing it all again. You can write this yourself — I did, twice, badly — or you can reach for a framework. The two that dominate are LangChain and LlamaIndex, and the internet will cheerfully tell you to use both, neither, or that one is bloated and the other is a toy. Here’s what I actually think after building with each.

Dal Tadka with a Ghee-Cumin Tempering

Dal tadka is the lentil dish that home cooks across India make almost without thinking, yet it never gets old. The twist, and indeed the whole soul of the dish, is the tadka: a small pan of ghee crackling with cumin, garlic, onion and chilli, poured sizzling over the cooked lentils at the very end. That final aromatic flourish transforms a plain pot of dal into something fragrant and luxurious. Serve with rice or warm flatbread for proper comfort food.

Pistachio and Rosewater Semifreddo

Semifreddo is a sort of magic trick. It gives you the cool, creamy hit of ice cream with none of the equipment and none of the churning, because the air is whipped in by hand instead of beaten in by a machine. The result is lighter than ice cream, almost mousse-like, and it slices into beautiful clean wedges straight from the freezer without that brick-hard chill. Flavoured with ground pistachios and a whisper of rosewater, it tastes like the inside of a very expensive Middle Eastern sweet shop, and the small clever twist is using the nuts both ground and chopped so you get perfume and crunch in every slice.

Firefly III: Self-Hosted Personal Finance Without the Bank Watching

Every budgeting app I have ever tried eventually wanted three things: my bank login, a monthly subscription, and the right to “anonymise” my spending and sell it to whoever buys that sort of thing. I gave up on all of them and put Firefly III on a box in the corner of my flat instead. It has been quietly tracking every penny I move for years now, and the only entity studying my coffee habit is me.

Poached Pears in Red Wine with Star Anise and Cinnamon

There are few desserts that look as quietly impressive as a poached pear, sitting upright in a pool of garnet syrup, glossy and stained deep ruby right through. And there are few that ask so little of the cook. This is the kind of pudding you can make with one pan, half a bottle of wine you were never going to finish, and a handful of spices from the back of the cupboard. The clever twist here is restraint dressed up as generosity: a whole orchard of warm spice, but balanced so the pear and the wine still taste of themselves.

Nix: Reproducible Development Environments (Once You Survive the Learning Curve)

Every developer has lived the same small tragedy. A new colleague clones the repo, follows the README, and nothing works. The wrong version of Node. A missing system library. A make that needs a tool nobody documented because it has been on the lead’s laptop since 2019. Hours vanish. Nix exists to make this entire category of misery go away, and it does, eventually, after putting you through a learning curve that I will not pretend is gentle.

Chana Masala with Amchur

Chana masala is the chickpea curry that proves a humble store-cupboard tin can carry a whole dinner. The twist here is amchur — dried green-mango powder — stirred in at the end for a sharp, fruity tang that brightens the deep, spiced tomato base without watering it down. Toasted cumin seeds open the dish, a little mashing thickens the sauce naturally, and the whole thing comes together from two tins of chickpeas in about half an hour.

Keepalived and Virtual IPs: High Availability Without a Load Balancer

There is a particular flavour of homelab anxiety that arrives the moment a single box becomes load-bearing. Your reverse proxy, your DNS resolver, your little MQTT broker that the whole house now depends on — all of it pinned to one IP address on one machine that will, one day, want a kernel update at the worst possible time. The cloud answer to this is a managed load balancer, and it is a fine answer if you enjoy paying monthly for a TCP forwarder. The self-hosted answer, and a remarkably good one, is keepalived.