Recent Posts
- Agent Skills, Stripped of Hype
- Designing a Build System That Runs Untrusted Code
- Designing an AI Gateway and Durable Workflow System
- MCP Apps and the Missing Middle of AI Tooling
- My Ridiculous AI-Assisted Development Workflow
- build-temporal-workflow: Faster Temporal Workflow Bundling with esbuild
- Prompt Engineering Across the OpenAI, Anthropic, and Gemini APIs
- Introducing Prose Writer
- Cursor Rules for Writing Temporal Workflows with TypeScript
- Cursor Rules for TypeScript Engineers
- Using Anthropic's Message Batches API with Temporal
- What If It Goes Wrong?: The Hidden Dangers of Counterfactual Reasoning in AI
- Getting the Most Out of GPT-4.1
- Neural Networks
- A Gentle Introduction to Using a Vector Database

Hi, I’m Steve.
I’m a software engineer and educator based in Denver. Previously, I led Front-End Engineering and Developer Tools at Temporal, where I tackled the fascinating challenge of building interfaces for distributed systems—which is just a fancy way of saying “making complex things simple enough that people actually want to use them.”
My work at Temporal centered on building intuitive UIs that helped developers manage workflows across distributed systems. I joined as the founding front-end engineer and built the foundation for their open source and cloud experiences before scaling up the team that handles all of Temporal’s UI, websites, and developer tooling.
Before that, I served as the very first Front-End Architect™ at Twilio and SendGrid. These roles taught me how to build consensus across global teams and lead through influence rather than authority—a skill that turns out to be surprisingly useful when you’re trying to convince people that your approach to front-end architecture is the right one.
I actually started my career in public education. I was NYC public school teacher in high-need schools across Manhattan, Brooklyn, and Queens. I technically had my principal’s license, but I never ended up using it. Today, I’m an instructor at Frontend Masters and founded the Front-End Engineering program at Turing School.
I’ve co-founded DinosaurJS, a JavaScript conference in Denver, spoken at events like JSConf and RailsConf, and authored ”Electron in Action“—though technology moves faster than books, so consider that a historical artifact at this point.
Full Course Walkthroughs
Enterprise UI
Scale frontend applications beyond a single-team SPA with composition patterns, module federation, operational infrastructure, and migration strategies.
React Performance
Profile, measure, and optimize React applications—from understanding reconciliation and re-renders to memoization, code splitting, and React 19's concurrent features.
React with TypeScript
Build type-safe React applications with TypeScript and React 19—covering hooks, reducers, context, component APIs, and generics.
AI Fundamentals with Python
Get hands-on with AI development using Python and Hugging Face—from tokenization and attention to fine-tuning models and generating images with Stable Diffusion.
Developing with AI Tools
Set up a practical AI-assisted development workflow with Cursor and Claude Code—covering context management, custom commands, hooks, MCP servers, and model selection.
Tailwind
Learn Tailwind CSS from utility-first fundamentals through design tokens, responsive layouts, dark mode, and the new features in Tailwind 4.
Full Stack TypeScript
Wire up end-to-end type safety across the frontend and backend with TypeScript, Express, Zod, tRPC, and branded types.
Visual Studio Code
Get more out of VS Code with advanced workflows, debugging tools, customizations, extensions, and keyboard shortcuts that speed up daily development.
Introduction to Testing
Build confidence in your codebase with practical testing techniques—covering assertions, mocking, integration tests, and testing strategy.
Web Security
Understand modern web security fundamentals—from authentication and authorization to XSS, CSRF, and practical mitigation techniques.
Figma for Developers
Learn Figma's developer-friendly features—constraints, auto layout, component properties, variables, and CSS generation—to bridge the gap between design and code.
Building Design Systems in Storybook
Build a scalable design system with Storybook—creating reusable components, writing interaction tests, implementing dark mode, and generating documentation.
Recordings
I am lucky enough to teach a bunch of courses with my friends at Frontend Masters. We've been working together since 2016. Before I was a teacher, I was a customer back when I was learning the ropes. I can't recommend them highly enough. You can find the most up-to-date list here.
React and TypeScript, v3
Type hooks, reducers, and component APIs to build safer, more maintainable React applications with TypeScript.
React Performance, v2
Profile and optimize React applications with modern tools and patterns to reduce re-renders, speed up interactions, and improve perceived performance.
Cursor & Claude Code: Professional AI Setup
Build a practical AI-assisted developer workflow with Cursor and Claude Code—from quick inline edits to larger delegated implementation tasks.
Open Source AI with Python & Hugging Face
Get hands-on with AI development using Python and Hugging Face—covering image generation, fine-tuning, and model pipelines.
Tailwind CSS 4+
Work with Tailwind CSS 4 from utility-first fundamentals through design tokens, responsive layouts, and maintainable patterns for modern UI development.
Fullstack TypeScript, v2 (feat. Zod)
Wire up end-to-end type safety across frontend and backend with TypeScript, Express, Zod, and shared type-safe contracts.
Become a VS Code Power User
Get more out of VS Code with advanced workflows, debugging tools, customizations, and keyboard shortcuts that speed up daily development.
Testing Fundamentals
Build confidence in your codebase with practical testing techniques—covering assertions, mocks, integration tests, and testing strategy.
Web Security, v2
Understand modern web security fundamentals—from authentication and authorization to common vulnerabilities and practical mitigation techniques.
Design Systems with Storybook, v2
Build a scalable design system with Storybook—creating reusable UI components, writing interaction tests, implementing dark mode, and generating documentation.
Figma for Developers, v2
Use Figma's developer-friendly features—constraints, auto layout, component properties, and CSS generation—to bridge the gap between design and code.
Vite
Set up and configure Vite for modern web development—covering React integration, asset optimization, and extending the build with plugins.
Get Kids into Coding with Scratch
Introduce young learners to programming with Scratch—building games, crafting interactive stories, and exploring computer science fundamentals.
Hardware with Arduino & JavaScript
Connect the physical and digital worlds with Arduino and JavaScript—wiring up LEDs, buttons, and sensors to drive browser interactions with real-world data.
Electron, v3
Build native, cross-platform desktop applications with web technologies using Electron—covering inter-process communication, native OS features, and performance optimization.
Enterprise UI Development: Testing & Code Quality
Set up the testing and code quality infrastructure for large frontend teams—covering unit testing, CI, accessibility testing, mocking, and coding standards enforcement.
Advanced Redux with Redux Toolkit
Scale Redux with Redux Toolkit—simplifying reducer logic, adding TypeScript support, writing tests, and using RTK Query for data fetching.
Testing Web Apps with Cypress
Write end-to-end tests for client-side applications with Cypress—covering the selector engine, test runners, assertions, and custom commands.
AWS For Front-End Engineers, v2
Deploy frontend applications on AWS using S3, Route 53, CloudFront, and Lambda@Edge for a production-grade infrastructure.
Rx.js Fundamentals
Build an observable from scratch and learn to manipulate data arriving over time with RxJS operators.
Redux Fundamentals (feat. React)
Learn the Redux API from the ground up, connect it to a React application, and extend it with middleware and tools from the ecosystem.
Building Your Own Programming Language
Build a programming language from scratch—lexing, parsing, tokenization, traversing abstract syntax trees, and transpiling to JavaScript.
State Management with Redux & MobX
Structure and manage application state with Redux and MobX—comparing approaches and tradeoffs for real-world frontend applications.
JavaScript Performance
Write faster JavaScript—optimizing rendering performance, loading assets with a CDN, and splitting resources with Webpack.