Selected work

Things I’ve built.

Two sides of the same engineer. First the enterprise work: the complex features on regulated, large-scale platforms for global pharma and enterprise SaaS. Then the side projects, where I own every layer of a modern stack end to end. Different contexts; the same instinct for the hard part.

Enterprise SaaS · 2025–present

Schema-first codegen on AEM

One YAML per component generates the TypeScript types, Lit scaffolds, AEM dialogs and HTL: around 25 production AEM components (40+ with the Lit atoms). Lit 3, Vite 7, progressive hydration, zero-touch deploys. I authored the architecture and ~99% of the repo.

Global pharma · 2021–2025

Search, CSP & accessibility at scale

Three regulated healthcare platforms on AEM + Vue. Faceted Solr search across three contexts, a strict-CSP Vue runtime refactor, DynamoDB/Cognito bookmarking, the oneDataLayer analytics framework, and EU Accessibility Act remediation.

Slipstream · 2026 · side project

Hand-built local-first sync engine

A Linear-style tracker on a sync engine written from scratch: optimistic mutations, server-authoritative mutation log, offline retry, Yjs CRDT text. Live demo + open source.

IronPulse · 2025–present · side project

Self-hosted fitness platform

Next.js 15, React 19 web + React Native 0.81 mobile, tRPC, PostgreSQL/PostGIS, offline-first PowerSync, passkeys, Stripe. Monorepo with autonomous deploy.

RadioShake · 2025–present · side project

Android + Wear OS internet radio

Kotlin, Jetpack Compose, ExoPlayer/Media3, Android Auto, standalone Wear OS app, Chromecast. 45,000+ stations from radio-browser.info. Shipped to Google Play.

Strata · 2026 · side project

A design system built to be rethemed

20 Lit web components on a two-tier token architecture with a documented ::part() surface. The proof: an entire alternative identity shipped as one CSS file. 151 axe-checked tests, live Storybook, open source.

Curb · 2026 · side project · in development

AI accessibility auditor with a self-check loop

Deterministic WCAG detection with axe-core, LLM-proposed code fixes re-verified by re-running axe on the patched DOM — the model never grades its own work. Live prototype + open source.

Want to talk about a project? Get in touch.