Content
Writing, talks, podcasts, and videos about fullstack engineering, reactive UI, local-first software, and AI systems.
Featured Blog PostBuilding AI-Powered Apps: Part 2Building AI-Powered Apps: Part 2A practical look at agents, deterministic workflows, and hybrid agentic workflow patterns for AI-powered applications.Building AI-Powered Apps: Part 1An introduction to the core primitives behind AI applications: prompts, tools, and context.Why Is Every AI App Single Player?Why AI apps often miss collaborative, multiplayer product experiences, and what sync engines unlock.Most AI Chat Apps Are Broken. Sync Engines are the Fix.A sync-engine framing for building AI chat apps that feel resilient, responsive, and production-ready.Offline-First Apps with TanStack DB and PowerSyncA walkthrough of building offline-first applications with TanStack DB and PowerSync.Unleashing the Power of SyncA high-level framing of sync engines and the product experiences they make possible.Async Transformations in ReactivityA deep dive into asynchronous transformations in reactive programming systems.Scheduling Transformations in ReactivityHow scheduling affects transformation behavior in reactive programming systems.Transformations in ReactivityA technical exploration of transformations in reactive programming.Dynamic Typing is ObsoleteA position piece on the evolution of typing and developer tooling.Thoughts on Server Components + WebsocketsNotes on the relationship between server components, realtime updates, and websocket-driven applications.Clerk Webhooks: Data Sync with ConvexA guide to syncing Clerk user data into Convex with webhook-driven data flows.Clerk Webhooks: Getting StartedA getting-started guide for using Clerk webhooks in application data workflows.How We Roll - Chapter 10: RoundupA roundup entry in Clerk's How We Roll authentication series.How We Roll - Chapter 9: InfrastructureA look at infrastructure concerns behind authentication systems.Year in Review: SeniorGraduating, landing a DevRel role, and speaking at conferences — alongside the unexpected cracks that can form when you level up fast.How We Roll - Chapter 8: SessionsAn explanation of session handling in Clerk's authentication series.How We Roll - Chapter 7: JWT Single Sign-OnA Clerk authentication-series article on JWT-based single sign-on.How We Roll - Chapter 4: Email VerificationA Clerk authentication-series article on email verification flows.Serverless DeploymentA practical breakdown of Functions-as-a-Service: on-demand execution, cold vs. hot starts, elasticity trade-offs, and when serverless is (and isn't) the right call.Year in Review: JuniorA year of stepping up as a tech lead, confronting self-doubt, and learning what real responsibility actually feels like.Isomorphic CodeHow full-stack JavaScript enables the same code to run on client and server — from virtual DOM to SSR frameworks like Next.js, Nuxt, and SolidStart.Year in Review: Pre-JuniorA transitional year leading hackathon infrastructure and deepening fullstack skills while building toward production civic tech.Year in Review: SophomoreShipping the first version of the Ohio Sentencing Data Platform during a pandemic — taking ownership, learning to build for real users.The correct approach to learning software development - Part 2A Medium essay on learning software development effectively.The correct approach to learning software development - Part 1A Medium essay on learning software development effectively.Year in Review: FreshmanFirst year at UC: discovering the developer community, joining hackathons, and figuring out what kind of engineer to become.Hitch'd!An early Medium post about the Hitch'd app project.My First App - release v0.1An early Medium update about releasing a first app.My First AppAn early Medium post about building a first app.