Avatar
🎉

Organizations

README.md

Hi, I’m Jeff 👋

I’ve been shipping software professionally since 2006, and spent nine of those years as a Director of Engineering. I design distributed backends, build full-stack and native mobile products, and train and serve ML and LLM systems. My range runs wide, from TypeScript microservices down to Linux kernel drivers and software-defined radio, and I do my best work where “that’s probably impossible” turns into “shipped.”

Most of my professional work is under NDA, so the specifics here stay abstract. The capabilities don’t.

Career

Twenty years, minus the employer names:

YearsRoleThe work
2026⁠–⁠IndependentBuilding the products below, and taking client work
2023⁠–⁠2026Director of Software EngineeringWeb and embedded systems at a defense R&D shop, plus R&D applying machine learning to radio
2017⁠–⁠2023Director of Software EngineeringMobile, web and API platforms for federal customers at a security consultancy: hiring, architecture, several teams at once
2013⁠–⁠2017Lead Mobile Architect, then Engineering ManagerNative Android and iOS video-ad SDKs that other developers built into their apps; later I ran the JavaScript ad-platform team
2012⁠–⁠2013Senior Mobile Software ArchitectOne ad SDK on Android, iOS, BlackBerry and Windows Phone 7 at the same time. It was 2012, and that was the job
2009⁠–⁠Founder, independent consultancyMobile client work, and still how I take on freelance engagements
2006⁠–⁠2012Software engineer, then mobile engineer and consultantEnterprise .NET for reporting and logistics software, then enterprise Android and BlackBerry apps

How I Work

Yes, I use AI coding agents, mostly Claude Code. I’ve built products for them, so pretending otherwise would be odd. I run them the way I ran engineering teams: work starts from a written plan, I review what comes back, and nothing merges until the tests and CI gates pass. In practice that means:

  • Every design decision that isn’t obvious gets a short decision record, and each record names the test or gate that keeps it true. My repos hold about 800 of them.
  • Agents hit the same gates I do. Linters run when an agent says it’s finished, dependencies and vendored agent skills are pinned by hash, and CI checks the changelog.
  • Tests target the promises a product makes. Corpusly’s build fails if its code ever contacts a host it shouldn’t. Knit’s relay ships with a protocol conformance suite, and Knit’s F-Droid builds are reproducible, so anyone can confirm the published app matches the source.
  • Research gets proper statistics: cross-validation, results across multiple random seeds, and significance tests corrected for multiple comparisons.

The agents type faster than I do. Deciding what to build, and noticing when the output is wrong, is still my job.

Selected Work

Two things I can actually point at (most client work I can’t):

  • Knit — A messenger that works phone to phone over the radios already in your phone, with no servers, accounts or signal required. Direct and group chats are end-to-end encrypted with forward secrecy, and direct messages wait for friends who are offline. A LoRa board adds kilometre-scale hops, and optional relays (self-hosted or hosted) carry messages over the internet without being able to read them. Content moderation runs entirely on the device. It’s open source (GPLv3), on Google Play and F-Droid with reproducible builds, and an iPhone version is in progress. getknit.app. Write-ups: the mesh · the encryption.
  • What’s New — Release notes for 1,700+ products in one feed, covering open source, games, operating systems, and desktop and mobile apps. Nearly all of it is read from first-party APIs instead of scraped, and a public MCP server tells coding agents what changed between two versions of a dependency. whatsnew.fyi. Engineering write-up.

The rest is written up under Posts: Wi-Fi sensing research, a self-built Linux kernel, password models from 2023, and more.

What I Build

  • Distributed backends & platforms — TypeScript/NestJS microservices with multi-database persistence, enterprise SSO (SAML/LDAP/JWT/2FA), real-time messaging over WebSockets and MQTT, and background jobs, tested at every layer from unit and integration through security, compliance and load.
  • Full-stack products — React / Next.js front ends on Node back ends, shipped end to end in TypeScript.
  • Native mobile — Android and Wear OS apps in Kotlin and Jetpack Compose, plus Swift on iOS: peer-to-peer and offline-first designs, end-to-end encryption, background services that stay alive, on-device ML, and releases through Google Play and F-Droid.
  • Applied AI / ML & LLMs — Training, fine-tuning and serving models with PyTorch and Hugging Face; LLM inference and generative pipelines (speech recognition and diarization, diffusion); retrieval-augmented generation and MCP servers; and research with statistically rigorous methods and published results.
  • Security & RF/SDR research — Machine learning for security, sensing people through wireless signals, and software-defined radio and firmware experiments.
  • Systems & embedded — Linux kernel patches and device drivers, custom embedded and router firmware, and open-source work in C, C++ and Rust.
  • Cloud & DevOps — Docker, Kubernetes, Helm, Ansible, and GitLab/GitHub CI/CD, with reproducible builds pinned by lockfiles.

Modus Operandi

LanguagesBackend & APIsFrontendData & InfraAI / MLSystems & Security
TypeScriptNode.js / NestJSReactPostgreSQL · MongoPyTorchLinux kernel
PythonExpress / FastifyNext.jsRedis · Elasticsearch🤗 TransformersEmbedded / RF
GoREST · gRPC · WSReact NativeDocker · KubernetesLLM inferenceSAML/LDAP/JWT · 2FA
RustGraphQLTailwind CSSHelm · AnsibleFine-tuningPKI · crypto
C / C++ / C#Message queuesTesting LibraryGitLab / GitHub CIDiffusion · ASRSDR · firmware
Kotlin · SwiftMQTTJetpack ComposeSQLite · SQLCipherOn-device MLAndroid Keystore

Trivia

Pinned

  1. Clair puts Claude Code’s permission prompts, questions and plan reviews on your Wear OS watch and Android phone, so a session doesn’t stall while you’re away from the keyboard. How it hooks into Claude Code, why the relay in the middle only ever sees ciphertext, and how it decides whether a prompt belongs in your terminal or on your wrist.

    claude-code wear-os android go end-to-end-encryption

  2. What’s New collects release notes and patch notes from open source, games, operating systems and the apps on your phone into one feed you can read, search, follow, cite, and hand to your coding agent. How the pages avoid ever waiting on a third party, why almost nothing is scraped, how every entry shows where it came from, and what two months of growth changed.

    nextjs typescript postgres data-pipelines seo

  3. Corpusly indexes a Google Drive for semantic search and serves it to Claude and other MCP clients, with no vendor server in the path your documents take. How the local embedding pipeline and the two-transport MCP server work, and what it took to make ’nothing leaves the machine’ true: a memory blowout fixed by sub-batching, a stdout-corruption problem solved in one place, an OAuth scope decision that doubled as a compliance strategy, and a CI test that holds every outbound connection to an allowlist.

    mcp rag typescript embeddings privacy

  4. Knit is a phone-to-phone messenger that needs no internet, no account, and no server to work: it talks straight to the phones around it over Wi-Fi Aware and Bluetooth LE. After a full rewrite it does that without Google Play Services either. A look at the dual-radio mesh, the wire protocol, and the on-device features that hold it together.

    android kotlin compose mesh-networking mobile

  5. How I built grandma.chat — a Next.js + AI Gateway chat app — with layered abuse defense, dual in-memory/Mongo backends, and a daily spend circuit-breaker.

    nextjs typescript ai vercel mongodb

    Post activity