The Schmidt Within

THE BENCH

Everything that has crossed the workbench: robot eyes, LED clocks, sensor nodes, a drawing robot, an AI box, and the software that keeps the house running. 29 projects, each with its code, its video, and its photos where they exist.

Live

The Schmidt Within

The site you are reading, and the tool that publishes it

The family's front door on the web, served from a Synology NAS in the basement. A starfield, a few cards (the photo server, the family history archive, the projects) and nothing else. The real work here is the publisher: one Python script that copies a project folder to the NAS over ssh, swaps it into place so nobody ever sees a half-copied site, then reads the live page back and refuses to call it published until the checksums match. Every site on here, this one included, ships by double-clicking a two-line batch file. Also in this folder: the plan for the private, house-only tier and the running record of what has actually been verified.

  • Synology NAS
  • Python
  • Website

Last activity 2026-09-04

Live

Looking East

What you are looking at when you look east from Farmington

The mountain behind Farmington and Kaysville, explained. The lake that stood 900 feet over the street, the canyons that have come down on the towns, and what was built to catch them. Almost nothing on the page is drawn by hand. The horizon is computed one ray at a time from USGS elevation data with the curve of the Earth taken out, the canyon mouths were measured off the terrain, and the lake slider floods the real contours. Every claim carries a marker saying what it rests on, and the unflattering markers get used more than the flattering ones on purpose. Built to be served from the basement with no internet dependency at all.

  • Static site
  • Python
  • Geology

Last activity 2026-09-04

Live

Inklings

My reading log drawn as a map of who influenced whom

Every author I've read is a lit amber node, sized by how many of their books I've logged. The authors who influenced them, the ones I haven't read yet, sit around the edge as dim dashed nodes: a frontier that grows as I read. Import a Goodreads export or a Kindle library, let Wikidata fill in the documented influence links, and let a local model suggest the rest for me to confirm or reject. Three views: the map, a timeline by publication year, and a lineage finder that walks the shortest chain between two authors. One SQLite file in a container on the NAS. What you see here is a read-only copy of it: the NAS writes the map out as plain files every fifteen minutes, and the buttons that change anything exist only inside the house.

  • Docker on the NAS
  • React + Node + SQLite
  • Reading

Last activity 2026-09-04

MMM-Inversion
Working

MMM-Inversion

A MagicMirror module that calls the inversion before the air turns

I live on the Wasatch Front, and five or six times a winter a lid of warm air sits down on the valley and traps everything we breathe under it. The air-quality apps report the pollution once it has built up. Nothing reports the lid. This module does. It compares the weather station on my roof against a snow-survey thermometer 3,600 feet up Farmington Canyon. When the mountain gets warmer than my yard, that's the lid going on, and the panel says INVERSION, usually a day before the air-quality number catches up. It holds the top-left corner of the mirror in the photo: a two-way mirror over a monitor, in a wood frame, with a red glow behind it. Works in any valley with a rim of mountains.

  • MagicMirror
  • JavaScript
  • Weather

Last activity 2026-09-02

Working

Homelab

The notes and scripts that keep the house servers alive

Not a project so much as the binder. A mini PC runs Proxmox with Plex, Immich, AdGuard, and Home Assistant on it, a Synology NAS holds everything, and a GPU workstation does the AI and sleeps when it can. This folder is the operating map for all of it: which machine does what, how to reach each one, the three-tier backup design (LAN to NAS, NAS to a USB drive, NAS to off-site), and a health check script that reports on the photo server and all three backup tiers in thirty seconds. Also the audits: 14,000 photos that never made it into the photo server, duplicates, videos worth re-encoding. Basically, everything I'd need to rebuild the house from scratch.

Two fixes worth telling

The photo server (Immich) started timing out, and the mini PC that runs the house servers showed a load of 122 on four CPU threads while doing almost nothing useful. Immich was re-encoding every phone video, eleven at a time. Dropping that to two and handing the chip's built-in graphics the job got all 389 HEVC videos (the phone's format) a copy that plays anywhere, at a peak load of 3.88. The other fix was cheaper: the box had one 16 GB memory stick and an empty slot beside it, so the answer to running out of memory was a second stick, not a new PC. It's at 31 GB now.

  • Proxmox + Synology
  • Shell + PowerShell
  • Infrastructure

Last activity 2026-08-31

Working

Keyboard Stutter Detective

A wireless keyboard that repeats letters, and a monitor that says whether it's the radio or the software

My wireless keyboard started stuttering, one letter repeating itself, mostly during video calls. Two different things cause that, with opposite fixes. Either a radio packet got lost (the keyboard shares the 2.4 GHz band with Bluetooth) and Windows never saw the key come back up, or a program that watches every keystroke stalled and dumped its backlog in a burst. So I wrote a monitor that logs only timing, never which key, and an analyzer that says hardware or software and names the fix. Numbered batch files beside it keep the USB receivers powered and switch off the Bluetooth radio, each with a preview and an undo. It ran once; the worst run it caught was one key hitting 35 times. Which way the verdict went, I never wrote down.

  • Windows
  • PowerShell
  • Wireless keyboard

Last activity 2026-08-28

Working

NAS Monitor

When the NAS drives chatter, this says what is doing it

The NAS makes a clicking noise at odd hours and its own resource monitor won't tell you why. This page does. A single shell script on the NAS reads the counters the kernel already keeps (disk operations, per-connection bytes, who dialed whom, which container owns the socket) and writes one small JSON file every five seconds. A page in the same folder graphs it live: a QUIET, TICKING, or BUSY lamp, seeks per second (the number that tracks the sound, kilobytes don't), and every machine talking to the NAS with which direction it started in. Costs the NAS under one percent of a core. No history, on purpose. Look while it's happening.

  • Synology DS218+
  • Shell + HTML
  • Monitoring

Last activity 2026-08-27

Working

Bob's Bubble Rampage

A bubble game rebuilt from scratch, with a screen-time clock that pays the kids back

It started with a 2018 bubble popper whose ad networks had all died. Instead of patching someone else's app, I rebuilt the idea from nothing: tap a bubble to grow it, big ones burst, droplets fly out and set off the neighbors. The whole game is one HTML file. It runs in a browser, wraps into a tiny Android app, and serves to the iPad over the house Wi-Fi. The part I care about is the clock. Play time runs out, a short reading or math break earns it back, and every level is checked by a solver that proves it can be beaten. Two kids, two difficulty tracks, family photos as rewards, and the photos never leave the device. My son named it, and Bob is the hero.

  • Android + browser
  • HTML + JavaScript
  • Kids game

Last activity 2026-08-26

Working

PressToRevive

One big button that wakes the TV box

Two kids, nine and six, need to turn the TV box on. The box can't be woken by any keyboard, mouse, or remote, and it's not a settings problem: the firmware only offers modern standby, and USB wake simply isn't there. What does work is Wake-on-LAN. So: an arcade button on the coffee table, wired to a NodeMCU that builds the magic packet itself and broadcasts it, with no home automation server in the middle. An RGB light breathes red when the box is off, flashes green while it wakes, and sits solid green when it's up. Built, flashed, and watched waking the actual machine. The enclosure is still to come.

How the light knows

The light also has to know whether the TV box is awake, and it can't just ping it. This machine's only sleep mode keeps the network card alive, so a sleeping PC answers pings like it's up. So instead of asking, the box announces. A tiny beacon runs on it as the logged-in user and sends a small network packet every five seconds. Sleep suspends user programs but not services, which is exactly why it isn't a service, so silence means asleep. Install is one double-click, remove is another, nothing system-wide.

  • ESP8266 NodeMCU
  • C++
  • Home automation

Last activity 2026-08-09

Working

CyclopsGaze

One eye on a round display that watches your face

The eyes on IRIS used a little face-detecting board called the Person Sensor to know where to look. Then it got discontinued, which is a problem for a project other people are meant to be able to build. CyclopsGaze is the testbed I built to answer one question: can DFRobot's AI camera stand in for it without the eyes losing their soul? It can. One Teensy, one 1.28-inch round display, one camera, and you get an eye that tracks a real face instead of wandering on a timer. About $47 in parts. It's also a Halloween prop waiting to happen. The driver went straight back into IRIS.

Bench demo, 38 seconds, captioned: the eye finds a face and follows it

The one that didn't work

This wasn't the first try. Before it I built OGLE, a camera board that did face detection on its own chip and sent one line of text over USB. It got built, flashed and given Wi-Fi updates, and then retired in July 2026, because at the real distance and lighting on IRIS's desk it kept reporting no face, or a face it wasn't sure about. CyclopsGaze exists because OGLE didn't work.

  • Teensy 4.1
  • C++
  • Animatronics

Grew from TeensyEyes Led to IRIS

Last activity 2026-07-27

Working

SSH Address Book

A one-click SSH launcher for everything on the LAN

I've got a Proxmox box, a NAS, a Pi, a GPU workstation, and a handful of boards, and every one of them has a different port, user, and key. This is a small Windows app, one exe, that keeps them in a list with big Connect buttons. Click one and it opens Windows Terminal or PuTTY with the right ssh line already typed. Add, edit, test, and search from the same window. It's built for a personal desktop on a home network, so it keeps things simple in ways you wouldn't want on a shared machine. Python and Tkinter, one file of hosts beside the exe, nothing else to install.

  • Windows
  • Python + Tkinter
  • Utility

Last activity 2026-07-05

Working

LAN Before-and-After

Did the ad blocker actually change anything? Measure it.

Before AdGuard Home, an ad blocker for the whole house, went on the network I wanted a baseline, not a feeling. One batch file pings eight house machines from a fixed list, times how long twenty everyday sites take to look up, checks whether fourteen known ad and tracker domains still answer, runs a traceroute, and writes a dated report. Run it before, run it after, put them side by side. A second script sweeps the network and lists every device and what it's listening on; the one run on disk found 36 live devices and could put a name to 7 of them. Six reports over ten days. Before: 12 of the 14 ad domains answered. After: 12 of 14 blocked, and everyday lookups got no slower.

  • Home network
  • PowerShell
  • AdGuard Home

Last activity 2026-07-04

Working

Last.fm to Plex

Years of listening history, turned into Plex playlists

I've scrobbled to Last.fm for years (its word for logging every track you play), so it knows my loved tracks, my all-time top tracks, albums and artists, and what I was playing in each stretch of my life. Plex, the media server where the music actually lives, knows none of it. This is a batch-file menu with nine choices: pull each of those lists from Last.fm and match them against my Plex library into playlists, build era playlists from the year stamped on each MP3, build mood playlists from the genre tags, and export every Plex playlist as a backup. Matching is the whole job. Names never agree, so it strips the feat. and the parentheses before comparing. What it can't find goes into a text file.

  • Plex
  • Python
  • Music

Led to Attune, which took over the Plex side

Last activity 2026-06-27

Working

TeensyEyes

Chris Miller's animated eyes for Teensy, the seed that grew into IRIS

This is Chris Miller's port of Adafruit's Uncanny Eyes to the Teensy 4, and I keep it on the bench because everything with eyes in this house descends from it. It draws a whole eye in real time (sclera, iris texture, pupil, eyelids) on a 1.28-inch round display, and it does it fast enough to look alive. My first modification, back in 2023, bolted a Person Sensor onto it so a single eye on a Teensy 4.0 would look at whoever walked in. That experiment is what turned a voice assistant into IRIS. The code here is his and the credit is his. I just couldn't stop building on it.

  • Teensy 4.x
  • C++
  • Animatronics

Led to IRIS, CyclopsGaze

Last activity 2026-03-13

Working

SCARA Drawing Robot

A two-arm drawing robot on three hobby servos, ported to an ESP32-S3

Mateusz Juszczyk's drawing robot: two servos swing a pair of printed arms, a third lifts the pen, and a little web page served by the board itself turns your drawing into arm angles. I built mine on an ESP32-S3 Zero instead of the board he used, which meant moving the servo pins off the boot pin, a custom partition table so the web app would fit, and a fair bit of fiddling with the main loop. It got to the point where I named the workspace file GOOD, which is as much of a changelog as this one has. The printed parts are on MakerWorld and the firmware is his repo. Mine is the pin map and the partitions.

The flashing chore

Flashing the board got its own helper: a PowerShell menu that lists the COM ports (the USB serial ports), lets me pick the firmware file from a file dialog, erases the chip, reads its ID, builds the merged firmware from the PlatformIO project (the build tool), and writes it to the chip at address zero with the right size and mode.

  • ESP32-S3
  • C++ + Preact
  • Robot

Last activity 2026-01-05

Working

Infinity Cube

Six mirrors, 230 LEDs, and a tunnel of light that goes on forever

An infinity cube is a box of six two-way mirrors with an LED strip along every inner edge. Look into any face and the reflections bounce between the mirrors and recede into a tunnel of light that seems to go on forever. Mine is 3D printed from an open design (the frame, a top and bottom, and a stand with a pocket for the controller), with 230 addressable LEDs run by an ESP32 on WLED, so it takes any of WLED's effects and the sound-reactive ones too. The print file, the WLED settings, and the presets are all backed up. A photo is not, which is the one thing this entry is missing.

  • ESP32 + WLED
  • 3D printed + two-way mirror
  • Light

Last activity 2024-05-01

Lowrider Bike
Working

Lowrider Bike

Built at thirteen. Twisted chrome, red velvet, whitewalls.

Before any of the code, there was this. I built it at thirteen: a lowrider on a cruiser frame, painted deep red, with twisted chrome everything. The springer fork, the sissy bar, the handlebars, the pedals, all twisted. A button-tucked red velvet seat on a spring. Fine-spoked chrome wheels on whitewalls, and chrome fenders you can see yourself in. It's still in the basement by the pool table, and it still shines. Everything else on this page came after it, and I think a lot of it came from it: the first time I took a pile of parts and a picture in my head and ended up with the thing.

  • Steel and chrome
  • Hand built
  • Lowrider

Last activity 2021-08-10

In progress

RDP Disconnect Fix

Remote Desktop kept dropping and blaming encryption. It wasn't encryption.

My laptop's Remote Desktop session to the main PC kept dying with a data encryption error. Every online guide chases that message. Dead end. Windows' own event log showed the encrypted channel was already up when the connection got torn down. What failed was the layer above it, the part that ships the picture, and Windows has no better error to print. So, two batch files: one reads the last two weeks of sessions and says why each one ended, the other applies the fixes, backs everything up and writes a revert file. The laptop side didn't cure it. What's left is a script for the main PC that turns off hardware video encoding, and I never wrote down whether it worked, so this one's still open.

  • Windows
  • PowerShell
  • Remote Desktop

Last activity 2026-07-29

VIGIL Nodes
In progress

VIGIL Nodes

Room sensor nodes that point a ring of light at whoever is in the room

A VIGIL node is an ESP32-S3 with two 24GHz radar sensors and a 241-LED ring. The radar tracks up to three people by bearing and distance, and the ring draws a needle that swings toward whoever is moving, brighter the closer they get. A rotary knob sets brightness and the stillness threshold. Version 3 is flashed, on the bench, and does the thing I set out to make it do: the needle points at the person. What's not built yet is the other half, the display that the nodes report to over the network. That half belongs to IRIS, so VIGIL waits on it.

  • ESP32-S3 + mmWave radar
  • C++ + Python
  • Presence sensing

Last activity 2026-06-15

In progress

Stink Lake Sheriff

A chaos game my nine-year-old designed, built in Godot, a free game engine

This one is my son's game. A dog cop who fires lacrosse balls walks into a town square, and everything sets off a chain reaction: hit a sheep with a lacrosse ball, that sheep hits three more, the old man on the dock ends up in the lake, and a poop-emoji chaos meter climbs. His design doc lays out the whole town, its zones, its characters, and what happens when you hit each one. I picked Godot (a free game engine) because its scripts are plain enough that one day he can change a number himself and see what happens. The first chunk is built and exported as a Windows program: one square, one weapon, five sheep, a chaos meter, and a save file. The rest of his list is still his list.

  • Godot 4
  • GDScript
  • Kids game

Last activity 2026-05-09

Laminar Flow Jet
In progress

Laminar Flow Jet

A glass rod of water, lit from inside, built from a thousand straws

A laminar jet is a stream of water so smooth it looks like a glass rod. You get it by calming the water down: it comes in rough from the pump, gets slowed through baffles and a low-pass filter that soaks up the pump's pulses, then runs through thousands of drinking straws packed in a cylinder so every thread of it moves the same direction, pools, and leaves through one sharp-edged nozzle. Light it from behind and the stream carries the light like a fiber optic, glowing all the way to where it lands. Mine is built from scratch: the stainless body, the straw pack, a one-inch solid fiber optic rod fed by a 20 W addressable LED, and the filter. The yard is trenched for it. The stone basin it lands in is next.

  • Stainless + straws + fiber optic
  • Plumbing + 12 V LED
  • Water feature

Last activity 2026-02-23

In progress

Clockwise

Jonathas Barbosa's 64x64 matrix clock, pulled to the bench and not yet built

Clockwise is an open source wall clock on a 64x64 RGB matrix and an ESP32, with pixel-art faces (Mario, Pacman, a world map) and a browser flasher so you never touch a toolchain. I pulled it down at the end of 2025. Nothing here is mine and I haven't wired a panel to it yet. It's here because ChronoBloom's README names it as the comparison: nothing in my clock touches its pixel-art faces, and its flash-from-a-browser setup is the bar I measured ChronoBloom's own flasher against. So it sits on the bench as the next clock to build and as a reference for how a hobby firmware should welcome strangers.

  • ESP32 + HUB75 matrix
  • C++
  • LED clock

Last activity 2025-12-30

Retired

MusicIP Playlist Export

The investigation that turned into Attune

MusicIP Mixer builds great playlists and then keeps the song files locked up inside itself. All I wanted was for the tracks in a mix to land in a folder I could copy to the car. This folder is the investigation: poking at its binary playlist files, AutoHotkey scripts prodding a preferences dialog that turned out not to have the field, registry spelunking, and the write-up that concluded a script would have to do the job MusicIP wouldn't. That script was the seed. The research here got split out and grew into Attune, which replaced MusicIP altogether, so this one is retired and kept for the paper trail.

  • Windows
  • PowerShell + AutoHotkey
  • Music

Led to Attune

Last activity 2026-07-10

Retired

TV Ambilight

238 LEDs behind the TV, painting the wall with the picture

Before any of the clocks, there was a strip of addressable LEDs (each one settable to its own color) around the back of the TV, driven by Hyperion, a free program that watches the edges of the picture, so the wall behind the screen glowed with whatever color was at the edge of the frame. What's left of it on disk is the map: 238 LEDs, each one told which slice of the screen it watches, plus the strip settings, dated January 2019. There's an even older set from 2017, from the Windows tool I tried first. There's no photo of it in the folder and nothing here is newer than 2020, so it's retired until a picture turns up.

  • WS2812 LED strip
  • Hyperion
  • Ambilight

Led to every LED project after it

Last activity 2020-10-16

How this page was checked

Built 2026-09-04 by reading each project folder on the workbench PC: its README, its docs, and its git history. A status chip comes from evidence in that folder (a commit date, a status line in the README, a build folder, a note saying it was superseded), not from memory. Every link on this page answered when it was fetched that day: repositories and sites with a plain request, videos through YouTube's own lookup so a deleted video would have shown up as missing. Repositories that are private were left without a Code link rather than linked to a page that would not open.

The photos and clips are Joe's own, pulled from the project folders and the phone. Build photos were auto-leveled and lightly sharpened, nothing more. Three of the hardware entries (TeensyEyes, the drawing robot, Clockwise) are other people's code that this bench builds on. They are labeled with the author's name on the link, and the entry says what part is mine.

This page records one moment. If a project has moved on since 2026-09-04, the project folder is right and this page is stale.