From e68ced7203923eca0e1827dafc27b7fb8556df7b Mon Sep 17 00:00:00 2001 From: Ben Senescu <44480372+bensenescu@users.noreply.github.com> Date: Tue, 14 Apr 2026 20:14:09 -0400 Subject: [PATCH] feat: group navigation into dropdown menus (#110) * feat: group navigation into Keywords, Domain, and AI dropdowns Reorganize the top nav from 7 flat items into grouped dropdowns: - Keywords: Keyword Research, Saved Keywords, Rank Tracking - Domain: Domain Overview, Backlinks, Site Audit - AI: standalone link Mobile sidebar uses section headers for the same groupings. Active dropdown items are highlighted with primary tint. * fix: use matchSegment lookup instead of hardcoded array indices in nav groups --- src/client/components/Sidebar.tsx | 78 +++++++++++++++++++-------- src/client/layout/AppShell.tsx | 90 +++++++++++++++++++++++++------ src/client/navigation/items.ts | 36 ++++++++++++- 3 files changed, 163 insertions(+), 41 deletions(-) diff --git a/src/client/components/Sidebar.tsx b/src/client/components/Sidebar.tsx index 9927f1f..286c5b4 100644 --- a/src/client/components/Sidebar.tsx +++ b/src/client/components/Sidebar.tsx @@ -1,6 +1,6 @@ import { Link } from "@tanstack/react-router"; import { ChevronsUpDown, X } from "lucide-react"; -import { getProjectNavItems } from "@/client/navigation/items"; +import { getProjectNavGroups } from "@/client/navigation/items"; interface SidebarProps { projectId: string; @@ -9,7 +9,7 @@ interface SidebarProps { } export function Sidebar({ projectId, onNavigate, onClose }: SidebarProps) { - const projectNavItems = getProjectNavItems(projectId); + const navGroups = getProjectNavGroups(projectId); return (
@@ -41,29 +41,61 @@ export function Sidebar({ projectId, onNavigate, onClose }: SidebarProps) {
{/* Navigation */} -