// andrew le

I build things
and write about
what I learn.


I like self-hosting, tinkering with hardware, and figuring out how things work. Most of what's here started as a problem I wanted to solve for myself.

About

I'm Andrew. BS in Electrical Engineering from Cal State Long Beach. I work in industrial automation in Orange County. Outside of work I run a small homelab and write about the things I build.


I got into self-hosting because I wanted to understand the full stack, not just the parts I use at work. One NAS turned into four machines, a bunch of Docker containers, and more blog posts than I expected to write.

Writing

Notes and deep dives from running a homelab.

$72 Worth of ESP32s and a Plan to Automate Every Room

Seven ESP32 boards, a pile of AliExpress sensors, and ESPHome on Unraid. Wiring up every room for $72 with no cloud dependencies.

The Exposed Machine: Why Linux Lets You See Everything

A deep dive into Unix philosophy, sysfs, systemd, and udev. Why writing strings into files to control hardware isn't a hack, it's the whole point.

What One Desktop Can Do: 14 AI Capabilities on Consumer Hardware

Fine-tune 70B models, real-time video style transfer, voice cloning in 3 seconds, autonomous browser agents. All running on a single i9-14900K with dual GPUs.

37 Models, One 4090: Local LLM Benchmarks on Consumer Hardware

Every Ollama model I could throw at a 4090 + 4070, benchmarked. Tier lists, speed breakdowns, and which models actually matter for daily use.

36GB of VRAM for $98: Building a Dual-GPU LLM Rig

How I got a second GPU running through an M.2 slot with DIP switch hacks, pin 9 wire snips, and a GPU sitting on cardboard behind my PC.

The $30 Adapter That Unlocked My 4070

8x PCIe bandwidth improvement, 289% speed boost on split models, and 20W less idle power. All from a $30 M.2 adapter and some DIP switch detective work.

Why My Workstation and NAS Draw the Same Power

61W vs 68W. One is a 14nm overclocked chip with an idle 1080 Ti. The other has four 7200 RPM platters fighting friction. Different waste, same bill.

120W to 61W: Half the Power, Zero Compromises

Taking a former gaming PC from audible and power-hungry to silent and sipping 61W. Headless NVIDIA driver, iGPU display, and aggressive service cleanup.

Three Nodes, One Chat UI: Building a Multi-Node Ollama Cluster

Three Ollama instances on different hardware, all feeding into one chat interface. How Open WebUI merges model lists and handles sleeping GPUs.

Fixing the DXP4800+ Thermal Paste and Fan Control Disaster

Factory thermal paste with 40% die contact, ACPI fan controls that were completely fake, and the BIOS key combo nobody tells you about.

ScanForge: Generating PLC Projects Without an IDE

39 MCP tools, 5838 tests, RAG over 11,900 Rockwell docs. The only tool that generates complete Allen-Bradley PLC projects from markdown specs. Nothing else like it exists.

AgentsTV: Making AI Coding Sessions Watchable

Turning Claude Code session logs into a pixel art Twitch-style stream with AI-generated viewer chat, esports narration, and a Master Control Room dashboard.

Dual NVENC: Parallel Video Encoding on RTX 4090

Exploiting the RTX 4090's two NVENC chips for parallel AV1/HEVC batch encoding. TUI dashboard, researched encoding flags, and auto-cleanup for files that got bigger.

Building an AI Sidekick for Your Video Player

Frame capture from mpv via IPC, sent to vision LLMs for analysis. A floating PyQt6 panel that lets you ask questions about what you're watching.

Deploying Accessible Tech for Blind Children in Vietnam

19 Dell laptops with NVDA screen readers, Vietnamese TTS, and Tailscale remote fleet management. Deploying to orphanages in April 2026.

Automating Home Inventory with Amazon Scraping

Paste an Amazon URL, get a fully populated Homebox inventory item. Product scraping, manual finding, and vision AI for identifying items.

Optimizing the GT-AXE16000 with Merlin Firmware

OFDMA tuning, country-code TX power boost, AdGuard DNS, and 6GHz 160MHz channels hitting 1814 Mbps. Plus the neighbor interference analysis.

25.5TB of Memories: Building a Preservation Strategy

Auditing irreplaceable photos, music, and documents across a homelab NAS. Three-layer preservation model, format longevity assessment, and 10TB of organizational debt.

Saving Family Tapes Before They Die

FireWire for bit-perfect MiniDV, USB capture for VHS. The gear, the workflow, and why you should do this before the oxide flakes off.

Projects

Multi-Node Local AI Stack

Three Ollama nodes (RTX 4090 + GTX 1080 Ti + Apple M3) feeding into Open WebUI. 37+ models benchmarked, 70B Q2 models running at 25 tok/s via dual-GPU split. K43SG adapter delivering 8x PCIe bandwidth improvement to the 4070.

ScanForge

Programmatic PLC project generator for Allen-Bradley Micro800/ControlLogix. 39 MCP tools, 5838 tests, reverse-engineered file formats. Nothing else like it exists.

Server Automation with n8n

10 workflows handling infrastructure monitoring, Docker update checks, disk space alerts, daily digest emails, Roon library changes, and Paperless document webhooks. Real-time push via ntfy.sh, scheduled digests via Gmail SMTP.

Ubuntu 8700K Power Optimization

Took a former Windows gaming PC from 120W idle to 61W - a 50% reduction with zero performance loss. Headless NVIDIA driver, iGPU display, fan curve tuning, and aggressive service cleanup. The 1080 Ti still has full CUDA compute on demand.

Document Pipeline

Paperless-ngx with automated processing webhooks. Incoming documents get OCR'd, tagged, and trigger push notifications via n8n workflows to ntfy.sh.

Infrastructure

Four machines connected over Tailscale. About 50TB of storage, mostly photos and music.

andrew@server ~ storage
$ df -h --total /mnt/disk* /mnt/cache
3 data disks + 1 parity + 2 NVMe pools
50TB usable, ~56% full

Services

The highlights. There are about 37 containers total, but these are the ones I actually use every day.

Jellyfin
Movies, TV, and music for every screen in the house.
Immich
Photo library with ML search. Replaced Google Photos.
Roon
Audiophile music server. Rich metadata, multi-room.
Open WebUI + Ollama
Local LLM chat across three nodes. 37+ models available.
Paperless-ngx
Document management with OCR and auto-tagging.
Home Assistant
Lights, climate, sensors, automations.
n8n
10 workflows: disk alerts, update checks, daily digests.
ScanForge
PLC project generator for Allen-Bradley. Reverse-engineered file formats. My own project.
Homebox
Home inventory for every item I own. Automated with Amazon scraping.
PartsDB
Electronic components inventory. Resistors, ICs, MOSFETs, capacitors.
Grist
Spreadsheet database for battery tracking across all devices.