Things I have built
Models, tools, and software with the gates that make their numbers trustworthy. The publishable parts, at least.
The golden models a radio is signed off against
ModelingBit-accurate models of the downlink, uplink, and PRACH chains of multiband O-RAN radio units. Five vendor fixed-point IP C-models wrapped through MEX, so the model runs the same arithmetic the FPGA does, then exports every pipeline stage for verification engineers to diff against RTL and fronthaul captures. Seventeen bands, carriers from 3 to 100 MHz, and versioned executables so nobody needs a MATLAB license to run them.
A PRACH chain that checks itself 846 times
VerificationPRACH is where a radio first hears a phone, so it is worth being paranoid about. The model covers LTE formats 0 to 3 and full NR FR1, long and short preambles, all 256 configuration indices in both FDD and TDD, proven by an exhaustive 512-case sweep. A harness re-decodes every exported byte back off disk through independently written decoders, including a blind Zadoff-Chu root search. 846 checks across 31 configurations; 29 clean, and 2 that still fail on a documented window-placement defect I have not fixed yet. Mutation testing caught all 10 faults I deliberately planted.
Uplink combining for shared cells
ResearchWhen several ceiling-mounted radios hear the same phone, someone has to combine them well. A fixed-point model of the firmware datapath, up to four radios by eight antennas, matching the floating-point reference within 0.01 dB SINR across a twelve-configuration matrix. On the real vendor FFT front end, maximum-ratio combining holds 34 dB SINR in the demo where equal gain collapses below 8. The useful discovery was algebraic: combining inside each radio first and then across them loses exactly 0.000 dB, so each radio forwards one stream instead of eight. That is the whole bandwidth argument for the architecture.
A waveform analyzer for the lab bench
ToolingA desktop app that decodes O-RAN fronthaul captures into uplink resource grids and measures PUSCH EVM for NR and LTE against the same configuration files the reference instrument uses. It also finds and demodulates format-0 PRACH preambles straight out of a capture, validating the recovered root and cyclic shift against the test setup. Bench-verified around 1.8% EVM at 20 MHz and 7.1% at 100 MHz, and it ships as one standalone executable.
Carrier power, read straight off the wire
ToolingA Python tool that reports dBFS carrier power from O-RAN fronthaul captures per the working group's measurement definitions, working out direction, numerology, MaxPRB, compression mode, and eAxC carrier grouping from the capture alone. Batch a folder of captures and it writes the lot to Excel. Packaged as a command-line and a GUI executable for people who should not have to install Python to read a power number.
Eighteen channels for a spectrum sensor
ModelingA polyphase filter bank that slices 691.2 megasamples per second into eighteen channels a classifier on NVIDIA Orin can reason about. Two implementations were written independently and agree to the bit, which is my preferred kind of agreement.
A map of where intermodulation will land
ToolingPassive intermodulation is easier to plan around than to debug. This enumerates third, fifth, and seventh order products across a 46-band catalog and flags any that land in an uplink band, using corner-evaluation interval arithmetic so the hit ranges are exact rather than sampled. It models the mixing topologies of single, dual, and tri-band radios and ranks products in dBc. The power numbers are relative, not calibrated dBm, and the tool says so.
Forge: letting agents near a radio, carefully
Current R&DStarted in August 2026, and I would rather describe what exists than what I hope for. A compiler that pulls machine-checkable limits out of real 3GPP specification PDFs, each carrying its clause, a source hash, and a review status, behind a boundary that treats those PDFs as untrusted input. A typed instrument-control server so an agent can only reach hardware through schema-checked tools. Judge and implementer kept apart by separate permission profiles, a tamper alarm on the settings, and a ledger that refuses to accept a completion claim until a human countersigns it. Roughly 714 tests and a fail-fast CI. Phases zero through two of seven. The governance is real; the rest is ambition.
TaxLens: every deduction has to show its evidence
SoftwareRaw bank and card statements in, a locked ledger and an audit defense packet out, where every deductible dollar carries a tax-code citation, an evidence tier, and a confidence score. The compliance rules live in code rather than in prompts: the same substantiation guard is called at four separate layers of every write path, unknown citations get downgraded to a verify flag instead of asserted, classifications are append-only, and locking hashes the ledger. On a real client year the audit stage found about ten thousand dollars of double-counted bounced payments that manual review had missed, and cited the exact transactions. It deliberately cannot file anything.
Salient: an AI patient that cannot invent a lab value
SoftwareA clinical-case simulator for medical exam practice. The interesting constraint is what the model is not allowed to do: it plays the patient and nothing else. Every examination finding and lab value is pre-authored and schema-validated, so investigations are deterministic lookups, and a leak guard redacts any reply that would give away the diagnosis. Six model roles tiered by how hard the job is. Cost governance in three layers over a per-call ledger denominated in micro-cents, because an AI product without a budget is a bill waiting to happen. Around 700 unit tests and 24 browser journeys in CI.
RouteFlow: a delivery business, running
SoftwareCatalog, orders, invoicing, driver routes with proof of delivery, inventory, a buyer portal, and regulated-tobacco compliance filings, across an API, a dashboard, and a mobile app with five role-based experiences. In production with real client tenants. Tenant isolation sits at the database layer, where an extension injects the tenant into every query and write rather than trusting each developer to remember. 105 data models, roughly 40 feature domains, 2,268 tests at the last gate, and a code-enforced allowlist that stops a test from ever writing to a live tenant.
AGOS, agents with a budget
SoftwareA policy-gated agent framework built on the Claude Agent SDK that runs revenue operations for Pixel Parchment, the wedding photography studio my wife and I own. The agents work inside explicit policies because the money at stake is ours. Of everything on this page, it is the system I watch most closely, for the obvious reason.