From 40b99f3add06bbe6fa9265b59a3f9170ead09cae Mon Sep 17 00:00:00 2001 From: twotalesanimation <80506065+twotalesanimation@users.noreply.github.com> Date: Fri, 18 Sep 2026 06:56:38 +0200 Subject: [PATCH] feat(ui): usable on phones without changing the desktop layout At phone width the sidebar stayed 240px wide, leaving pages a ~135px strip. Below md it is now hidden behind a menu button in the header and opens as a drawer (closes on navigation, backdrop, X or Escape); from md up the sidebar is unchanged. Page wrappers use p-4 on phones and keep p-6/p-8 from md. Shot detail: on phones the thumbnail takes the full width with the details below it instead of pushing them off screen, the action buttons wrap, and the tab bar scrolls sideways. Desktop sizing is kept as it was. Every change is behind a md: breakpoint, so the desktop layout is the same. Co-Authored-By: Claude Opus 5 --- app/(dashboard)/clients/[clientId]/page.tsx | 2 +- app/(dashboard)/clients/page.tsx | 2 +- app/(dashboard)/dashboard/page.tsx | 2 +- app/(dashboard)/layout.tsx | 23 +++-- .../pipeline/PipelineQueueClient.tsx | 2 +- .../pipeline/deliveries/DeliveriesClient.tsx | 2 +- .../exports/[exportId]/ExportDetailClient.tsx | 6 +- .../pipeline/machines/MachinesClient.tsx | 2 +- app/(dashboard)/projects/[id]/kanban/page.tsx | 2 +- app/(dashboard)/projects/[id]/page.tsx | 2 +- .../projects/[id]/shots/[shotId]/page.tsx | 21 ++-- app/(dashboard)/projects/page.tsx | 2 +- app/(dashboard)/settings/migration/page.tsx | 6 +- app/(dashboard)/settings/page.tsx | 2 +- .../settings/storage-test/page.tsx | 2 +- .../shot-status/ShotStatusClient.tsx | 2 +- app/(dashboard)/tasks/TasksPageClient.tsx | 2 +- app/(dashboard)/users/page.tsx | 2 +- components/layout/Header.tsx | 15 ++- components/layout/MobileNav.tsx | 20 ++++ components/layout/Sidebar.tsx | 96 ++++++++++++++----- 21 files changed, 148 insertions(+), 67 deletions(-) create mode 100644 components/layout/MobileNav.tsx diff --git a/app/(dashboard)/clients/[clientId]/page.tsx b/app/(dashboard)/clients/[clientId]/page.tsx index 59eab72..d2fb7c5 100644 --- a/app/(dashboard)/clients/[clientId]/page.tsx +++ b/app/(dashboard)/clients/[clientId]/page.tsx @@ -59,7 +59,7 @@ export default async function ClientDetailPage({ }; return ( -
+
{/* Back */} +
{/* Header */}
diff --git a/app/(dashboard)/dashboard/page.tsx b/app/(dashboard)/dashboard/page.tsx index 2b17342..59e8cec 100644 --- a/app/(dashboard)/dashboard/page.tsx +++ b/app/(dashboard)/dashboard/page.tsx @@ -161,7 +161,7 @@ export default async function DashboardPage() { } = await getDashboardData(session.user.id, session.user.role); return ( -
+

Dashboard

diff --git a/app/(dashboard)/layout.tsx b/app/(dashboard)/layout.tsx index a4aab3f..deed769 100644 --- a/app/(dashboard)/layout.tsx +++ b/app/(dashboard)/layout.tsx @@ -2,6 +2,7 @@ import { auth } from "@/auth"; import { redirect } from "next/navigation"; import { Sidebar } from "@/components/layout/Sidebar"; import { Header } from "@/components/layout/Header"; +import { MobileNavProvider } from "@/components/layout/MobileNav"; export default async function DashboardLayout({ children, @@ -12,18 +13,20 @@ export default async function DashboardLayout({ if (!session?.user) redirect("/login"); return ( -

-
- -
-
+ +
-
+ +
+
+
+
+
+
+ {children} +
-
- {children} -
-
+ ); } diff --git a/app/(dashboard)/pipeline/PipelineQueueClient.tsx b/app/(dashboard)/pipeline/PipelineQueueClient.tsx index af71b92..fef1e75 100644 --- a/app/(dashboard)/pipeline/PipelineQueueClient.tsx +++ b/app/(dashboard)/pipeline/PipelineQueueClient.tsx @@ -150,7 +150,7 @@ export function PipelineQueueClient({ projects, initialStatus = "all" }: Props) const lastRow = pagination ? Math.min(pagination.page * PAGE_SIZE, pagination.total) : 0; return ( -
+

Render Queue

diff --git a/app/(dashboard)/pipeline/deliveries/DeliveriesClient.tsx b/app/(dashboard)/pipeline/deliveries/DeliveriesClient.tsx index 11a97fb..4cf8e71 100644 --- a/app/(dashboard)/pipeline/deliveries/DeliveriesClient.tsx +++ b/app/(dashboard)/pipeline/deliveries/DeliveriesClient.tsx @@ -140,7 +140,7 @@ export function DeliveriesClient({ canBuild }: { canBuild: boolean }) { const shown = episode ? episodes.filter((e) => e.episode === episode) : episodes; return ( -
+
{shotThumbnail(shot) && ( -
+
)} -
-
- -

{shot.shotCode}

+
+
+ +

{shot.shotCode}

{/* Shot version badge — click to edit for managers */} {canManage ? ( @@ -424,7 +426,7 @@ export default function ShotDetailPage() { )} {canManage && ( -
+
{/* Internal approval action */} {canInternallyApprove && shot.shotApprovalStatus === "PENDING" && ( {breadcrumbs ? (