Skip to content
Infrastructure

Homelab

This is where household documents get filed, photos stay searchable and daily updates become a morning brief. It also runs the services behind my apps. Below are the machines, services and connections that do the work.

5Machines
~150Containers
10Products (10 shipped)
93Services
140Flows
146n8n workflows

How the work moves

Documents, messages and events come in; searchable records, briefs and replies come back. These four stages show how the work moves, mostly on my own hardware.

Capture
Product inboxesSalesDocumentsreMarkable notesFeedsHome sensors
Process
n8n · 146 workflowsLocal models behind LiteLLMClaude for the hard reasoningScheduled jobs
Remember
ObsidianBookStackQdrant and digital-brainLetta agents
Deliver
The morning briefPhone alertsEmail digestsDrafts for a human to send

What it does in a day

Morning brief

Life-OS brings the day's calendar, open work, mail and household updates into a morning email. The brief is also saved in Obsidian, with a short push fallback if email delivery fails.

Support inbox

Cloudflare routes every product inbox into Fastmail. Mailroom classifies each message and drafts a reply grounded in that product's knowledge base. It sends on its own only when a strict gate passes. Everything else waits as a draft for me.

Sale to licence

A sale on Stripe or Gumroad is picked up within two minutes. The licence is minted at home in Keygen and emailed to the buyer. An unknown product tier stops the line and alerts me rather than guessing.

Self-healing

Uptime Kuma watches every service. When one drops, n8n triages it and tries to bring it back, and only pushes to my phone if that fails. A weekly job updates containers and checks their health afterwards.

Backups

Every database is dumped nightly and the vector store snapshotted. Backrest copies the Studio to the NAS and a weekly copy goes offsite to Backblaze. Each leg has a deadman, so a backup that quietly stops gets noticed.

Knowledge pipeline

Vault notes, reMarkable pages and scanned documents are classified by a local model, embedded and indexed. Claude Code and the agents recall from that index, so a decision made in March is still findable in October.

Topology

  • AI
  • Automation
  • Knowledge
  • Media
  • Ops
  • Network
  • Monitoring
  • Devices
  • Products
  • Edge

The rented edge

The owned core

GL.iNet Flint 3
Gateway · Wi-Fi 7
Inference node
M3 Ultra · 96 GB · the old Studio

Retired from the desk, kept for its memory. Linked to the Studio as a second model server.

Home Assistant Green
Home automation

Runs the house, including one sun-synced dining lamp.

Products
What the estate exists to ship

Services

What each one does, what it takes in and what it sends on.

The rented edge Services I rent and lean on

Cloudflare

Edge

Hosts DNS, tunnels, Access login gates, Workers, R2 storage and inbound mail routing for every domain.

Out

Vercel

Edge

Hosts the Next.js apps and product sites, including the sale webhooks that mint licences.

In
  • Stripe — checkout webhook mints licence
  • Gumroad — sale webhook mints licence
  • GitHub — deploys on merge
Out
  • Resend — licence email to buyer
  • Supabase — DeviceWatch data and sign-in

Supabase

Edge

Provides managed Postgres and sign-in for the hosted DeviceWatch app.

In
  • Vercel — DeviceWatch data and sign-in

Stripe

Edge

Takes card payments for the products and signals each completed sale.

Out

Gumroad

Edge

Second checkout channel for the Mac and Windows apps, reporting each sale by webhook.

Out

Resend

Edge

Sends transactional mail: licence emails, digests, waitlist notes and printable meal plans.

In

Backblaze B2

Edge

Holds the offsite copies of NAS backups and the critical Mac backups.

In

Codex

Edge

Hosted Codex model that does the work in the adjudicated loop harness.

In

Todoist

Edge

Task manager that n8n reads and writes action items to.

In

GL.iNet Flint 3 Gateway · Wi-Fi 7

Local DNS rewrites

Network

Gives internal services friendly local names that resolve to the right machine.

Out
  • Caddy — local names resolve to Studio

AdGuard filtering

Network

Filters ads and trackers for the whole network, with stricter rules for chosen devices.

Stands alone.

WireGuard

Network

VPN endpoint on the router for reaching the home network from outside.

Stands alone.

TrueNAS F2-425 Plus Storage and the household services · 16 GiB RAM · ZFS

n8n · 146 workflows

Automation

Runs 146 active workflows: backups, digests, document intake, monitoring, self-healing, alerts and feeds across the estate.

In
Out

Secrets Gateway

Ops

Stores every API key encrypted and hands them to authorised callers over REST, CLI and MCP.

Out

Vaultwarden

Ops

Self-hosted password manager for the household's logins, with sign-ups closed.

Stands alone.

Pocket-ID

Ops

Sign-in provider that lets self-hosted apps authenticate through one identity.

Stands alone.

Resilio Sync

Ops

Always-on read-only peer keeping a backup copy of the Mac's shared files and vault.

In

Nightly DB dumps

Ops

Nightly cron that dumps every database and snapshots Qdrant, keeping two weeks locally.

In
  • Qdrant — collection snapshots
Out

Cloud Sync to B2

Ops

Weekly job that copies the NAS backup pool offsite to Backblaze.

In
Out

Cal.com

Automation

Self-hosted booking pages for scheduling meetings.

Stands alone.

Mealdrop

Automation

Plans dinners from the recipe library, calendar and preferences, emails the week and adds groceries to the configured Kroger cart for review.

Out
  • Resend — emailed weekly meal plan

paperless-gpt

Knowledge

Sidecar that suggests titles and tags for new Paperless documents using a language model.

Out

BookStack

Knowledge

Wiki holding the canonical, durable documentation for the whole estate.

In
Out

CouchDB · LiveSync

Knowledge

Database behind Obsidian LiveSync, keeping the vault in step across machines in real time.

In

Kiwix

Knowledge

Serves offline Wikipedia and other reference archives with no internet needed.

Stands alone.

Immich

Media

Photo and video library with face and smart search, using machine learning on the Studio.

Out

Plex

Media

Streams the household's films and TV to screens around the house.

Stands alone.

Audiobookshelf

Media

Serves audiobooks and podcasts to phones and browsers.

Stands alone.

cloudflared

Network

Outbound tunnel agent publishing selected services to the internet without opening router ports.

In
Out

Mac Studio AI and application tier · M5 Ultra · 256 GB unified

LM Studio · Qwen3.8-Flash-Next

AI

Serves the local chat and embedding models that most of the estate's local AI work calls.

In
Out

LiteLLM gateway

AI

Gateway giving local models stable names, per-client keys, usage logs and fallbacks.

In
Out

Langfuse

AI

Self-hosted LLM tracing: prompts, latency and token counts for instrumented products.

In

Speaches · Kokoro voice

AI

Local speech-to-text and text-to-speech behind an OpenAI-style API, used by voice features.

In

Wyoming bridge

AI

Translates Home Assistant's voice protocol into speaches' OpenAI-style speech API.

In
Out

Open WebUI

AI

A private chat window over the local models, reached only through the gateway.

Out

AnythingLLM

AI

Older document-chat app that a few workflows still use for workspace search.

In

Local GenAI Studio

AI

Household image, music, video and 3D generator on the Studio, with a chat page and tool endpoint.

In
Out

Immich ML

Media

Runs Immich's face and smart-search models on the Studio, with a NAS fallback.

In
  • Immich — image analysis requests

Keygen licensing

Ops

Self-hosted licence server that mints and verifies software licence files for the indie apps.

In

Licence fulfilment

Ops

Polls Stripe and Gumroad every two minutes, mints a licence for each sale and emails it.

In
Out

Mailroom

Automation

Support inbox agent that classifies mail, drafts knowledge-base-grounded replies and auto-sends only when a strict gate passes.

In
Out

Trigger.dev

Automation

Self-hosted durable job runner for the TypeScript products, such as DeviceWatch's MAUDE ingest.

In
  • Komodo — deploys and updates the stack
Out
  • Resend — magic-link login email

Postiz

Automation

Self-hosted social post scheduler that publishes the weekly product posts.

In

Twenty CRM

Automation

Self-hosted CRM holding the outreach target companies and their pipeline.

In
Out

Temporal

Automation

Workflow engine backing Dograh's voice-agent runs.

In

Voice status API

Automation

Small Go service giving the voice agent a spoken status and brief.

Out

marketing-os

Automation

Drafts weekly product content, then publishes blog posts, social posts and email broadcasts on a schedule.

Out

outreach-crm

Automation

Builds prospect lists into the CRM and files draft outreach emails for a human to send.

Out

RSS-Bridge

Automation

Builds RSS feeds for sites that lack them.

Out

actual-intelligence

Automation

AI layer over the household budget: nightly categoriser, weekly digest and spending-trend reports.

In
Out

loop-harness

Automation

Two-agent coding loop where one model implements and another adjudicates against written acceptance criteria.

Out

Karakeep

Knowledge

Bookmark manager that crawls saved pages and auto-tags them with a local model.

Out

SearXNG

Knowledge

Private metasearch engine returning JSON results for tools and agents.

In

docling

Knowledge

Parses PDFs into structured text and tables, with a router choosing fast or deep parsing.

In

crawl4ai

Knowledge

Turns web pages into clean Markdown for ingestion workflows.

In
Out
  • Qdrant — chunked page embeddings stored

Homarr front door

Network

Start page listing every service, kept in step with the service catalogue.

Stands alone.

Caddy

Network

Reverse proxy that terminates TLS and routes the internal hostnames to their services.

In

Plausible

Monitoring

Self-hosted privacy-friendly web analytics for the public sites.

In
Out

Beszel

Monitoring

Host metrics hub graphing CPU, memory and disk on the Studio and NAS, with threshold alerts.

Out

Dozzle

Monitoring

Live container log viewer for the Studio's Docker containers.

Stands alone.

changedetection.io

Monitoring

Watches venue pages that have no feed and alerts on change.

Out

notify

Monitoring

Unified notification command: routes a topic to an immediate push, the incident log or a buffered digest.

In
Out

Komodo

Ops

Docker stack manager that deploys compose stacks and auto-updates the ones allowed to.

Out

Diun

Ops

Watches a list of container images and notifies when a newer version is published.

Out

Backrest

Ops

Nightly restic backups of the Studio's data and database dumps to the NAS, with a critical subset offsite.

In
Out

mcp-wrap

Ops

Launcher that fetches secrets from the gateway and injects them into a child process at start.

In

Inference node M3 Ultra · 96 GB · the old Studio

LM Studio · gpt-oss-120b

AI

A second Mac serving one large open-weight model, used only for inference through the gateway.

In

Home Assistant Green Home automation

Home Assistant

Automation

Runs the house: lights, scenes, sensors and automations, plus a Claude-backed voice assistant.

In
Out

Voice satellite

AI

Wake-word microphone that feeds spoken requests into Home Assistant's voice pipeline.

Out

Products What the estate exists to ship

DeviceWatch

Products

FDA adverse-event monitoring product; its ingest and extraction run partly on the Studio.

Out

Prism

Products

Desktop search palette with a retrieval index in the vector store and an MCP search server.

Out

SolScribe

Products

Transcription product whose analysis workflow calls the local model through n8n.

Out

Edges of the LAN Where the landscape gets used

AI, memory and automation

Reason

Claude Code orchestrates, with four role agents and about twenty MCP servers wired through mcp-wrap. Private work goes to Qwen on the M5 or gpt-oss on the M3, both behind one LiteLLM gateway.

Remember

Auto-memory for sessions, an Obsidian vault for thinking, BookStack for canon. Qdrant and digital-brain handle semantic recall. Letta's four agents keep their own state.

Act

n8n runs 146 active workflows. Trigger.dev and launchd carry the longer jobs. Home Assistant runs the house. A watchdog reloads the model server after a reboot.

Watch

Uptime Kuma pings, Beszel graphs, Langfuse traces the models and Plausible counts. Komodo and Diun watch for updates. Deadman jobs notice when a backup goes quiet.

The daily and weekly routine

  1. 02:00
    Database backups

    Every database dumped and checked against the expected list. Eighteen artifacts a day, verified by n8n.

  2. NIGHTLY
    Mac backups

    Backrest snapshots the Studio and Time Machine copies to the NAS. Deadman jobs page if either goes quiet.

  3. 07:15
    Morning brief

    life-os collectors sweep calendar, health, budget, events and inboxes. Claude writes one page. It lands in the vault and on the phone.

  4. MON 07:00
    Events digest

    Atlanta events aggregated all week, folded into the brief.

  5. WEEKDAYS 09:00
    Marketing publish

    Approved posts go out to the blog, social and email. Approval is a merged PR.

  6. 18:00
    Evening digest

    The notify buffer drains once, instead of interrupting fifty times.

  7. SUN 03:00
    Offsite

    Backups and configs copied to Backblaze B2.

  8. ALWAYS
    Watch and reply

    Uptime Kuma pages when something drops. Mailroom answers routine support mail. Every sale becomes a licence file within minutes.

Products

Prism

Shipped v1.9

Search notes, files and mail from one shortcut. Ask a question and follow the answer back to the sources it found, with local models or cloud AI you choose to enable.

Tauri 2 · React 19 · Rust · Keygen

DeviceWatch

Live

Collect FDA MAUDE reports, review the clinical narratives and prepare draft safety reports in one place, with findings kept available for qualified review.

Next.js 16 · Claude · Part 11

SolScribe

Live

Turn recordings into searchable transcripts, speaker-labeled conversations and meeting summaries. Ask questions about what was said, with self-hosting available for processing on your own infrastructure.

Go · React · WhisperX

Fluid Timer

Live v1.1 · $9.99

Start a focus session, see the time remaining in your menu bar and let Focus Chain start the next work period or break.

SwiftUI · Sparkle · Mac App Store

DropSnip

Shipped v1.2

Capture your screen, cover sensitive details and point out what matters with annotations before sharing.

Swift · SwiftUI · Sparkle

WinClip

Shipped v2.2

Select text to change its case, remove duplicate lines, format JSON or extract links from a floating toolbar, without opening another tool.

Windows · R2 update feed

Framegentic

Shipped v1.0

Keep the last two minutes of your screen in memory. Hit a hotkey, trim the clip and paste selected frames into your chat so you can ask about what happened.

Swift 6 · ScreenCaptureKit

nasbridge

Public

Give an assistant tools to inspect and manage storage pools, shares, snapshots and virtual machines through MCP, with 278 actions behind one tool.

Open source · MIT

Mealdrop

Live · self-hosted

Plans the week from your recipes, calendar and meal preferences, emails you the plan and adds the groceries to your configured Kroger cart, ready to review for delivery.

Next.js 16 · SQLite · TrueNAS

duncansmith.tech

Live

Home base, the blog and the case studies.

Astro · Cloudflare Pages

Internal tools

Secrets Gateway

The one place keys live. AES-256-GCM, REST, MCP and CLI.

mcp-wrap + notify

Secrets injected at spawn. One buffered channel to the phone.

loop-harness

A worker writes the code, a separate judge grades it. Nothing grades its own homework.

Mailroom

Drafts routine support replies from product documentation and keeps flagged messages available for review.

Keygen fulfilment

Stripe and Gumroad sales become licence files in the buyer's inbox.

marketing-os

Prepares product updates for review, then publishes approved blog, social and email copy on schedule.

outreach-crm

Prospect lists into Twenty CRM, drafts into Fastmail. A human presses send.

life-os

Brings the day's schedule, open work and household updates into one morning brief.

Growth OS

Daily synthesis and ops dashboards.

events-pipeline

Atlanta events, watched and digested weekly.

actual-intelligence

Local-LLM categorization over the household budget.

local-genai-studio

Images, music, video and 3D for the household, generated on the Studio.

Bench Selfward (retiring '26) · Five (retiring '26) · DealsFix (retired '26) · FrameSnap (folded into Framegentic) · KidCart (parked) · VibeVal (retired '26) · Omi companion (retired '26) · Task Tracker MCP (retired '26)

Connections and access

Secrets
Secrets Gateway on the NAS. AES-256-GCM at rest, mcp-wrap injects at runtime. Keys live in exactly one place.
Files
Resilio Sync between machines, with the NAS as an always-on read-only peer.
Notes
Obsidian LiveSync over self-hosted CouchDB. Two machines, one vault, no iCloud.
Code
Everything under ~/repos, GitHub as sync, private by default.
Docs
Obsidian thinks, BookStack remembers. Nightly inventory scripts keep both honest.
Models
One LiteLLM gateway in front of every local model. Callers ask for a role, not a model, so a swap is one config change.
Backups
Nightly dumps and snapshots on the LAN, a weekly copy offsite and a deadman on each leg.
Mail
Cloudflare routes it in, Fastmail holds it, Mailroom sorts the product inboxes.
Alerts
Everything funnels through one notify buffer to Pushover. Interruptions are earned.

Rev 5 · surveyed 2026-10-02