nateparker.dev

Writing

Notes on building and breaking.

Longer-form writing about the things I actually work on: resilient backends, security that survives contact with a deadline, and whatever the homelab is doing this month.

All posts

18 posts

Deploying to the always-on box with one word

I already had a registry-based deploy: CI cross-built the image under emulation, and the Mac mini pulled latest. I replaced it with a push, a pinned commit, a native build on the mini, a health check, and a Caddy entry it writes itself.

homelabdockerinfrastructure

Every dev server gets a name

localhost:4321 only works on the machine it runs on and means nothing a week later. One wildcard on the always-on box, a second Caddy on the desktop, and a thirty-line helper give every dev server a URL that works from any machine in the house.

homelabtoolinginfrastructure

Leaving zsh, keeping the prompt

Moving to a distro that ships its own bash setup meant either fighting it or layering on top. I layered: the prompt I missed, the aliases I actually use, autosuggestions in bash, and two bugs that only show up over SSH.

toolinggitlinux

A screenshot on the laptop, a file path on the desktop

Pasting an image into an agent running over SSH, a drop folder that needs no new daemon, and streaming the desktop's GUI to the laptop on a screen sized for the laptop.

homelabagentstooling

Unlocking an encrypted disk from the couch

A full-disk-encrypted desktop can't come back from a remote reboot on its own: it stops at a password prompt nobody can reach. Putting a tiny SSH server in the initramfs fixes that. What it costs, and how I checked the boot image before trusting it.

homelablinuxsecurity

From the couch to a shell in fifteen seconds

Wake-on-LAN, a suspend timer that knows when an agent is still working, and a short script that works out what state the desktop is in by reading the banner on port 22.

homelablinuxtooling

Four machines, one desk, and five rules I stopped re-deciding

A desktop with the GPU, a Mac mini that never sleeps, a NAS, and a laptop on the couch. Before wiring them together I wrote down what each one is for. The first post in a series on making them feel like one computer.

homelabtoolinginfrastructure

A tuner on the outside, a glow on the inside

The idea: tent the iPhone Duo, put the tuning reading on the outer screen, and let the inner displays light the table red, amber or green. A 263-line probe showed the glow works for any app. The outer screen doesn't.

iosswiftswiftuiprototyping

The bots don't use the words on your list

Word lists catch the loud spam and miss the polite pitch. I replaced one with a single typed question per form submission, and checked it against 1,956 comments someone else labelled.

securitymachine-learningtooling

Getting a guitar tuner to read within a cent

I'm writing a YIN pitch detector in Swift for a guitar tuner. The spec asks for one cent. Getting there meant ignoring one of the spec's rules and one well-known speed trick.

swiftiosaudiodsp

Herdr and the overnight homelab

Coding agents are useful right up until you close your laptop. Here's how I gave mine somewhere to live, and the guardrails I put around them first.

agentshomelabsecuritytooling

What AI is actually good for in security research

I used an AI agent to audit a widely-used open-source library and it found a real credential leak. The finding was the least interesting part. Here's what the model was good at, where it lied to me, and the harness that kept it honest.

agentssecurityrubytooling

Replacing Clockify with 200 lines of Elixir and a SQLite file

A self-hosted Clockify replacement in Elixir and SQLite — and why the single-running-timer rule lives in the database, not the application.

elixirphoenixsqliteself-hosted

I argued against embeddings. Then I ran them on my own hardware.

I replaced trigram matching with semantic search using Bumblebee, Nx and pgvector. My objection was never to embeddings — it was to the API key.

elixirnxmachine-learningpostgres

I built a tool because I was the questionnaire guy

Vendor questionnaires ask the same questions in different words. The Phoenix app I built to stop retyping answers, and why it began with trigrams.

elixirphoenixcompliancesecurity

The R710 years: what a secondhand 2U server taught me

Decommissioned enterprise gear is the cheapest homelab education available and the most expensive to keep running. Six lessons from a Dell R710.

homelabhardwareinfrastructure

Dotfiles, GNU stow, and the three lines that matter

My config lives in a git repo symlinked into place with GNU stow. The setup is boring on purpose — but three lines in it have saved me hours.

toolinggitzshneovim

A $6 sensor, and knowing what your environment is actually doing

A Raspberry Pi, a DHT22, InfluxDB and Grafana — and what a humidity monitor taught me about writing long-running processes that stay running.

raspberry-pipythonmonitoringhomelab