diff --git a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/preview/page.tsx b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/preview/page.tsx
index 657c0053..58ec5ebf 100644
--- a/vibn-frontend/app/[workspace]/project/[projectId]/(home)/preview/page.tsx
+++ b/vibn-frontend/app/[workspace]/project/[projectId]/(home)/preview/page.tsx
@@ -5,6 +5,7 @@ import { useEffect, useLayoutEffect, useRef, useState } from "react";
import { Loader2 } from "lucide-react";
import { useAnatomy } from "@/components/project/use-anatomy";
import { usePreviewBridge } from "@/components/project/preview-bridge-context";
+import { usePreviewToolbarStore } from "@/components/project/preview-toolbar/preview-toolbar-state";
const SAME_ORIGIN_SANDBOX =
"allow-scripts allow-forms allow-same-origin allow-popups allow-modals allow-downloads" as const;
@@ -32,7 +33,7 @@ export default function PreviewTab() {
const bridge = usePreviewBridge();
const origin = typeof window !== "undefined" ? window.location.origin : "";
- const [deviceMode, setDeviceMode] = useState<"desktop" | "mobile">("desktop");
+ const deviceMode = usePreviewToolbarStore((s) => s.deviceMode);
// Auto-select first preview on load
useEffect(() => {
@@ -67,43 +68,6 @@ export default function PreviewTab() {
))}
)}
-
-
-
-
void;
+}
+
+export const usePreviewToolbarStore = create
((set) => ({
+ deviceMode: 'desktop',
+ setDeviceMode: (mode) => set({ deviceMode: mode }),
+}));
diff --git a/vibn-frontend/components/project/project-icon-rail.tsx b/vibn-frontend/components/project/project-icon-rail.tsx
index 1a067cdf..ebbac260 100644
--- a/vibn-frontend/components/project/project-icon-rail.tsx
+++ b/vibn-frontend/components/project/project-icon-rail.tsx
@@ -46,6 +46,9 @@ const PRIMARY_ITEMS: RailItem[] = [
export function ProjectIconRail({ workspace, projectId }: Props) {
const pathname = usePathname() ?? "";
const projectBase = `/${workspace}/project/${projectId}`;
+ const isPreviewActive =
+ pathname === `${projectBase}/preview` ||
+ pathname.startsWith(`${projectBase}/preview/`);
const isActive = (item: RailItem) => {
const segments = [item.segment, ...(item.aliases ?? [])];
@@ -58,7 +61,13 @@ export function ProjectIconRail({ workspace, projectId }: Props) {
return (