Why we render marketing pages at build time

Public pages exist to be found. That makes them a different problem from the product itself, and it is worth building them differently.

Content on the first byte

A prerendered page arrives as complete HTML. There is no loading spinner, no hydration pass, no waiting on an API round-trip before the words appear. Every crawler — including the ones that never execute JavaScript — sees the finished page.

The app is still an app

None of that applies once someone signs in. Behind the login there is state, optimistic updates and client routing, and a single-page React app is the right shape for it. Those pages are not indexed, so nothing is lost by shipping the bundle there and only there.

One project, two answers

Astro lets both live in one codebase: static output for /, an island of React for /app. Shared design tokens, one build command, no drift.