Interests

Programs shipped by day.
Homes automated by night.

Off the clock those same habits don't turn off. I still version-control everything, I still want a rollback plan before I touch a config — I just can't help it at this point. And I'd rather own the hardware than rent someone else's cloud for stuff that has to work when my internet doesn't.

Home lab

A small, deliberate stack — built the way I'd build a production system.

Everything runs on hardware I own, in containers I can rebuild from a private Git repository. No vendor lock-in, no cloud dependency for anything that has to keep working when the internet doesn't.

Control plane

Home Assistant, versioned as code.

Home Assistant is the hub for lighting, climate, locks, sensors, and presence across both properties. Automations live in Git alongside the rest of the config — diffable, reviewable, revertible.

Stack Home Assistant · MQTT · Zigbee

Compute & containers

Two Ubuntu servers, one pane of glass.

Two Ubuntu 24.04 hosts split the load — one runs automation and monitoring, the other serves the public site. Portainer gives both a single interface for lifecycle and health.

Stack Docker · Portainer · Ubuntu 24.04

Observability

Prometheus and Grafana, on my own metal.

Prometheus scrapes node and container exporters on both hosts; Grafana turns that into dashboards for uptime, energy use, and storage headroom. Same tools I would reach for in a production stack, sized for a home lab.

Stack Prometheus · Grafana · cAdvisor

Access & edge

Private by default, public on purpose.

Admin surfaces stay on a Tailscale mesh. Only the public site reaches the internet, proxied and TLS-terminated at Cloudflare. The rest of the stack is unreachable from anywhere I haven't explicitly logged in from.

Stack Tailscale · Cloudflare · Let's Encrypt

Citizen science

Raspberry Shake seismograph, on the network.

A Raspberry Shake seismometer runs alongside the home lab — streaming ground-motion data to the global Raspberry Shake network and into local dashboards. Home Assistant picks up significant events; Grafana holds the long window. Small station, real data going into a public dataset.

Stack Raspberry Shake · ShakeNet · Grafana · Home Assistant

Two houses

Two coasts, two very different problems to solve.

Each home is its own environment — different climate, different hardware, different failure modes. The stack is the same; the automations are shaped by the house.

Signal Hill, California · 33.8042° N · 118.1678° W

Hilltop lot above Long Beach.

Harbor views, hard sun, and a cooling problem worth solving with software. Climate control, solar and energy monitoring, and exterior cameras are the active work here.

Focus Climate control · Solar & energy · Exterior cameras

Seattle, Washington · 47.6062° N · 122.3321° W

Pacific Northwest house.

Rain sensors, humidity management, and lighting that compensates for four months of grey. Network core lives here too — the piece of the stack that everything else depends on.

Focus Humidity & air · Adaptive lighting · Network core

Also happy to compare notes on

Home labs, infrastructure, or programs.