Skip to content

Projects

27 things on the bench. Chips rebuilt from their own dies, data platforms, instruments reading real hardware, math you can operate, and a few ideas that might not ship. Most shipped with Claude as co-pilot. The sites are self-hosted; the repositories are on GitHub.

Chips and consoles

A processor and a console, simulated from photographs of their own dies and not from a description of what they do. The netlists were traced by the visual6502 project and by Quietust, and are theirs (CC BY-NC-SA). What I built is the engines that run them, the tests that hold every faster engine to the switch-level one, and the bench that puts a real console beside the model. It all lives at tinymachines.ai.

A stretch of the MOS 6502 die photographed from above with its metal still on: a dense green-gold weave of wiring, with bond pads along the left edgeMOS 6502 · surface
Part of the 6502 die, metal still on, from the photographs the visual6502 team traced the chip from. The simulator in the first card runs that trace. Photograph: the visual6502 project, CC BY-NC-SA 3.0.

simulator

The 6502

A transistor-level simulation of the chip that made home computing affordable. One 6502 was decapped, photographed and traced by hand; this runs those 3,510 transistors, solved to a fixed point twice per clock cycle. Plus a link-checked archive of everything the visual6502 team left behind.

RustWebAssemblyWebGL2

AlsoRun it at tinymachines.ai

/6502

console

The NES, from the transistors up

A working console in the browser, assembled from fast chip models that are derived from, and checked against, switch-level simulations of its two chips. Sound and a simulated composite video path included. To play, you supply the cartridge file, and it never leaves your browser.

RustWebAssembly

AlsoPlay it

tinymachines.ai/nes (another site, opens in a new tab)

analysis

The autopsy

Games taken apart by running them. A pipeline plays a cartridge, names the routines its rules recognise from what they did at run time, and writes a listing that assembles back to the cartridge byte for byte. Published as shape only: no ROM data.

RustWebAssemblyPythontinymachines.ai/autopsy (another site, opens in a new tab)

libraryearly

halfphi

The simulation engine, extracted as its own MIT library: switch-level simulation and analysis of chip netlists traced from die photographs. Five chips load through the same calls.

RustMIT licencegithub.com/tinymachines/halfphi (another site, opens in a new tab)

hardwarein progress

The NES bench

An unmodified NES-001 on the desk with a controller-port bridge, relays and an oscilloscope under one script, so the real part and the model can be driven by the same inputs and compared.

Arduino UNORaspberry Pi 4SCPIKiCad

AlsoThe repository

tinymachines.ai/nes/bench (another site, opens in a new tab)

Platforms and tools

Things other people can use: three data sites that run on this machine, a product shipped through SysForge, the design system under this page, and four tools for people who work out of a truck.

data platform

TerraPulse

A measured-data platform for climate and geophysical data: readings from public instruments, and no models, forecasts or reanalysis. It serves the same records to AI agents through a public, read-only MCP server. I am its architect.

PythonFastAPIPostgreSQL + PostGISParquetMCP

AlsoThe MCP serverResearch notes, here

terrapulse.info (another site, opens in a new tab)

web app

tinychase

Small models on measured public data, run entirely in your browser: DuckDB-WASM reads Parquet over ranged requests, and an experimental cyclone model runs on your own GPU through WebGPU. I engineered it.

DuckDB-WASMWebGPUtinygradPWAtinychase.com (another site, opens in a new tab)

search platform

Nominate.AI

The political web, searchable: crawls, broadcast transcripts, county filings and OCR'd scans harvested into one corpus you can ask a question of, with the source document attached to every answer. Built on the SysForge platform and served from this machine.

PythonFastAPIOCRVector searchMCPnominate.ai (another site, opens in a new tab)

productproduction-ready

MyFinalWishes

A digital estate-planning platform shipped through SysForge, rebuilt from an earlier prototype into one TypeScript application, with per-user envelope encryption for identity data and every stored file. The live site is not linked here; the resume has the detail.

TanStack StartReact 19SQLite + DrizzleAES-256-GCM/resume

design system

The tinymachines style kit

The design system this site wears: tokens, plain-CSS components and a zoo of normative specimens. Its first rule is the one you are looking at. Paper is documentation; a dark panel is the machine talking.

CSS custom propertiesNo framework

AlsoThe specimen zoo

tinymachines.ai/style (another site, opens in a new tab)

field tools

Free tools for the trades

A quote pad, a change-order pad with signature, a job photo stamper and a voice material list. No app store, no account, no subscription, and nothing you type, sign or photograph uploads anywhere. They work for the person holding the phone and report to no one.

Browser onlyWorks without signal

AlsoHouse Calls

/housecalls/tools

Instruments on this server

Dashboards that read real hardware on this network: a Geiger counter, radios, cameras, a router. Hardware goes away, and when it does the page says so. Each card carries a dot: filled means the instrument is answering right now, hollow means it is not. The detail is on the bench.

entropy source

Hotbits

Random numbers from radioactive decay, tested continuously. A Geiger counter, a Raspberry Pi, and a comparison of one gap between decay events with the next. Nothing generates a number.

The Geiger counter: checking

Geiger counterRaspberry PiNIST SP 800-90B/trng

sensory machine

Meatball

A caseless home server built from other people's cast-offs, taught to see, hear, think and speak. Every model runs on the metal and nothing touches the cloud.

The camera is offline

Salvaged GPUsLocal LLMWhisper

AlsoField notes

/meatball

airspace receiver

Dragonfli

A Raspberry Pi, a 1090 MHz ADS-B receiver and an FAA registry lookup, running in the garage. Every aircraft is one this antenna heard directly. Nothing is fetched from a flight-tracking service.

The perception bus is offline

ADS-BGPSMapLibreUDP

AlsoAirspace mapThe perception bus

/dragonfli

door log

Knock knock

Everything that has tried the doors on this host, across every site it serves. Three tiers fused into one view: dropped at the edge by the router, trapped at the door by the scanner trap, and served. Almost all of it is automated.

The edge firewall count: checking

nginxOpenWrt/visitors

radio scanner

SDR

Software-defined radios sweeping VHF and 802.15.4 and writing what comes back above threshold to an archive. This reads the control plane in front of them.

The SDR control plane: checking

RTL-SDRVHF802.15.4/sdr

node health

Fleet

Every node in the cluster reports for itself over a UDP bus: disk, temperature, load, radio and uplink. This reads the collector that fuses them.

The fleet collector: checking

UDP bus/fleet

Math instruments

A map of prime-number theory and four machines built where it pointed: forge zeta, hear its zeros play the primes, probe the primes directly, then watch the sieve run as weather. All five run in the browser, no dependencies, no network. The sixth is general relativity, and it is solved in your browser too.

The Primality Atlas: a dark terrain map of prime-number theory, its landmarks drawn as labelled rings and squares across coloured regions of proven, conjectured and open ground

the map

Primality Atlas

Twenty-nine landmarks from the Euler spring to the parity cliff, drawn as ground you can walk: what is proven, what is merely believed, what nobody knows, and what has been proven impassable.

One HTML fileNo network requests/projects/prime-atlas
Zeta Forge: the partial sums of the zeta series drawn as a walk of short arrows that spirals in to a point, with the step count and the running value printed under it

the workbench

Zeta Forge

Build ζ(s) = Σ n⁻ˢ one term at a time. Each term is an arrow; where the walk lands is the value, and a zero is the walk that comes home to the origin.

One HTML fileNo network requests/projects/zeta-forge
Prime Orchestra: the true prime staircase drawn as a rising line over a field of vertical marks, one at each prime, with the wave controls beneath

the reconstruction

Prime Orchestra

Rebuild the prime staircase from the nontrivial zeros of the Riemann zeta function, one wave at a time. Feed the zeros in and watch the primes resolve out of pure harmonics.

One HTML fileNo network requests/projects/prime-orchestra
Primality Zoo: a grid of residue rows for one prime pattern, cells lit where the pattern occupies a class, above a chart of the counted occurrences against the predicted curve

the field instruments

Primality Zoo

Three scopes over a live two-million sieve. Test whether a prime constellation can exist at all, watch the residue-class race, and read the matrix where consecutive primes avoid repeating themselves.

One HTML fileNo network requests/projects/prime-zoo
Storm Plates: one swell drawn under a row of numbered planks, the planks it breaks marked, with a second plate of stacked swells below

the weather

Storm Plates

The sieve as wave interference, in six plates. One swell per prime under a plank bridge: crests break planks, survivors are prime, and the last plate shows the same storm written twice, once in primes and once in zeros.

One HTML fileNo network requests/projects/storm-plates
Critical Collapse: an amber ring of field energy seen from above, beside plots of the field and the horizon signal over radius, with the amplitude slider below

numerical relativity

Critical Collapse

Einstein's equations, integrating live on your device. Tune a scalar pulse to the knife edge between dispersal and collapse, bisect for the threshold, and measure the universal exponent γ ≈ 0.374 yourself.

In the browserNo external requests/projects/critical-collapse

Things that might not ship

Hardware hacks, signal toys, AI agents off the leash. The room where the next product gets sketched, and most of the sketches stay sketches.

The faceplate of the Rain Bird ESP-6Si controller the sidecar is designed for, with its analog scheduling dial

hardware designv0.1

Turfy

An AI sprinkler brain that fails back to dumb. A weather-informed sidecar for a 1990s Rain Bird that only takes the lawn when it's provably healthy: hardware watchdog, transfer relays, fail-safe by design.

Raspberry Pi555 watchdogMCP23017Relays/projects/turfy

Sketches 3

  • Sovereign (GitHub, opens in a new tab)2025An assembly-like agentic programming language designed for self-improving systems: 32 base instructions on a small virtual machine, with opcodes that ask a local model to write code and to rewrite it after an error.
  • ADDAI (GitHub, opens in a new tab)2025A homegrown EEG monitor. Brainwave readings arrive from a NeuroSky-based headset over a serial port and are drawn live in a web page.
  • ZephyrprivateA mesh network of AI nodes that talk to each other in raw 802.11 frames, without a traditional networking stack. The repository is private, so there is nothing here to open.

The rest

This is the short list. The bench lists every page this server serves and says which instruments are up. The work page counts every repository across four GitHub organisations from the commit log.

Anti-cloud. Host local, think global.

Terminal
/terminal