Pro Workshop

Full Stack Foundations

Full Stack Foundations

Developers working on modern web applications today face a myriad of challenges.

The apps we build are expected to be good looking, fast, and secure. They need to be interactive, responsive, and accessible. They need to be SEO-friendly, and they need to be resilient to errors.

In order to be successful, you need to ensure you have a solid foundation to build on.

Full Stack Foundations is a comprehensive, in-depth workshop that sets the stage for the rest of the Epic Web series. It's designed to equip you with the current best practices for handling CSS, routing, data loading, and more.

This isn't some basic "intro" workshop! Even if you're an experienced developer, you'll learn new skills and techniques that will help you build better apps.

It was 🤯. A lot of fun, and I learned so much in one day. Even with 23 years as a software engineer, I have a much clearer understanding of how the web actually works. Now, months after this workshop, I’m working on a web project and this gave me the mental framework I needed to quickly ramp up and feel competent. I’m not even using the same tools Kent uses in the workshops! 13/10.

Gwen Shapira


In recent years, CSS has seen a lot of evolution in its usage and tooling. There are new best practices for importing stylesheets, managing assets, and optimizing styles. Failing to follow them can lead to slow-loading pages and a maintenance nightmare.

Here, you'll learn how to handle styling right:

  • Loading external stylesheets & other resources
  • Managing assets with fingerprinting and caching
  • Compilation with PostCSS and Tailwind CSS
  • Bundling CSS for libraries and components


The URL is critical for the web, and is closely tied to your application's routing. Making suboptimal decisions affects loading performance, navigation, and overall experience.

This section is a deep dive into routing, from the basic filesystem structure through nested routes and dynamic parameters:

  • Conventions for signifying routes
  • Layout and URL nesting
  • Navigation and linking
  • Dynamic route params
  • Resource routes

Data Loading

The web is all about data, and nothing frustrates users more than when loading is slow or broken. This section introduces you to AJAX/fetch and Remix loading features, giving you the tools to build stable, fast-loading applications:

  • Working with Request and Response objects
  • Fetching data for initial and subsequent loads
  • Accessing environment variables
  • Connecting routes to loaders


Interactivity makes apps engaging, but also introduces complexity. You need to ensure that the thing that happens when a form is submitted is what the user expects. Here you will use form methods and actions to mutate existing data in a mock database:

  • Creating forms with method and action
  • Storing and extracting form data
  • Handling invalid submissions
  • Form state management
  • Specifying intent

This module sets the stage for the complete Professional Web Forms workshop.


The browser is capable of quite a lot on its own. Up until this point of the workshop, the Epic Notes application will work without any JavaScript. However, scripting allows us to enhance the user experience in ways that would otherwise be impossible.

In this section, you'll incrementally add in features like client-side pending UI, prefetching, and optimistic updates:

  • Scroll position restoration
  • Considerations when overriding default browser functionality
  • Server and client bundles & entry files
  • Preloading data & code for anticipated actions
  • Transitions with the useNavigation hook

Search Engine Optimization

Ignoring SEO is like building a store without a sign— people simply won't find you. If you want to be successful, your site needs to be discoverable and optimized for presentation on those platforms.

SEO is a very broad topic, but this section will get you set up on the technical side of the equation:

  • Essential tags and attributes
  • Overriding default metadata for specific pages
  • Dynamically set metadata for social sharing
  • Reusing parent data for nested routes

Error Handling

Even the best apps can break, but what separates the good from the great is how they recover. Lack of proper error handling can lead to frustrated users and lost business.

This section will teach you how to anticipate, handle, and recover from errors, making your application resilient and user-friendly.

  • HTTP status codes
  • Using ErrorBoundary components to contain errors
  • Handle thrown errors when fetching data
  • Error bubbling from child routes to parent routes
  • Implement useful 404 pages