blog.stancs.com

build log · the Stancs home lab

Projects Brad and Claude ship together — a health tracker, this blog, whatever we take on next — tracked one entry at a time.

Designing for one screen

There's a tablet on the wall that runs the house, and its dashboards had grown the way these things do — one card at a time until nothing fit. Rebuilding them properly meant designing for exactly one screen, giving the assistant a way to actually see that screen, and finding out that a 3D model of the house could lock the whole thing up.

shipped · home assistant + a fire tablet on the wall read the build →

A pool anyone in the house can run

For years I was the only person at home who could actually run the pool — heating it took two separate toggles, one of them buried three screens deep in an app. A firmware flash, an afternoon of watching the app's own traffic, and one small bridge service later, the whole thing lives on the wall tablet: pump, heater, heat pump, spa, targets and light colours, for anyone who walks past.

shipped · docker-prod-01 + home assistant read the build →

The cars moved onto the wall

Home Assistant's Tesla integration had been dead since June, so the wall tablet knew nothing about either car. TeslaMate already had everything live over MQTT; one small relay later, both cars show up in Home Assistant with about thirty-five sensors each — and cards that pulse while driving, fill while charging, and turn red if one's left unlocked somewhere.

shipped · docker-prod-01 + home assistant read the build →

From the driver's seat to the Life Planner

Grok lives in my car, and my Life Planner lives in a git repo in the house. I wanted one to be able to reach the other — so I built a small MCP server that gives Grok my mail, my calendar and a read-only view of the planner. Most of the work wasn't the tools. It was deciding exactly how much a voice assistant on the open internet should be allowed to touch.

shipped · docker-prod-01 read the build →

An always-on Claude in the closet

My laptop closes, sleeps and travels, and every Claude Code session on it dies with the lid. So a second MacBook now lives in the closet running an always-on Claude I can reach from my phone, kept identical to the laptop by a sync script — plus a small hook that names every workspace after what I'm actually doing in it.

shipped · a second macbook + herdr + remote control read the build →

Built, not bought

I was paying a subscription for the privilege of exporting my own transactions as a CSV so Claude could read them. Replacing it took an afternoon — which is either the end of a whole category of software, or a bill that comes due later. No real numbers here; every figure below is made up.

in progress · fastapi + sqlite + plaid read the build →

My network was one big room

I gave my assistant a scoped, read-and-write key to my UniFi network and asked it to take inventory. It came back with an uncomfortable answer: north of a hundred devices — cameras, smart-home gadgets, laptops, a pile of Apple gear — all living in the same room with no walls between them. So we started building walls.

in progress · unifi read the build →

The cars can answer questions now

My self-hosted Tesla logger had been quietly dead for three months, and a car I own had never been connected at all. Fixing that turned into an MCP server, so now I can ask — in plain English — where either car is, whether it's moving, and when it'll arrive. The interesting part wasn't the data. It was teaching it to admit when it doesn't know.

shipped · docker-prod-01 read the build →

A second brain for a medical emergency

A family member was hospitalised suddenly, and the thing that carried me through it wasn't a clever model — it was two years of accumulated context about my family that meant I never had to explain myself. Scans, wearable data, recordings, clinician profiles, travel and costs, all in one place and answerable in plain English. This is what a second brain is actually for.

shipped · local files + claude read the build →

Nerding out on my home gym

I bought a cable machine that logs itself, then wondered whether cameras and audio could give the same treatment to a rack full of dumb steel. Two Wi-Fi security cameras, a conference microphone and a morning of debugging later, the garage has eyes and ears — and not one verified rep.

in progress · macbook + reolink nvr read the build →

A trading desk with one green button

We wired a brokerage API into the home lab, built a phone-installable PWA behind the tunnel, and taught Claude to stage trades it is never allowed to fire. The human gets one green button. The AI gets everything else.

shipped · docker-prod-01 read the build →

The blog that deployed itself

This site went from "let's build a blog" to live on its own subdomain in one sitting — because we first taught Claude the entire deploy pipeline as a reusable skill. New site, one sentence. Here's the machinery, and the bugs.

shipped · docker-prod-01 read the build →

A health tracker that argues back

We built a self-hosted health app that pulls in the scale, the watch, the ring, and the food log, re-derives my real maintenance calories every two weeks, and answers questions in plain English. It also fills my grocery cart. Here's what a day with it looks like.

shipped · docker-prod-01 read the build →

Our money has a copilot

The same pattern as the health tracker, pointed at money: full context, weekly reviews, constant what-if modeling, and a partner that finds the dollars we were leaving on the table. No numbers here — but the system is the story.

shipped · local files + claude read the build →

Our life is in git now

The family's plans, research, and records had become the most important folder in the house — with no history and no backup story. So we stood up our own private GitHub-style server at home and moved our life into it. Three lessons came with it.

shipped · proxmox read the build →

Teaching Claude fifteen years of my taste in movies

We imported 459 films and 168 series of viewing history, split the system into watched / watchlist / preferences, and turned "recommend me something tonight" into a routine that almost never suggests something I've already seen. It got better when the easy answers ran out.

shipped · markdown, honestly read the build →

We kept the hardware and fired the software

We bought a Skylight for the kitchen counter, loved the device, and couldn't stand the software — so we rooted it, wiped it, and rebuilt it as the family's morning command center: chores with sign-off, both calendars, the weather, what to wear, and where mom and dad will be today.

shipped · the home lab + the kitchen counter read the build →

The week Claude watched the house — and us

Before MCP, with nothing but raw Home Assistant APIs and rules given in plain English, Claude stood guard over an empty house — doors, cameras, lights, one cat — while simultaneously playing travel concierge in the city, down to "the MoMA exhibit is half a block from you."

shipped · home assistant + raw APIs read the build →

Watching the house breathe

Three power monitors, a map of how the panels feed each other, readings every five seconds, and a live animated diagram of the whole property. Down to the circuit, we know where every watt goes.

shipped · the home lab read the build →

Operation summer camp

Our daughter's first sleepaway camp looked like one decision. It became the best demonstration yet of what an assistant with real family context can do — including a 60-item packing cart we approved in minutes, with two insights nobody asked for.

shipped · context and a browser read the build →

The family streaming service

A dedicated media host in the apartment runs our own streaming service — Jellyfin and Plex over one shared library, with automation that keeps the collection organized, named, and current, and Watchtower keeping the whole stack fresh.

shipped · docker-media-01 read the build →

Designing for the day the house goes dark

The services the household actually depends on — DNS and the database — run twice, split across two buildings, with a primary on each side of the property line between "main house" and "apartment." Placement is architecture.

shipped · both buildings read the build →

A Swarm spanning two buildings

The lab's services run on a team of machines that act as one — if a machine dies, its services just move to a survivor, and the lab's front door automatically follows. Plus the opinionated rule that makes it reliable: precious data never lives inside the machinery that moves things around.

shipped · swarm-mgr-{1,2,3} read the build →

The lab is a repo now

Our home servers used to be hand-built and irreplaceable — if one died, rebuilding it meant remembering what I did months ago. Now the entire lab is written down as automation recipes, and any machine can be rebuilt from scratch by running them.

shipped · proxmox × 3 read the build →

The car keeps a diary

Self-hosted TeslaMate logs every drive, charge and parked hour into our own database, and feeds the live state straight into Home Assistant.

shipped · docker-prod-01 read the build →