As we saw in the last episode, delivering an empty HTML page and relying on JavaScript on the client to render your UI has dramatic implications for both the usability and performance of your app. The golden rule is to always serve HTML, but how does that work exactly? What are the alternatives, and what are the tradeoffs involved?

In this episode, we'll dive into the way React makes pre-rendering possible (the good), the additional demands Server-Side Rendering places on your architecture (the bad), and the pitfalls of integrating server-rendering into a modern JS app (the ugly). And we'll see how Snapshot Rendering offers an alternative that plays to the strengths of your existing tooling and infrastructure.