Hi visitor, I’m John!


I’ve been messing around with just about anything that runs Linux for over a decade. I’m also a huge fan of security, automation, and all things IoT.


This website (and the servers it runs on) is a perfect combination of this. I host it on my own hardware, which is also responsible for things like home automation (thanks to HomeAssistant), a VPN, shared storage, backups, and so much more. It’s also locked behind a WAF, IPS, and multiple forms of brute-force protection.


At work, I am responsible for maintaining our team’s AWS infrastructure and security, improving our system stability, automating the boring stuff, and overall doing my best to help my colleagues.


This blog is where I explain all the problems I had trying to set up my home infrastructure, and how I solved them. I also like to ramble a lot. I hope it helps you!



Making my local LLM voice assistant faster and more scalable with RAG

If you read my previous blog post, you probably already know that I like my smart home open-source and very local, and that certainly includes any voice assistant I may have. If you watched the video demo, you have probably also found out that it’s… slow. Trust me, I did too. Prefix caching helps, but it feels like cheating. Sure, it’ll look amazing in a demo, but as soon as I start using my LLM for other things (which I do, quite often), that cache is going to get evicted and that first prompt is still going to be slow....

June 14, 2024 · 6 min · 1214 words

Building a fully local LLM voice assistant to control my smart home

I’ve had my days with Siri and Google Assistant. While they have the ability to control your devices, they cannot be customized and inherently rely on cloud services. In hopes of learning something new and having something cool I could use in my life, I decided I want better. The premises are simple: I want my new assistant to be sassy and sarcastic. I want everything running local. No exceptions. There is no reason for my coffee machine downstairs to talk to a server on the other side of the country....

January 13, 2024 · 16 min · 3291 words

Self-hosting and NAT Loopback

When I started hosting my services, I quickly ran into a major problem. Everything was timing out, but it was somehow working just fine when I was not connected to my home network! So turns out, this was because my router does not support what’s called NAT Loopback (also called NAT Hairpinning). Like many things you’ll see in production, the 32-bit address space of IPv4 was meant to be for a prototype....

May 14, 2023 · 5 min · 911 words