Classic Scoundrel
A complete single-player card game for the browser — game logic, rendering, and interaction built with TypeScript and Canvas 2D. No engine, no frameworks; just the platform.
SF Bay Area · Software Engineer
Ten years building for the web — design systems, product engineering, and applied AI. I care about interfaces that are fast, accessible, and genuinely pleasant to use.
I'm a product-minded software engineer currently doing integration engineering at Emcor. Before that I spent four years at Intuit as a Software Engineer 2 on Payments — working across a microservice architecture, design system, and plugin ecosystem — and two and a half years at Tailored Brands leading front-end development, where I helped design and develop the code powering 100+ A/B tests that drove over $50 million in projected incremental revenue in a single year.
My background is a little unusual: dual degrees in Computer Science and Cognitive Science from UC Santa Cruz, with upper-division coursework in machine learning, AI, and human–computer interaction. I've been working with generative models since the Deep Dream era — back when "neural style transfer" meant a Torch script and a lot of patience.
I also care deeply about the details most people never notice: I maintain reference
sites for the prefers-reduced-motion and prefers-color-scheme
CSS media queries, because accessibility is a feature, not a checkbox. This very page
practices what I preach — semantic HTML, no frameworks, full keyboard support, and it
respects both your motion and color-scheme preferences.
Things I've built and maintain, in my own time.
A complete single-player card game for the browser — game logic, rendering, and interaction built with TypeScript and Canvas 2D. No engine, no frameworks; just the platform.
A reference site for the prefers-reduced-motion CSS media feature — what it is, how to honor it, and how to test it. Written for working developers who want to get accessibility details right.
Companion reference for the prefers-color-scheme media feature — the right way to build dark-mode-aware interfaces that respect user preference.
A 2D roguelike survival game running on a bespoke game engine, including enemy AI. An exercise in building everything from the ground up — and in making bad decisions fun.
Interactive demos from my twice-weekly LinkedIn series — web accessibility features on Mondays, underused browser features on Fridays.
Poke a live DOM sandbox and watch mutation records stream in as they happen. Toggle the observer config (childList, attributes, characterData, subtree) and see exactly what each option captures — plus a polling-vs-observer comparison for detecting third-party widgets.
Watch elements light up as they cross your visibility threshold, tune threshold and rootMargin live, then see the killer use case: enrolling visitors in an A/B test only when the experiment zone actually enters their viewport — so your measurements count viewers, not page loads.
I'm currently exploring what's next. If you're building something interesting — especially at the intersection of the web and AI — I'd love to hear about it.