Recent Posts
- Claude Ultraplan: Planning in the Cloud, Executing Wherever
- Playwright vs. Chrome DevTools MCP: Driving vs. Debugging
- Entering the Mind of Ralph Wiggum
- Memory Systems for AI Agents: What the Research Says and What You Can Actually Build
- Temporal's Developer Skill Is a Promising First Draft
- The Anatomy of an Agent Loop
- 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

Hi, I’m Steve.
I’m a software engineer, educator, and engineering leader based in Denver. Most recently, I spent a year as an Entrepreneur in Residence at Redpoint, where I focused on building agentic workflows and tools. That work included a durable agent execution workflow platform, an IndexedDB-based vector database that runs in the browser, a robust agent tool management platform, and an agent runtime embedded in a Chrome extension.
Before that, I led the Developer Tools team at Temporal. I was one of the early employees, built the open source Temporal UI and Temporal Cloud UI from the ground up, and then built the team responsible for them. For a stretch, that team also owned the CLI and the Visual Studio Code extension, which meant thinking about the entire developer workflow, not just the interface layer.
Earlier in my career, I was the very first Front-End Architect™ at Twilio and SendGrid. Those roles taught me how to build consensus across large organizations, drive architecture through influence, and help teams make good technical decisions at scale.
I still care deeply about front-end architecture, but my work has never really been just frontend. The common thread through all of it is making complicated systems usable: distributed systems, developer platforms, and now AI systems. I tend to live at the intersection of product thinking, technical architecture, and developer experience.
That also shows up in my writing. Lately, I’ve been researching and publishing on agent loops, memory systems for AI agents, AI gateways and durable workflow systems, prompt engineering across the OpenAI, Anthropic, and Gemini APIs in this post, MCP Apps and AI tooling, and what it takes to run untrusted code safely.
Today, I’m an instructor at Frontend Masters, where I teach courses including Open Source AI with Python & Hugging Face and Cursor & Claude Code: Professional AI Setup. I also founded the Front-End Engineering program at Turing School.
I actually started my career in public education. I was an 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.
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
Self-Testing AI Agents
Build the feedback loops that let coding agents catch their own mistakes—Playwright, visual regression, runtime probes, custom MCPs, review bots, a static layer, and CI—so you stop being the verification step.
Deploying Web Applications on AWS
Deploy, scale, and secure frontend applications on AWS—from S3 and CloudFront to Lambda, API Gateway, and DynamoDB—without ever needing to become a full-time cloud engineer.
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.
Enterprise UI Development: Microfrontends, Testing, & Code Quality
Architect large frontend systems—balancing autonomy and complexity across monoliths, microfrontends, and monorepos with Turborepo, CI/CD, and testing best practices.
5h 11m
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.