The third argument of useSyncExternalStore as the server snapshot is a neat way to avoid pulling in a router for the prerender. One thing to double check is hydration: since that snapshot is also used while hydrating, the client should only hydrate the prerendered /classic markup, and mount the 3D route with a plain createRoot because its root is empty. Otherwise a hard load on another path can briefly render the Classic view first.
Tarun Sharma
The third argument of useSyncExternalStore as the server snapshot is a neat way to avoid pulling in a router for the prerender. One thing to double check is hydration: since that snapshot is also used while hydrating, the client should only hydrate the prerendered /classic markup, and mount the 3D route with a plain createRoot because its root is empty. Otherwise a hard load on another path can briefly render the Classic view first.