-
-
-
- {children}
-
+
+ {/* Mobile-only fixed header */}
+
+
+ {/* Full-height sidebar */}
+
+
+ {/* Content area */}
+
+ {/* Desktop-only top bar */}
+
+
+ {children}
+
);
diff --git a/app/(root)/(with-right-sidebar)/page.tsx b/app/(root)/page.tsx
similarity index 100%
rename from app/(root)/(with-right-sidebar)/page.tsx
rename to app/(root)/page.tsx
diff --git a/app/(root)/(no-right-sidebar)/profile/page.tsx b/app/(root)/profile/page.tsx
similarity index 100%
rename from app/(root)/(no-right-sidebar)/profile/page.tsx
rename to app/(root)/profile/page.tsx
diff --git a/app/(root)/(no-right-sidebar)/tags/page.tsx b/app/(root)/tags/page.tsx
similarity index 100%
rename from app/(root)/(no-right-sidebar)/tags/page.tsx
rename to app/(root)/tags/page.tsx
diff --git a/app/layout.tsx b/app/layout.tsx
index 104addc..53b9a4c 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -30,7 +30,7 @@ export default function RootLayout({
diff --git a/components.json b/components.json
index ce09c89..b27c50f 100644
--- a/components.json
+++ b/components.json
@@ -5,7 +5,7 @@
"tsx": true,
"tailwind": {
"config": "",
- "css": "globals.css",
+ "css": "app/globals.css",
"baseColor": "slate",
"cssVariables": true,
"prefix": ""
diff --git a/components/app-sidebar.tsx b/components/app-sidebar.tsx
new file mode 100644
index 0000000..c952b51
--- /dev/null
+++ b/components/app-sidebar.tsx
@@ -0,0 +1,117 @@
+"use client";
+
+import { SignedIn, UserButton } from "@clerk/nextjs";
+import Image from "next/image";
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import { ThemeLogo } from "@/components/navigation/full-logo";
+import { NAV_LINKS } from "@/components/navigation/nav-links.constants";
+import { SidebarToggleButton } from "@/components/navigation/sidebar-toggle-button";
+import {
+ Sidebar,
+ SidebarContent,
+ SidebarFooter,
+ SidebarGroup,
+ SidebarGroupContent,
+ SidebarHeader,
+ SidebarMenu,
+ SidebarMenuButton,
+ SidebarMenuItem,
+ SidebarRail,
+} from "@/components/ui/sidebar";
+import {
+ cn,
+ getNavIconClasses,
+ isRouteActive,
+ NAV_LINK_ACTIVE_CLASSES,
+ NAV_LINK_INACTIVE_CLASSES,
+} from "@/lib/utils";
+
+export function AppSidebar() {
+ const pathname = usePathname();
+
+ return (
+
+ );
+}
diff --git a/components/clerk-provider.tsx b/components/clerk-provider.tsx
index 3765916..8efbe20 100644
--- a/components/clerk-provider.tsx
+++ b/components/clerk-provider.tsx
@@ -19,7 +19,7 @@ export function ClerkProvider({
},
elements: {
formButtonPrimary:
- "bg-[image:var(--gradient-primary)] text-white hover:opacity-90",
+ "bg-(image:--gradient-primary) text-white hover:opacity-90",
footer: "bg-card",
avatarBox: "size-8",
},
diff --git a/components/navigation/content-top-bar.tsx b/components/navigation/content-top-bar.tsx
new file mode 100644
index 0000000..e05e16c
--- /dev/null
+++ b/components/navigation/content-top-bar.tsx
@@ -0,0 +1,34 @@
+import { SignedOut, SignInButton, SignUpButton } from "@clerk/nextjs";
+import { ThemeToggle } from "@/components/navigation/theme-toggle";
+import { Button } from "@/components/ui/button";
+import { CONTENT_HORIZONTAL_PADDING, cn, HEADER_HEIGHT } from "@/lib/utils";
+
+export function ContentTopBar() {
+ return (
+
+ );
+}
diff --git a/components/navigation/full-logo.tsx b/components/navigation/full-logo.tsx
index 41c5735..0a91628 100644
--- a/components/navigation/full-logo.tsx
+++ b/components/navigation/full-logo.tsx
@@ -17,7 +17,7 @@ export function ThemeLogo({ className }: ThemeLogoProps) {
- {/* Top: Navigation Links */}
-
-
- {/* Bottom: User Avatar + Toggle */}
-
-
-
-
-
-
-
- );
-}
diff --git a/components/navigation/mobile-header.tsx b/components/navigation/mobile-header.tsx
new file mode 100644
index 0000000..52df6f8
--- /dev/null
+++ b/components/navigation/mobile-header.tsx
@@ -0,0 +1,28 @@
+import Link from "next/link";
+import { MobileNav } from "@/components/navigation/mobile-nav";
+import { ThemeToggle } from "@/components/navigation/theme-toggle";
+import { cn, HEADER_HEIGHT } from "@/lib/utils";
+
+export function MobileHeader() {
+ return (
+
+ {/* Left: Logo icon */}
+
+ {/* biome-ignore lint/a11y/useAltText: Decorative logo, aria-label on parent link */}
+ {/* biome-ignore lint/performance/noImgElement: SVG logo doesn't benefit from next/image optimisation */}
+
+
+
+ {/* Right: Theme toggle + hamburger */}
+
+
+
+
+
+ );
+}
diff --git a/components/navigation/mobile-nav.tsx b/components/navigation/mobile-nav.tsx
index 736608e..ebf6fd0 100644
--- a/components/navigation/mobile-nav.tsx
+++ b/components/navigation/mobile-nav.tsx
@@ -75,7 +75,7 @@ export function MobileNav() {
{/* Navigation Links */}
-