diff --git a/public/llms.txt b/public/llms.txt
index 14ef8f6..6474302 100644
--- a/public/llms.txt
+++ b/public/llms.txt
@@ -21,7 +21,7 @@ CAD Viewer is an open-source, in-browser CAD file viewer built on the OpenCascad
Free to use, no subscription required.
## Guides
-- How to Split a STEP Assembly Into Separate Part Files (Free, Online): https://cadviewer.xyz/guides/split-step-assembly
+- [How to Split a STEP Assembly Into Separate Part Files (Free, Online)](https://cadviewer.xyz/guides/split-step-assembly)
## Live app
-https://cadviewer.xyz/
+[CAD Viewer](https://cadviewer.xyz/)
diff --git a/src/main.tsx b/src/main.tsx
index 9c5d7f1..b0128cd 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,9 +1,29 @@
+import { lazy, Suspense } from "react";
import { ClientOnly, Head, ViteReactSSG } from "vite-react-ssg";
import type { RouteRecord } from "vite-react-ssg";
-import App from "./ui/App";
import Landing from "./pages/Landing";
import SplitStepAssembly from "./pages/guides/SplitStepAssembly";
+const App = lazy(() => import("./ui/App"));
+
+function ViewerLoading() {
+ return (
+
+ Loading viewer…
+
+ );
+}
+
function NotFound() {
return (
CAD Viewer — 3D Viewer
- {() => }
+
+ {() => (
+ }>
+
+
+ )}
+
>
),
},
diff --git a/src/pages/Landing.tsx b/src/pages/Landing.tsx
index cc1c49f..a72840b 100644
--- a/src/pages/Landing.tsx
+++ b/src/pages/Landing.tsx
@@ -102,7 +102,7 @@ export default function Landing() {
/>
{/* LAYER 2: hero content — must be above canvas and fog */}
-