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.
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–2025Search, 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 projectHand-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 projectSelf-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 projectAndroid + 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 projectA 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 developmentAI 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.