Matthew Robinson Tech Leader & Software Architect

Programming

Grassland with young trees and boulders, rolling down to a lake under distant mountains.

Featured

Artisan

A multiplayer open-world survival crafting game.

Built in Godot with C# and .NET, with a Rust extension that renders the terrain. It reports its own telemetry to the homelab’s tracing stack, and some of its tools became projects of their own, such as Arbor and Rig Studio below.

  • Godot 4
  • C#
  • .NET
  • Rust
Hundreds of arrow-shaped cells and blue trails crossing a glowing yellow and blue chemical grid, beside a list of active runs and population charts.

Featured

Evo Cells

An artificial-life simulation that picks up where my master’s thesis left off.

My thesis, Neural Networks and Self-Organizing Cellular Automata (2021), evolved neural networks to act as the local rules of a cellular automaton. In Evo Cells, cells live on a grid of chemicals that they sense and pump, and each one is driven by a neural network evolved with a genetic algorithm. None of their behavior is hand-coded. Climbing toward food, for example, evolved on its own. A tournament mode runs many variants side by side and seeds the next round from the winners.

  • Rust
  • axum
  • WebSockets
  • TypeScript
  • Svelte
  • Canvas
A Grafana chart of running containers over twelve hours, holding at 185 and climbing to 199.

Homelab fleet

The self-hosted platform every other app here runs on.

Containers
About 190 Docker Compose services on one Linux VM, with GPU work handed off to two desktop PCs through Depot, below.
Backups
Every database is backed up offsite each night, and restore drills prove the backups work.
Security
Private by default, with one sign-in for every app.
Durability
Watchdogs recover services that hang, and alerts reach my phone.
Observability
Metrics, logs and traces in Prometheus, Loki, Tempo and Grafana, plus one page that answers “is everything OK?”
Delivery
Every merge deploys itself, with one-click rollback. Pull requests land through Code Train, below.
Agents
AI coding agents work through more than thirty tool servers.
An agent session list and a chat where an agent plans and builds a garden app feature, overlapped by a task board grouped by status.

AI orchestration

How I run a fleet of AI coding agents, mostly by voice.

Four apps and a memory system that let one person direct many agents at once.

  • Talk The web app I run agent sessions from, usually by voice. I start them, redirect them mid-task and review what they did.
  • Talk for iOS The native iPhone client, built and sideloaded without a Mac.
  • Tasks The ticket board. The agents file and move tickets on it just as I do.
  • AI Lab A/B and regression tests for the prompts and instructions that steer the agents.
  • Memory A long-term memory the agents save to as they work. A few standing rules load into every session, and the rest surface turn by turn when they match what the conversation is about. Labels keep each memory to the projects it concerns. When I correct an agent on something a memory told it, that memory moves to an archive, and it can be restored.
  • Python
  • TypeScript
  • Swift
  • PostgreSQL
  • pgvector
A GPU machine’s video memory split among the speech, transcription and language models loaded on it.

Depot

One queue that shares a few GPUs between every app that needs one.

Speech, transcription, image and game-asset jobs all go through Depot, which schedules them across the homelab’s GPU PCs. Every job names a priority template and a deadline, and Depot turns a job away up front if no machine can finish it in time, judging from each machine’s measured run times. Each machine reports its health and which models hold its video memory, so live voice stays loaded, idle models unload, and work on a failed machine moves to the next. Each plugin declares a schema, and its API, web form and AI agent tool are generated from it.

  • Python
  • FastAPI
  • WebSockets
  • PostgreSQL
  • Docker
  • CUDA
  • MCP
Two repositories in the merge queue with their recently landed pull requests, and a button to promote a tested build.

Code Train

A merge queue that tests pull requests together and lands exactly the commit it tested.

Once I approve a pull request, an agent hands it to Code Train. It batches the pull requests waiting on a repo, builds one candidate commit from them and runs the checks on it once. On green it lands that exact commit, marks every pull request merged, moves their tickets and starts the deploy. On red, a binary search finds the pull request that broke the batch, the ones ahead of it land, and the agent that owns it is asked to propose a fix. The scheduling core is pure logic with no I/O, so property tests and replays of the old merge system’s failures pin down its rules. A new repo starts in a read-only shadow mode.

  • Python
  • FastAPI
  • PostgreSQL
  • git
  • Gitea
A top-down tile village of stone houses, a well square and a wheat field, with lettered villagers at work beside a live feed of their actions.

Agora

A tile-based village where people and AI agents have the same set of actions.

A sandbox for testing AI agents by putting them in a town with real people and letting them get on with it. The engine knows nothing about villages, romance or bread. It evaluates predicates and applies effects, and everything else is data. Local models run the ambient world, and a frontier model joins only the conversations a person is in.

  • Rust
  • TypeScript
  • Canvas
  • Local LLMs
Two women in a painted storybook style, each shown in the same green sundress with her hair up and the same camel trench coat with her hair down.

Character Foundry

Character art where you can change one thing without changing the rest.

Generates a character’s whole look from its description on a home GPU, then redraws a new outfit, hairstyle or expression while keeping the same person, or puts the same outfit on someone else. It began as the character pipeline inside Agora and became a service any app can use.

  • Python
  • ComfyUI
  • Flux
An outliner page of sourdough notes with nested bullets, hashtag pills and linked pages, beside a sidebar listing today, pinned and recent notes.

Knowledge

An outliner notebook where everything is a node.

Notes, behavior, look and settings all live as nodes in one graph, and even the links between them are nodes. There are no pages and no root: you come in through a query such as today, recent or search. It replaced my earlier notes app, and the AI agents keep their long-term memory in it.

  • Rust
  • PostgreSQL
  • pgvector
  • React
  • TypeScript
Four AI conversation partners, each with a portrait, a personality and how much English they use.

Japanese

A Japanese course that follows the Genki textbooks, with AI conversation partners.

It covers reading, listening, speaking, writing and handwriting. It has spaced-repetition drills for kana, kanji, vocabulary and grammar, AI conversation partners in Japanese-only, mixed or tutor modes, and a feed of short stories the partners write, with audio and quizzes.

  • Python
  • FastAPI
  • PostgreSQL
  • Claude
Saved courses with progress bars that show what has faded, above tiles for physics, biology, mathematics and more.

Homelab University

A self-study curriculum that tracks which concepts I’ve mastered.

Every course sits on one shared graph of concepts and their prerequisites. To master a concept I explain it back in my own words, and an AI grades the explanation blind. Mastery fades over time until a re-check restores it, so the app can tell what I’m ready to learn next.

  • Python
  • FastAPI
  • PostgreSQL
  • TypeScript
  • Claude
A chunky 3D toy circuit on a dark grid: a red battery, striped resistors, switches, a gray motor and glowing lights, with one unlit branch.

Circuit Sim

Learn electronics by snapping toy parts onto a pegboard.

Chunky 3D parts snap together, and a real-time circuit solver written in TypeScript works out their voltages and currents. Ninety puzzles in seventeen chapters run from Ohm’s law to a full adder, and you earn each new part by first building it from simpler ones. One key flips the toy scene into a schematic.

  • TypeScript
  • React
  • three.js
Three tablets showing a mining ship’s instrument panels: reactor and battery readouts, firing thrusters, a failed trim, an armed laser and dock buttons.

Vessels

A co-op vehicle simulator played across a room full of devices.

One player flies from a 3D captain’s station with a joystick, while everyone else works the instrument panels on tablets and laptops: breakers, fuel, switches, damage and alarms. Each vessel is a graph of components defined in data, so a new ship is a YAML file rather than new code. A server ticks the systems twenty times a second and keeps every screen in sync.

  • Godot
  • Jolt
  • Python
  • FastAPI
  • Svelte
  • WebSockets
A generated world’s terrain as a 3D map dotted with sites, beside a list of its civilizations and above a timeline.

Legendarium

A Dwarf Fortress world’s history, read as an illustrated 3D book.

Dwarf Fortress simulates a history for every world it generates, but shows it as lists. Legendarium draws the world’s terrain as a 3D map you fly across and reads its history back as chapters of prose. Click a fortress and the camera sweeps to it while the chronicle tells who founded it, who died there and which beasts it fell to.

  • TypeScript
  • three.js
  • Fastify
  • PostgreSQL
  • DFHack
A kids’ paint app with a rainbow kaleidoscope flower, spirograph stars, yellow star trails and pink hearts on soft airbrush clouds, beside its tool rail.

Drewloo

A modern KidPix: an infinite canvas for kids to paint on.

Every brush is a small simulation, such as tie-dye, ink blots, fluid or fractals.

  • Godot 4
  • GDScript
  • Shaders
A timber-framed shed modeled stud by stud in a 3D view, beside its list of parts and lumber sizes.

Workbench

A 3D modeling bench for woodworking that an AI can drive.

An agent places parts by their faces (“sit it on top of the plate”, “trim it flush to the rim”), and every edit re-runs an interference check, so clashing parts show up at once. I can tap or circle parts in the browser and the agent reads exactly what I mean. Lengths are feet, inches and fractions, and parts come from real lumber and sheet-goods stock.

  • Python
  • PostgreSQL
  • TypeScript
  • three.js
  • MCP
A hillside lot on contoured aerial terrain, with a planned cabin, deck, shed and garden beds casting evening shadows.

Virtual Homes

A 3D model of a property, house and land, for planning projects before building them.

Lidar, aerial photos and parcel lines all land in one real-world coordinate frame, so a laser scan, a lot line and a tape measure agree. Draw a deck or a shed on the terrain, give it a height, and see it in place, then study where the sun and shade fall. One app holds any number of properties.

  • Python
  • FastAPI
  • PostgreSQL
  • TypeScript
  • three.js
An oak tree grown in 3D beside the spec that defines it, with sliders for seed, age, wind and sun.

Arbor

Try it →

A parametric 3D tree generator where the same spec always grows the same tree.

Written in Rust and built both as a command-line tool and as WebAssembly for the browser. A tree is a pure function of its spec and a seed, identical to the last bit on every platform. Even the trig functions run through one pure-Rust math library, because the system ones disagreed in the last bit between Linux and the browser. So the asset library stores only the spec and rebuilds the mesh on demand.

  • Rust
  • WebAssembly
  • glTF
A horse drawing rigged with bones from shoulder to hoof, beside the tree of its parts and bones.

Rig Studio

Turns an artist’s layered drawing into a moving 2D character rig.

Characters arrive as layered drawings in the shared asset library. Rig Studio turns one into a cutout rig with bones and pivots that the artist can watch move, then hands Artisan a binding spec it loads directly.

  • TypeScript
  • Canvas
  • Godot
A library of models, textures and art in folders such as animals, foliage, materials and people, each with a preview.

Asset Manager

One library of 3D models, textures and audio for every project.

Files are stored by their content hash, so a model three projects use is stored once and every version stays addressable. It renders previews of formats a browser can’t open, such as layered Photoshop files, and can generate new assets on the home GPU. Generated assets such as Arbor’s trees are kept as a recipe, and the mesh is rebuilt from it.

  • Python
  • FastAPI
  • PostgreSQL
  • ComfyUI
Jam waiting at a section break for the stomp cue, above the song’s drum waveform and the mixer faders.

Jam & Drum Chart ML

Pull the drums out of any song, then play along or turn them into a chart.

Both start the same way: a neural network separates the drum part from a full recording.

  • Jam A cue-driven drummer for band practice. At the end of each section the drums stop and wait, and a stomp on a foot pedal brings them back in.
  • Drum Chart ML Turns a song into a playable rhythm-game drum chart by finding the beats and classifying every hit as kick, snare or hi-hat.
  • TypeScript
  • Web Audio
  • Python
  • Demucs
  • librosa
  • Godot
A 1935 Rapid Transit pinball board with green rings and point labels on every ball found, totaling 20,000, beside a close-up of the scored pockets.

Pinball Scorer

Scores a pre-war bagatelle pinball game from a phone photo.

It recognizes which machine is in the picture, lines the photo up with a reference of the empty board from any angle, then finds every ball in every pocket, or reads the machine’s own score reels, and draws what it found back onto the photo so anyone can check the total. It uses classic computer vision with no AI model at scoring time, and runs in under a second on a CPU.

  • Python
  • OpenCV
Three phone screens from a baby tracker: colorful logging tiles, a day’s timeline of feeds and naps, and a week of sleep blocks.

Baby Journal

A baby tracker that parents and caregivers share from their phones.

It replaces a tracker that went subscription-only, starting from that app’s data export. Feeds, sleep, diapers, pumping, growth, solids and milestones land on one timeline that streams live to every caregiver’s phone, and each entry shows who logged it. Every activity is a row in one events table, so a running timer is just an event with no end yet, and a new kind of activity needs no migration. Allergen tracking shows how long it has been since each allergen was last eaten. It also takes entries by voice, through an MCP server an AI agent drives.

  • Python
  • FastAPI
  • PostgreSQL
  • JavaScript
  • MCP
A cocktail menu of what the bottles on hand can make, with filters by taste and each drink’s ingredients.

Lifestyle apps

Small apps that each do one everyday job.

  • Wellness Logs meals, sleep, blood pressure and workouts, and shows daily nutrition dials.
  • Finance A daily dashboard of spending, net worth and retirement projections.
  • Groceries Turns grocery receipts into a searchable pantry and purchase history.
  • Bar Shows which cocktails your bottles can make, and what to buy next.
  • Reminders Set a reminder in plain English and get it as a phone notification.
  • Rentals Bookkeeping for rental properties: expenses, mileage and Schedule E.
  • Computer Parts An inventory of computers and the parts inside each one.
  • Utility Map An indoor map of a building’s wiring and plumbing.
  • Play One search box that plays music on any speaker.
  • Cast One-click screen casting to a TV or projector.
  • Meetings Records a meeting with a live transcript.
  • Dictate Tap to dictate, then copy the text.
  • Photolab Drag-and-drop AI photo editing.