Six systems, each one real and running. I designed them and ran the projects. AI agents did much of the implementation, working inside rules I wrote and against checks I set. I say that plainly because directing that work well is the skill.
How to read these. Problem is what I needed. Built is what exists now. Stack is the tools. Result is what changed, with the numbers my own logs record. Every diagram is inline SVG drawn for this page.
01
Home media server
A self-maintaining library for movies, TV and music that plays at home and on the road.
Problem
I wanted one library that fills itself, cleans up after itself, and plays on every screen I own, including my phone away from home and the Xbox on the living room Wi-Fi. Managing files by hand was never going to happen.
Built
Jellyfin is the front end. Radarr, Sonarr and Lidarr manage movies, TV and music, Prowlarr handles indexing and Bazarr handles subtitles. Downloads run through qBittorrent inside a VPN container. A Soulseek client with soularr upgrades lossy albums to FLAC.
Scheduled tasks do the housekeeping: a nightly search for missing titles (Radarr and Sonarr never re-search on their own), a sync every 15 minutes so anything deleted in Jellyfin does not come back, and a daily sweep that retires lossy files once a lossless copy lands.
Music got its own pipeline. Exports from four streaming services are matched against the library every morning to rebuild playlists, and each unique album is looked up and monitored in Lidarr so the collection fills in over time.
Remote access runs over a private mesh VPN with HTTPS, because the phone refuses plain HTTP.
Stack
Jellyfin
Radarr
Sonarr
Lidarr
Prowlarr
Bazarr
qBittorrent
gluetun
slskd
soularr
Docker Compose
Tailscale
PowerShell
Python
Task Scheduler
Result
One music root: 10,197 files organized by tag into artist and album folders (69 GB), with 645 artists and 1,249 albums identified for lossless upgrades.
545 DJ sets pulled as audio only into a second music library so they stay out of the artist list.
Playlists rebuilt daily. The YouTube set list matched 523 of 524 on the first run.
Lesson logged: hardlinks fail for the download managers on Windows because they run as a service account, so real copies won.
System diagram
02
Local AI lab
A private assistant on my own GPU, with web search, reachable from my phone.
Problem
I wanted a model I could talk to about anything without it living on someone else's server, with web search when I need it, and with enough context that it does not fall over on a long question. A first attempt in June jammed a 32B model against the VRAM ceiling at 8K context, and the first web search overflowed it.
Built
Ollama serves one 27B model (a Qwen build, Q4_K_M, about 17 GB) with a 32K context window. Sampling defaults and a direct-answer system prompt are baked into a Modelfile so every client gets the same behavior.
Preset modes are separate Modelfiles that share the same weights, so they cost no extra disk: a study tutor for my security coursework, a plain-answers mode, and a few more for specific jobs.
Open WebUI in Docker is the chat front end. A SearXNG container gives it web search, capped at three results per query so a search can never overflow the context again.
The GPU is pinned by device ID so the model never loads onto the integrated graphics, which was the cause of a 1 to 2 tokens per second bug. The server starts windowless at logon.
Stack
Ollama
Qwen 27B (Q4_K_M)
Open WebUI
SearXNG
Docker
CUDA
Tailscale
Modelfiles
Windows startup scripts
Result
100% GPU residency with 32K context and about 5 GB of VRAM to spare.
Web search answers cite their sources in the UI, with the result count capped so context never overflows.
Retired cleanly when it was replaced: the old app was removed along with its models and its tasks, then rebuilt with one owner per job.
System diagram
03
Art and print pipeline
Original art from a prompt to a 13 by 19 print without touching a GUI.
Problem
Screenshots of the ComfyUI interface come back blank on my machine, and stealing focus breaks whatever else is running. I needed image generation that an agent can drive end to end, judge on its own, and take all the way to paper at true print resolution.
Built
ComfyUI runs as a local service and is driven through its HTTP API by a self-contained runner: it queues a graph, waits, downloads the PNG and prints the path. One call does the whole job, so a dropped connection cannot leave a half-finished batch.
A quality ladder: base generation at about one megapixel, a detail pass where faces or fine lines need it, then a model upscale to 3900 by 5700 pixels, which is 13 by 19 inches at 300 DPI.
A second track makes art with no model at all. A NumPy renderer computes pieces directly at 4680 by 6840 pixels (13 by 19 at the printer's native 360 DPI): domain-warped noise for a nebula, a particle flow field, and a Julia set with orbit traps.
Print prep tiles master files onto sheets and drives the EcoTank from a script, including the paper tray fix that ended a run of failed prints.
Stack
ComfyUI
SDXL (Illustrious, Juggernaut)
FLUX
UltimateSDUpscale
4x-UltraSharp
NumPy
Pillow
Python
Epson ET-8550
Result
Printed box panels and cards for festival trading, plus a three-piece wall series, all from this pipeline.
The hero image on this site came out of it: a FLUX generation, a 2x model upscale, shipped as AVIF and WebP with a JPEG fallback.
Rule I keep: pick the winner and finish. Review loops are where art projects die.
System diagram
04
Nightveil display automation
Four screens that go red at sunset, restore themselves after a wake, and never fight the other tools.
Problem
A laptop OLED plus three USB panels, a night-time red overlay, Windows Night Light, brightness and the system theme all had different owners. Wakes, cable blips and a brightness utility kept undoing each other, and the USB panels' driver crash-looped when commands hit them the moment they appeared.
Built
One PowerShell service, registered as a per-user scheduled task with no elevation, owns every display setting. Sunset and sunrise flip the red overlay, Night Light, brightness and the theme in a single tick. Ctrl+Alt+S and Ctrl+Alt+R are the manual overrides.
Anything I set by hand stays. After a wake or a cable blip the script restores my values, never the schedule's target.
An idle blackout after 20 minutes that the first input clears, with click-through restored before the slow DDC/CI calls so the veil never eats a click.
A 30-second settle rule: no DDC/CI to a USB panel until the display layout has been still that long. That came from reading the driver's crash dumps with the vendor's symbols.
A rules harness with 43 rules and a set of mutants that must all fail it, plus a guard task that rewrites any scheduled job that would pop a console window.
Stack
PowerShell 5.1
Task Scheduler
DDC/CI
Windows Night Light
Win32 overlay window
WDF crash dump analysis
Twinkle Tray (coexistence)
Result
Verified over a real night: blackout at 01:55 after 20 idle minutes, restore at 05:39 on the first input, with the saved values back.
The crash loop stopped once the settle rule shipped.
The brightness utility and the script coexist: auto-apply off on one side, 45-second restore delays on the other, one owner per setting.
System diagram
05
AI-run life admin
A scheduled agent that reads the mail, chases the threads and reports only what needs me.
Problem
Vendor threads and paperwork stall when they wait on me to open a computer. I wanted the inbox to hold only what needs a decision, everything else filed and findable, and an agent doing the chasing.
Built
A daily steward: a scheduled Claude task that reads the mail, checks the open case threads, and sends one message with only what needs me. It re-schedules itself.
Routing rules on all six mail accounts to one spec: family and one-time codes reach the inbox, records file to a searchable folder marked read, bulk mail is never seen. Text messages forward from the phone into a mail label so the same agent reads them.
Rules for the agents themselves: a machine rules file kept under 200 lines, a dated changelog, a validator with 13 regression checks that fails on any drift, and an AI-tell scanner that anything I share has to pass.
Machine hygiene the agents follow: nothing is deleted, it is staged with a manifest and purged after 30 days. Background jobs start through a launcher that never shows a window. Every replaced thing is retired in the same session.
Stack
Claude scheduled tasks
Claude Code
MCP servers
Mail APIs
Outlook COM automation
PowerShell
Python
Task Scheduler
Result
The inbox holds family and to-dos. Records are one search away.
Every change to the machine is logged, and the validator catches the regressions that shipped once.
Vendor emails get drafted so the whole thing is answerable in one reply, with numbered questions, because that is the only format I answer fast.
System diagram
06
DMACC AI coursework
An A.A.S. in Artificial Intelligence, in progress, on top of an MBA and an ag systems degree.
Problem
I already knew systems and business. I wanted the computer science underneath the tools I was using, from data prep to models to the code that glues them together.
Built
Data-Centric AI: feature engineering in notebooks against real datasets, including one module with a 49,628-file image set.
Natural Language Processing: module work in notebooks, run locally and in Colab.
Python: log-processing programs built around comprehensions, generators, function pipelines and dispatch tables, kept close to the instructor's examples on purpose.
Also in the program: an intro to computer vision, a capstone, and security coursework alongside.
Stack
Python
Jupyter notebooks
Google Colab
Canvas
Result
Graduation May 2027.
The habit that carried over: read the rubric first, match the house style, run the code before calling it done.
Summaries only here. No assignments or answers are published.