diff --git a/apps/v4/app/(app)/create/components/create-skeleton.tsx b/apps/v4/app/(app)/create/components/create-skeleton.tsx
new file mode 100644
index 000000000..e988e5475
--- /dev/null
+++ b/apps/v4/app/(app)/create/components/create-skeleton.tsx
@@ -0,0 +1,15 @@
+import { Skeleton } from "@/styles/base-nova/ui/skeleton"
+
+export function CreateSkeleton() {
+ return (
+
+ )
+}
diff --git a/apps/v4/app/(app)/create/layout.tsx b/apps/v4/app/(app)/create/layout.tsx
index a137fdbc4..3240eadc1 100644
--- a/apps/v4/app/(app)/create/layout.tsx
+++ b/apps/v4/app/(app)/create/layout.tsx
@@ -1,5 +1,6 @@
import { Suspense } from "react"
+import { CreateSkeleton } from "@/app/(app)/create/components/create-skeleton"
import { HistoryProvider } from "@/app/(app)/create/hooks/use-history"
import { LocksProvider } from "@/app/(app)/create/hooks/use-locks"
@@ -10,7 +11,10 @@ export default function CreateLayout({
}) {
return (
-
+ {/* HistoryProvider reads useSearchParams(), which opts this subtree out
+ of prerendering up to this boundary. The fallback is what paints on
+ first load, so it must be the page placeholder, not empty. */}
+ }>
{children}
diff --git a/apps/v4/app/(app)/create/loading.tsx b/apps/v4/app/(app)/create/loading.tsx
new file mode 100644
index 000000000..11f33f672
--- /dev/null
+++ b/apps/v4/app/(app)/create/loading.tsx
@@ -0,0 +1,5 @@
+import { CreateSkeleton } from "@/app/(app)/create/components/create-skeleton"
+
+export default function CreateLoading() {
+ return
+}