
Frontend First
A podcast about modern UI development on the web. Hosted by Sam Selikoff and Ryan Toronto.
Latest episodes

Mar 1, 2024 • 1h 23min
Blog Post Club: React Labs – What We’ve Been Working On
Sam and Ryan read and discuss the latest update from React Labs.Topics include:0:00 - Intro5:26 - Opening6:18 - React Compiler27:27 - Actions51:44 - Asset loading1:13:06 - Next Major Version of React1:15:42 - ActivityLinks:React Labs blog postSam’s video on Strict Mode

Feb 21, 2024 • 45min
Instant URL search params in Next.js
Sam and Ryan discuss the intuition behind React Transitions, and why React’s new useOptimistic hook is a good fit for building a URL-driven filter panel that stays fully responsive to client interactions.Topics include:0:00 - Intro1:12 - The problem: In a world of Server Components, URL updates are blocked by a server-side roundtrip10:44 - Attempted solution: Use the browser’s Native History API (history.pushState)15:03 - Realization: The source of truth flips from server to client during the transition – which is exactly what useOptimistic was designed for17:54 - Unwinding our mental model of client-first React apps by thinking about how HTML-only checkout forms work21:44 - The intuition behind React Transitions, and how they put our UI into a state of preparation30:39 - How Transitions improve upon default browser behavior by keeping our current UI 100% responsive, and how useOptimistic solves the checkbox filter panel37:46 - Ryan’s take: It’s a bonus when tools make you feel smart, but it’s more important for them to not make you feel dumb

Feb 14, 2024 • 51min
React Deep Dive: useOptimistic
Ryan and Sam discuss the purpose and usage of the useOptimistic() hook, a new experimental API from React.Topics include:0:00 - Intro2:18 - Problem: RSCs require a server roundtrip before the UI can be updated10:13 - Solution: useOptimistic() lets you merge ephemeral client-side state with server-side data so you can update the UI during a Server Action or Transition14:03 - How useOptimistic() avoids the notion of identity by discarding the ephemeral state after the app settles21:17 - How useOptimistic() lets you safely “fork” state that eventually syncs with the server27:32 - Handling error states29:26 - Differences between useOptimistic() and Remix fetchers34:57 - How useOptimistic() lets you avoid managing a long-lived client-side cacheLinks:Ryan’s useOptimistic tweetRyan’s video on React Cache: Part 2

Feb 7, 2024 • 1h 7min
React Deep Dive: cache
Ryan and Sam discuss the purpose and usage of the cache() function, a new experimental API from React.Topics include:0:00 - Intro2:29 - Caching in Next.js vs. React cache()8:11 - Why React invalidates the cache for each server request14:43 - How cache() enables colocation of data-fetching code16:14 - Using cache() to share CPU-heavy or I/O-bound tasks between components19:31 - Why cache() obviates the need for context in Server Components23:19 - The danger of module scope on the server27:54 - Why cache() is implemented with AsyncLocalStorage41:04 - Why cache() is part of React48:27 - Why Server Components don’t support cache()53:04 - How cache() eliminates waterfallsLinks:Ryan’s YouTube video on React Cache

Feb 1, 2024 • 56min
Advanced Radix UI | Blog Post Club: React Server
Discussion on Advanced Radix UI and React ARIA components. Challenges in building custom UI components. Benefits and challenges of using Framework Motion and Radix with React. Importance of learning lower-level libraries and customization using Radix. Confusion around react server components and React architecture. Exploring server-side rendering in React and understanding server components.

Nov 6, 2023 • 1h 28min
The SQL Injection Slide
Topics discussed in this podcast include React Server Actions & Server Components, the SQL Injection Slide at NextConf, high floor vs. high ceiling in programming, the third phase of React, the importance of having one set of opinions, and the benefits of server actions and server components in web development.

18 snips
Oct 14, 2023 • 46min
The Remix Architecture
Sam and Ryan discuss Remix's architecture and its conventions for Links, Forms, Actions, and Loaders, which eliminate boilerplate and enhance UIs using client-side React. They explore making dynamic pages, how Remix relies on HTTP for routing, backend changes with Forms and Actions, and how Remix layers React on web fundamentals.

Oct 4, 2023 • 57min
Implementing RSC, Part 2: Server Actions
Ryan shares details of his custom RSC implementation, discussing how Server Actions allow referencing server-side code. They explore bundling and invoking Server Actions and the security concerns associated with blurring server and client. Topics include implementing server actions, encoding and decoding arguments, and the benefits of server actions in React apps.

Sep 29, 2023 • 59min
Implementing RSC, Part 1: Rendering
Ryan shares how building his own RSC implementation from scratch helped him better understand React’s new paradigm. They talk about fetching RSC Payload from a server endpoint, bundling client code, using a client-side router, and reference projects used.

Sep 20, 2023 • 45min
Should a navigation and a refresh show the same page?
Discussion on Next.js client-side cache invalidation, the difference between clicking a link and refreshing a page, and using server components for data fetching and rendering. Also explores building a Firebase site and improving data notifications, and the evolution of navigating and loading data in Rails apps using server components and suspense.
Remember Everything You Learn from Podcasts
Save insights instantly, chat with episodes, and build lasting knowledge - all powered by AI.