It’s been a pretty crowded couple of weeks—the most intense part of summer break: a few days at the beach, some in the countryside, plus plenty of walking and reading.
But I still managed to spend a fair bit of time doing other things.
App Deployments
The first (and longest) thing I did was clean up part of my homelab and finish migrating all my “public” services to Azure ARM-based VMs, from which I removed all public IP addresses.
Most services now publish static content to Azure Storage; any required public ports (of which there are only… two) are only exposed through Cloudflare (or a similar mechanism).
More importantly, all my services and apps now share a set of common features:
- 12-factor design
- Support for pre-existing container images or on-the-fly wrapping into a custom container at deploy time
- Deployable via
git
(over Tailscale) and managed directly viassh
and Docker commands - Secrets stored and managed via Docker Swarm
- Choice of
caddy
orcloudflared
for local or public ingress - Content published as static files to minimize data exposure
As usual, I ended up creating a “new” tool to make this easier—this time I’m using kata
, a piku
offshoot that lets me deploy apps as managed containers with minimal fuss and without Kubernetes overhead. It’s usable enough now that I shouldn’t need to touch it for a few months (until bugs crop up).
I used GPT-5 to generate most of the documentation and examples for it (the code, save for a couple of cleanups, is all mine), which was… interesting.
I can read that documentation and see the design choices I made, but it wasn’t really me writing it, so the sequencing and structure feel a trifle odd—which is, I think, where AI is at right now.
News Summaries
I took advantage of some quiet time at the beach to finish my RSS summarizer (or at least remove most of the rough edges and corner cases).
It’s kind of fun to realize that I’ve been poking at summarizing news since 2013. Even if the current solution is an AI-generated conversion from a Node-RED flow, it suits my needs well enough.
You can take a look at the output on feeds.carmo.io
, with the caveat that I will change things without notice. As mentioned above, this is just a CDN-fronted Azure Storage bucket containing the outputs.
The only thing I’m considering adding right now is clustering of similar summaries. Since I’ve oriented it around regular “bulletins” three times a day (with different bulletins for different feed groups) and a news item can appear in five or six feeds, it’s not entirely trivial to sort out.
I expect to clean up the source code somewhat and publish it soon, but since it was mostly hacked together using Claude 4 and GPT-5, it might take a while.
Wi-Fi
Following my earlier rant about Wi-Fi access points I got a single Cudy M3000 off Amazon, flashed OpenWrt on it and confirmed it works very well as a “dumb” access point.
After a few initial quirks, a Finnish reader (hi there!) helped me realize I’d made an overly “safe” choice (you need WPA3 to get full 802.11ax / Wi‑Fi 6 speeds). Now my MacBook has pretty solid throughput while sitting in the same room as the test node:
What I’m really enjoying is leveraging the OpenWrt tooling and feature set—in particular, luci-app-statistics
has been very useful for tracking various metrics over the past couple of days:
I also now have complete control over radio power levels, channel selection, and other advanced settings, as well as the ability to monitor network traffic in real-time and steer it towards specific VLANs, most of which were impossible on my ISP-provided extenders.
The next step is ordering four more units (one as a spare), and I’ll eventually write up the whole thing properly.
Video Editing and Speech Synthesis
As I mentioned earlier, I’m considering doing some YouTube videos and am still trying out various tools and approaches. I’ve edited video on and off for years, but since I’m leaning toward using either my iPad or a Linux machine, I’ve been playing with DaVinci Resolve because I don’t want to pay again for Final Cut Pro on the iPad.
That might change, but until then I’ve posted a short to try out a workflow that uses Azure Speech Synthesis for narration (the bit I most want to automate), and… it’s OK, but not quite what I want.
VibeVoice just came out, and I spent about 30 seconds hacking it to run on Apple Silicon and got surprisingly good results with a sample of my own voice. So I guess I’ll need a few more workflow trial rounds…