diff --git a/apps/studio/components/interfaces/App/ShellFallback.tsx b/apps/studio/components/interfaces/App/ShellFallback.tsx
new file mode 100644
index 00000000000..ff6a1666af7
--- /dev/null
+++ b/apps/studio/components/interfaces/App/ShellFallback.tsx
@@ -0,0 +1,73 @@
+import { LogoLoader } from 'ui'
+
+import { IS_PLATFORM } from '@/lib/constants'
+
+// Baked into the prerendered SPA shell (_shell.html) — this is the static HTML
+// shown on every cold load until the JS bundle hydrates, so nothing here can
+// rely on JS: the loader animation, the 7s stuck-load help reveal, and the
+// noscript message are all pure CSS/HTML.
+export function ShellFallback() {
+ return (
+ <>
+
+
+ {/* LogoLoader fills its parent, so give it a fixed-height box — otherwise
+ it stretches to the full column and pushes the help text offscreen. */}
+
+
+
+ {/* data-nosnippet keeps Google from surfacing this boilerplate as the
+ search snippet for dashboard URLs (the shell serves every route). */}
+
+ Taking longer than expected? Try clearing your browser cookies and reloading the page.
+ {IS_PLATFORM && (
+ <>
+ {' '}
+ If the problem persists, contact{' '}
+
+ support@supabase.com
+
+ .
+ >
+ )}
+
+
+ {/* dangerouslySetInnerHTML keeps React hydration from diffing noscript
+ children, which the server renders as real markup but the client
+ treats as raw text. */}
+