two linux boxes · ready for more

Real tools.
AI UX lab.
LLM-first.

I build things I actually use — notebooks that listen, tools that talk back, sweeping radios, cameras that understand context. I am the architect; LLMs handle most of the typing.

◬ surface pro 9 · UI playground ◆ dockerllm · Debian docker host ⚡ ~1,400 tests across the workspace
how I work with LLMs

LLMs do the typing.
I architect and orchestrate.

Working with an AI coding assistant isn't "type a prompt, get an app." It's more like pairing with a very fast, very literal colleague. I tell it what to build, hand it the errors, and tell it when it's wrong. The output gets good when the process stays tight — short, scoped sessions with a clear plan before any code.

Every project on this page was built the same way. Nothing clever — just consistent. The code is nothing special; the process is.

how I vibe-code →
what it buys me

Three things.

  • reviewableanyone can pick up a branch and understand what happened — a fresh LLM session, another vibe-coder, or an engineer who's never seen the repo
  • resumableany piece of work can be picked back up from a short doc, months later — by me, by another collaborator, or by the LLM
  • trustworthythe tests catch what I'd miss, so I don't have to hand-check every diff
the work

Projects I use.

Magicnote three-column window: folder tree, a card with text, photo, and audio, and the assistant chat pane magicnote · the notebook that listens

Magicnote

the flagship notebook
live

Magicnote is a notebook that listens, watches, and helps you think. You write in it the way you'd write in any notebook — pages inside folders — but it can also record audio, take photos, accept drawings, and talk to an assistant that reads and edits alongside you.

Terminal showing JSON-RPC tool calls to location and weather MCP servers mcp trio · location · weather · search

MCP Trio for MagicNote

gpslog · weather · grok x search
live

Three small MCP servers that give MagicNote's agent real situational awareness. Where I am, what the sky is doing, what's happening on X right now. Weather runs in a container on dockerllm; gpslog is stdio-native.

MCP stdio geoclue open-meteo grok api
HackRF SIGINT dashboard: live spectrum and waterfall with colored peaks hackrf · SIGINT workstation

HackRF SIGINT Dashboard

hackrf one + portapack mayhem
live

Browser-first spectrum + waterfall, 30+ US band allocations, remote PortaPack control. Hardware interrogated command-by-command over the ChibiOS shell — every button traces back to something verified on the device.

FastAPI websocket hackrf_sweep no npm
adv-camera viewfinder with histogram, focus-peaking and level overlays adv-camera · libcamera + GTK4

adv-camera

the camera app Ubuntu didn't have
live

Python + GTK4 + GStreamer on libcamera. Autofocus, histogram, audio levels, recording. The rear 13 MP Surface sensor streams at 30 fps — something that took a custom libcamera build and an IPA tuning file to achieve.

libcamera 0.7 gstreamer IPU6
Surface Pro 9 with GNOME on-screen keyboard visible, Type Cover folded back surface_osk · OSK manager daemon

surface_osk

when the type cover goes, the OSK comes
live

A tiny Python daemon that toggles GNOME's on-screen keyboard based on whether you have a real keyboard attached. pyudev, evdev capability checks, 1.5 s debounce, and a sleep/resume listener. No polling.

pyudev systemd evdev
diag_dash.py terminal with live event rows, colorized status columns gsm + gps · surface radio probes

GSM + GPS Probes

what's my radio actually doing
experimental

Command-line probes for the Surface's cellular modem and GPS hardware. A dashboard for event diagnostics feeds into gpslog, which the MCP server reads.

modem-manager qmi qcsuper
the rig

Two Linux boxes.
On the LAN.

The Surface Pro 9 is the UI playground. It's where I try out interfaces for LLM-layer applications — cameras, microphones, stylus, GPS, software-defined radio all inches from the code. The dockerllm Debian box is the deployment platform: headless, docker-compose all the way down, where the services live. Everything here runs on the LAN today — with cloud pieces coming as the garage grows.

what it took to make both sides work
Surface Pro 9 Ubuntu 24.04 · linux-surface 6.18.7 · GNOME · Wayland
dockerllm Debian · headless · containers all the way down
Hardware MCPs mic · GPS · camera · HackRF · PipeWire graph tee
Containers Portainer · Dozzle · Watchtower · B2 offsite backups
Encrypted end-to-end traffic wrapped in TLS and SSH across the LAN
BYO API key Anthropic for dialog · local models · parallel LLM vendors