the work

What I’ve actually built.

Circuit boards, firmware, audio signal processing, and measurements of real places. The studio it ships under is Squatch Stack; the bench, the soldering iron and the mistakes are mine. Every number on this page was measured on a named thing, and where I could not measure it I say so instead of rounding it up.

Twelve boards, routed.

Guitar pedals, a headphone amplifier, a Bluetooth control board, a cable tester, an assistive switch interface. Generated from code, placed by annealing, routed, rule-checked and rendered from the real geometry.

Twelve ray-traced circuit boards tiled in a grid, each rendered from its CAD file

I do not draw schematics by hand any more. The netlist comes out of a Python generator, the parts get placed by simulated annealing, the router runs, the design-rule check runs, and the fabrication package falls out the end — one command, every time. It sounds like over-engineering for a stompbox until the third time somebody changes a component value and you regenerate the whole board in a minute instead of a weekend.

Twelve of them are routed and clean. Each is photographed the same way: five ray-traced views at 2048 × 1536, straight out of the CAD, with the real copper, the real soldermask and the real silkscreen. Sixty renders altogether. Nothing on this page is a mock-up of a board that does not exist.

  • 12 boards routed, 0 unconnected nets at design-rule check
  • 60 renders ray-traced, 5 views per board at 2048 × 1536
  • 20 units of MVP-1 Rev B at the fab
  • KiCad 10
  • Generated netlists
  • Annealed placement
  • Autorouting & DRC gates
  • ngspice / Xyce verification
  • Panelisation
  • Turnkey assembly sourcing

The kit boards.

Three pedals meant to be built by hand by somebody who has never populated a board before — through-hole where it helps, a silkscreen that tells you what goes where, and a bill of materials one distributor can fill.

The SQUATCH TRAIL OD overdrive board, isometric, with three potentiometers and film capacitors

Overdrive kit

SQUATCH TRAIL OD

Soft clipping inside the feedback loop, a tone stage that stays out of the way, and enough room on the board for fingers and an iron.

The SQUATCH CLAW distortion board, isometric, populated with through-hole parts

Distortion kit

SQUATCH CLAW

Hard clipping with a filter that opens as you back off. Its circuit model is the one I hold against SPICE, bias-rail sag included.

The SQUATCH GOLDFOOT overdrive board, isometric

Overdrive kit

SQUATCH GOLDFOOT

A transparent overdrive on a clean blend, so the dry signal stays underneath. Hardest of the three to lay out, and the charge pump is why.

$2.44 of parts against a £269 box.

An assistive switch interface: four adaptive switches into any phone, tablet or computer over USB-C, as a plain keyboard, with nothing to pair and nothing to charge.

The switchbridge board: four 3.5 mm jacks along one edge, a USB-C receptacle on the other

If you cannot use a touchscreen, the operating system on the device in front of you will already let you drive the whole thing from a few buttons — a big round switch, a sip-and-puff tube, a head or knee switch. Apple ships it as Switch Control, Android as Switch Access. Both are free, both are built in, and both will happily take a keyboard as the switch source. The software half of switch access is a solved problem. The hardware half costs £269.

So I designed the hardware half. Four 3.5 mm jacks, one switch each, an LED beside every input so a teacher or a therapist can see at a glance that a switch is firing, and a USB-C cable. It enumerates as a boot-protocol keyboard and nothing else — no composite device, no vendor interface, no radio, no battery, no pairing, no certification standing between the design and anyone who wants to build one. A mode button cycles three keystroke maps: the Switch Control defaults, numbered keys for communication apps, and arrow keys for grid scanning.

The box it is measured against has half the inputs and costs £269, and the cheaper wired option it replaced was discontinued. Electrically this is a handful of contact closures reported as keystrokes. There is no part of that worth £269, and the people paying it are disabled people, schools and families.

  • $2.44 of parts per board — 15 BOM lines, 37 placements
  • $4.02 per board fully built, at 30 units
  • 4 inputs against 2 on the £269 incumbent
  • 62 × 40 mm on 4 layers, 0 unconnected nets at DRC
  • 3,880 bytes of flash; 2,561 lines of C, no warnings
  • 20 ms debounce — key down on closure, up on release
  • STM32 firmware in C
  • USB HID
  • 4-layer mixed-signal layout
  • Design for cost
  • Accessibility
  • Open hardware

Validated on the bench · not yet fabricated

Before ordering a single board I proved the switch behaviour against a real phone over USB-C, on a development board running the same logic: six press-and-release cycles across three windows, the longest hold tracked the whole way through, Switch Control highlighting and selecting as it should. That validates the concept, not the board. No PCB has been fabricated yet, and whether four inputs genuinely beat two in practice is still an open question — if scanning time is the real bottleneck, the only advantage left is the price.

This is not a medical device. It is an input peripheral that produces keystrokes; it carries no therapeutic claim and touches no patient circuit.

Sound, held to the reference.

Guitar effects are full of claims nobody checks. I render the model, simulate the circuit, subtract the two, and publish whichever number comes out.

Three cycles of the overdrive front end, the ngspice circuit simulation as a solid line and the Faust/JSFX model as a dashed one, phase-aligned and nearly on top of each other

The analog front end of my stomp platform — the loaded input network, the non-inverting drive feedback, the anti-alias pole — is turned from component values into biquads by bilinear transform, built as a plugin, rendered offline, and compared against a fresh circuit simulation. Across the measured band the worst disagreement is 0.031 dB, at 20 kHz.

That is a small-signal figure for the linear path, and I will not let it stand in for more than it is: it says nothing about how the circuit distorts. The nonlinear models are a separate problem with much larger error bars, and the ones that do not yet reproduce their reference are recorded as not reproducing it.

Underneath sits a dependency-free C++17 block library — gate, EQ, limiter, cabinet convolution, tuner — that builds for a laptop, a Raspberry Pi and a microcontroller from one source. It is cheap enough to be boring, which is the whole idea.

  • 0.031 dB worst-case front-end error against fresh SPICE, small-signal AC
  • 0.34% of one core for the whole gate–EQ–limiter chain at 48 kHz
  • 0.39% for a 200 ms cabinet impulse; 0.65% for the tuner
  • 0.005 cents median tuner error over 275 real recorded notes
  • 0.037 cents with the fundamental 20 dB down, and no gross errors
  • C++17, no dependencies
  • Real-time audio
  • ngspice & Xyce
  • Faust → VST3 / JSFX
  • WebAssembly
  • NEON & SIMD
  • Embedded DSP

A bug in somebody else’s reference.

While measuring neural amp-model performance I found a heap overflow in the open-source runtime most of that world depends on: hand it a block larger than the one it was told to reserve for, and it writes past the end of its buffers. A sanitiser counted 38,678 invalid reads and writes in a single call. It does not crash reliably, which is worse than crashing.

The fix splits an oversized call into consecutive chunks that fit, allocates nothing, and comes to 178 lines. I proved it byte-for-byte identical to the existing behaviour across 36 rendered comparisons before sending it, because the tempting fix — growing the buffers instead — changed the output of one model by up to 0.57. It is filed upstream and open, along with a note on the second code path that has the same bug.

  • AddressSanitizer
  • Upstream contribution
  • Cross-compiler CI
  • Bit-exactness testing

The open pieces: squatch-dsp and squatch-tuner, which has a browser demo running the same C++ through WebAssembly.

Places, measured.

A pipeline from a phone in your hand to a place you can orbit in a browser tab. Thirteen scenes so far; three of them are on the front page of this site.

A gaussian-splat scan of the Brookline Station springhouse interior

Gaussian splatting is the part of 3D I care about, because every point in the file is a measurement instead of a guess from a prompt. Thirteen scenes are catalogued — a field gun, a split-rail fence, a springhouse, a cairn, a saguaro, and an oak that came in at 1.33 million Gaussians. The three on the front page of this site are served from my own files: no third-party embed, no CDN, a small preview cut for first paint and a full master when the browser goes idle.

Three pieces make it work, and each is useful on its own. posekit lifts camera poses out of Apple’s photogrammetry and writes them in the formats splat trainers actually read. gallery is the viewer and the catalogue. hdc-holo is the research end — holographic computing on hypervectors, where the scene, the structures that describe it and the operations over it all sit superposed in one complex vector. That is the same idea as the essays on this site: similarity is distance.

  • 13 scenes catalogued; largest 1,330,707 splats
  • 665,279 measured points in the Tucson saguaro on the front page
  • Self-hosted — three.js 0.180 and Spark 2.1, mirrored locally
  • 3D Gaussian splatting
  • Photogrammetry & pose conversion
  • three.js + Spark
  • GPU training
  • Hyperdimensional computing
  • Swift

The three scans on this site · the wider gallery · posekit · hdc-holo

And the work that isn’t mine to show.

Most of what pays for the bench belongs to somebody else. Here is what I can say about it.

Coming soon

A pregnancy and birth companion app for iOS and Android, taken over mid-build as a rescue-and-launch job: building, signed, and on both stores’ tester tracks, with the listings drafted and submission waiting on the client. Flutter and Firebase. It gets a name and a picture here when she is ready for one, and not before.

For everything else — references, case studies, the parts that need an agreement in place first — the studio is Squatch Stack.