13thrule // field notes
11 REPOS, ONE HABIT OF MINE

I build things that sense,
and react before they think.

A WiFi scanner I wrote that fingerprints devices passively. A LED ring that talks to a webcam in light. An agent runtime with a reflex arc that doesn't wait for the LLM to notice something's wrong. Different domains, same instinct: put a fast, dumb, reliable reaction path underneath the slow, smart one.

● LIVE signal trace: not a metaphor, an actual waveform reflex_arc.signal
my most-starred repoNexus-Wifi-Radar · 10★
newest protocol33-bit OCC over light
languages in rotationPython · Rust · C++ · JS
last real commit, livechecking GitHub…

The arc

Eight months, and a genuinely different relationship with my own code. Not a straight line of improvement. A shift from directing a black box to measuring things myself.

calculating…
Dec 2025
"Zero lines written by hand"
My first project. A WiFi radar, entirely AI-generated, that I honestly didn't understand line-by-line yet. It's still my most-starred repo. I think the story resonated more than the code did.
Jan–Feb 2026
Rebuilding it properly
A real device/threat model, an OUI vendor lookup, a passive-only security posture, my second pass at the same idea, with an actual architecture underneath the ASCII-art branding I clearly can't help myself with.
Jul 2026
A reflex arc, on purpose
An agent runtime where I named my own precedent (Brooks' subsumption architecture, industrial e-stops) instead of pretending I'd invented something new. The fast/slow-path idea I kept circling finally got a name.
Aug 2026
Measuring every pixel
An LED-to-webcam data link, debugged almost entirely by direct measurement: sampling actual RGB values off actual pixels myself, instead of guessing and re-tuning blind.


In the workshop

Everything above is pushed to GitHub. This is what's still sitting on the bench, unpublished. Some finished, one still rough around the edges, one I can't detail yet. Real either way.

test_bench
working
live simulation: landing spread, ×15 exaggerated
sends: 0retries: 0
Servos pull a hard current spike the instant they move, and I've found that spike is enough to glitch the same line reporting the move back to me. So a command that succeeds still lands slightly different each time I send it, identical or not. That drift you're watching is the actual bug, live.
A browser dashboard talking to an Arduino Mega over Web Serial, driving 16 channels of a PCA9685 servo board. I built a four-counter diagnostics panel (malformed commands, RX overruns, I2C errors, retries) that's the first thing I check now instead of guessing. This exact bug, landing spread on repeated identical commands, is still open. I'm chasing an EMI theory.
ArduinoPCA9685I2Cdiagnostics
beatmaker
rough draft
live: actual 16-step pattern, silently looping
kick · snare · hatno audio, visual only
Sixteen steps, left to right, a lit dot means that drum plays on that slice. The synthesis behind every hit is real, oscillators and envelopes doing the actual work. What I haven't fixed yet: clicking a step to toggle it doesn't reliably stick.
A Web Audio beat generator with real synthesized drums, no samples, four genre presets. I wrote myself an honest technical assessment afterward: the synthesis works, editing and saving a beat don't yet. Proof of concept, not a finished tool.
Web Audio APIReactself-audited
a web DAW, take two
working
live: 5-track trap pattern, silently looping
kick · snare · hat · clap · percno audio, visual only
Same step-grid idea as beatmaker, five tracks deep this time. What doesn't show up visually: each track pulls from a genre-specific kit, so the kick's pitch drop and the hi-hat's decay both change when I swap House for Trap.
A more ambitious Web Audio engine than beatmaker above: four genre-specific synth kits, a real chord-progression system, and proper studio bus routing (sidechain compression, a feedback delay line, a distortion waveshaper), all synthesized live. Has the audio architecture of something that could ship.
Web Audio APIReactaudio synthesis
CleanShare
working
live: watermark opacity + pipeline size, cycling
JPEG · 92%2.4MB
I think of batch cleanup as a pipeline: resize first, recompress into a smaller format, stamp the watermark on last. The number ticking down on the right is that pipeline actually shrinking a file, just looped here instead of waiting on you to upload one.
A Nikon-styled (black and yellow) Flutter app for batch photo cleanup: format conversion across five formats, resize, watermarking with position/opacity control, a private vault tab. Six real screens, structurally complete, hasn't shipped anywhere yet.
FlutterDartimage processing
Synaptic Singularity
working
stand-in: procedural bars, not real audio input
real one reads analyser.getByteFrequencyData()
The real thing splits your mic input into frequency bands and redraws how loud each one is, dozens of times a second. I can't ask this card for microphone access, so what's moving here is procedural. Not your actual voice, just standing in for it.
A mic-reactive WebGL visualizer carrying the loudest name I've given anything yet: full-bleed canvas, animated gradient title text, the works. Reacts to live audio input off your mic in real time, not a canned animation loop.
WebGLWeb Audio APIcanvas
Tufty effects console
working
live: real ecosystem rule, running small-scale
herbivorecarnivoreplant
It's Conway's Game of Life underneath: cells live or die each tick off nothing but a neighbor count. I added three cell types instead of plain on and off, so what plays out reads like a tiny predator-prey ecosystem instead of black-and-white noise.
Correction to my own README: it claims this is a Tetris port. It isn't. I checked the actual code while writing this. What's really there is a menu-driven bench of ambient effects (fire, rain, lava lamp, a starfield) plus this ecosystem sim and a tamagotchi-style pet, on a Pimoroni Tufty 2040 handheld. The README was just wrong.
MicroPythonRP2040embeddedgenerative
two more brains
working
live: random firing, permanence after 3 hits
white = firing nowgreen = earned permanence
I took "neurons that fire together, wire together" and recreated it literally. Fire the same pair of nodes near each other three times and I hard-code a permanent link between them. Nothing about which pairs light up is scripted, just whoever fires enough.
Earlier local attempts at the idea behind the published neuro-synchron. One version polls live GitHub activity and grows permanent glowing connections the more it sees the same pattern repeat. Didn't make the cut for the public repo. Documented properly now instead of just sitting there.
WebGL2Three.jsgenerative
proxima
teaser only
redacted
nothing to see here yet
That static isn't standing in for a missing demo. It's the actual point. There's a real working prototype behind this one, I just can't publish what it does before the patent's actually filed.
A hardware trust protocol involving two embedded devices. Not detailing it publicly yet. Patent application in preparation. More here once that's actually filed.
embeddedin progress
CardOS ADV
working
mockup: planned boot menu, not built yet
green = real todaygrey = roadmap
The three real apps boot straight into the firmware today, no menu, I just pick which build to flash. What I actually want is a loader on top: pick a mode at boot and the same hardware becomes a robot controller, or a security multitool in the Marauder and Bruce space, or whatever else someone points a Cardputer ADV at. That loader doesn't exist yet. This is the plan, not a screenshot of it working.
A firmware OS for the M5Stack Cardputer ADV (ESP32-S3), currently a basic prototype I have the actual hardware for. What's real: a from-scratch SX1262 LoRa driver at the register level, GNSS/GPS navigation, WiFi management, and a modular app-registration system, ~1,500 lines, compiles clean on real hardware. It isn't trying to compete with ESP32Marauder (~11k★) or Bruce (~6.4k★) on their own turf. Those are WiFi/BLE/RF offense suites with years and teams behind them. Mine's a different, less crowded corner of the same hardware: LoRa and GPS as first-class citizens, with the multi-firmware loader as the actual goal.
ESP32-S3LoRaGNSSM5Cardputerprototype
working: does what it says rough draft: functional, self-audited flaws teaser: withheld pending patent

Live console

The actual 12-LED ring from the light-transmission project, reimplemented right here in your browser. Pick an effect. The swatches and the waveform below are reading real brightness values off the LEDs to the left, frame by frame, the same way the real dashboard reads real pixels off a webcam.

OCC DATA BURST
leds (live, amber border = pilot)
brightness trace: derived from the ring above, not a canned loop

Also built

Smaller in scope, still real. Including the one that started all of this.

Nexus WiFi Radar ★ origin story
My original WiFi radar, cross-platform (Windows / Raspberry Pi / a custom "Cyberdeck OS"), written before I could read most of the code it produced. Now 10★, my highest-starred repo, mostly for the story, not the architecture.
PythonnetworkingRaspberry Pi
A handheld continuity tester I built for loom builders like me. Touch a wire, an OLED names the pin, and it alarms if a live connection drops. Modest scope, no oversell, an actual demo video attached.
ArduinoC++OLED
A local agent pipeline I built (plan → patch → review → refine, all via Ollama) that produces one polished prompt for a paid cloud model to execute. I only spend cloud tokens once everything's already figured out.
PythonOllamaLLM orchestration

Creative coding

Single-file, no build step, no dependencies. Visual toys I made for fun, not systems work. My own READMEs for these are the most inflated of the eleven ("pure mathematical organicism at scale", I really wrote that); the demos themselves are the honest part.

A WebGL "brain" I built that polls GitHub's public events firehose every 45s and displaces ~1M particles per commit. A real data feed under a lot of anthropomorphized flavor text I wrote.
An arcade shooter I built that turns your live GitHub profile (your real avatar, your real issues, your real repo names) into a boss fight. Does exactly what it says, nothing more.