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!



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