diff --git a/apps/webapp/app/assets/images/blurred-dashboard-background-menu-bottom.jpg b/apps/webapp/app/assets/images/blurred-dashboard-background-menu-bottom.jpg
new file mode 100644
index 0000000000..2a993f8212
Binary files /dev/null and b/apps/webapp/app/assets/images/blurred-dashboard-background-menu-bottom.jpg differ
diff --git a/apps/webapp/app/assets/images/blurred-dashboard-background-menu-top.jpg b/apps/webapp/app/assets/images/blurred-dashboard-background-menu-top.jpg
new file mode 100644
index 0000000000..8aca8563cd
Binary files /dev/null and b/apps/webapp/app/assets/images/blurred-dashboard-background-menu-top.jpg differ
diff --git a/apps/webapp/app/assets/images/blurred-dashboard-background-table.jpg b/apps/webapp/app/assets/images/blurred-dashboard-background-table.jpg
new file mode 100644
index 0000000000..a2ae4029fe
Binary files /dev/null and b/apps/webapp/app/assets/images/blurred-dashboard-background-table.jpg differ
diff --git a/apps/webapp/app/components/BackgroundWrapper.tsx b/apps/webapp/app/components/BackgroundWrapper.tsx
new file mode 100644
index 0000000000..ecff3af6dd
--- /dev/null
+++ b/apps/webapp/app/components/BackgroundWrapper.tsx
@@ -0,0 +1,48 @@
+import { type ReactNode } from "react";
+import blurredDashboardBackgroundMenuTop from "~/assets/images/blurred-dashboard-background-menu-top.jpg";
+import blurredDashboardBackgroundMenuBottom from "~/assets/images/blurred-dashboard-background-menu-bottom.jpg";
+import blurredDashboardBackgroundTable from "~/assets/images/blurred-dashboard-background-table.jpg";
+
+export function BackgroundWrapper({ children }: { children: ReactNode }) {
+ return (
+
+ {/* Left menu top background - fixed width 260px, maintains aspect ratio */}
+
+
+ {/* Left menu bottom background - fixed width 260px, maintains aspect ratio */}
+
+
+ {/* Right table background - fixed width 2000px, positioned next to menu */}
+
+
+ {/* Content layer */}
+
{children}
+
+ );
+}
diff --git a/apps/webapp/app/components/layout/AppLayout.tsx b/apps/webapp/app/components/layout/AppLayout.tsx
index e45836e496..0793c52cac 100644
--- a/apps/webapp/app/components/layout/AppLayout.tsx
+++ b/apps/webapp/app/components/layout/AppLayout.tsx
@@ -1,8 +1,18 @@
import { cn } from "~/utils/cn";
/** This container is used to surround the entire app, it correctly places the nav bar */
-export function AppContainer({ children }: { children: React.ReactNode }) {
- return
-
- }
- description="We just need you to confirm a couple of details, it'll only take a minute."
- />
-
-
-
-
- Your team will see this name and we'll use it if we need to contact you.
- {name.error}
-
-
-
- {
- setEnteredEmail(e.target.value);
- }}
- placeholder="Your email address"
- icon={EnvelopeIcon}
- spellCheck={false}
- />
- {!shouldShowConfirm && (
-
- Check this is the email you'd like associated with your Trigger.dev account.
-
- )}
- {email.error}
-
-
- {shouldShowConfirm ? (
+
+
+
+
+
+ }
+ description="We just need you to confirm a couple of details."
+ />
+
-
+
-
- Check this is the email you'd like associated with your Trigger.dev account.
-
- {confirmEmail.error}
+ Your team will see this name and we'll use it to contact you.
+ {name.error}
- ) : (
- <>
-
- >
- )}
- {isManagedCloud && (
-
+
{
+ setEnteredEmail(e.target.value);
+ }}
+ placeholder="Your email address"
+ icon={EnvelopeIcon}
spellCheck={false}
/>
+ {!shouldShowConfirm && (
+ Confirm this is the email you'd like for your Trigger.dev account.
+ )}
+ {email.error}
- )}
-
- Continue
-
- }
- />
-
-
-
+ {shouldShowConfirm ? (
+
+
+
+
+ Check this is the email you'd like associated with your Trigger.dev account.
+
+ {confirmEmail.error}
+
+ ) : (
+ <>
+
+ >
+ )}
+ {isManagedCloud && (
+
+
+
+
+ )}
+
+
+ Continue
+
+ }
+ />
+