Admin Dashboard
+
- Page
+
+ Page
not found
diff --git a/apps/admin/src/components/layout/DynamicBreadcrumb.tsx b/apps/admin/src/components/layout/DynamicBreadcrumb.tsx
new file mode 100644
index 0000000..c5e25a6
--- /dev/null
+++ b/apps/admin/src/components/layout/DynamicBreadcrumb.tsx
@@ -0,0 +1,69 @@
+"use client";
+
+import Link from "next/link";
+import { usePathname } from "next/navigation";
+import { HugeiconsIcon } from "@hugeicons/react";
+import { Home01Icon } from "@hugeicons/core-free-icons";
+import {
+ Breadcrumb,
+ BreadcrumbItem,
+ BreadcrumbLink,
+ BreadcrumbList,
+ BreadcrumbPage,
+ BreadcrumbSeparator,
+} from "@/components/ui/breadcrumb";
+import { ROUTE_LABELS } from "@/lib/constants/app.constants";
+
+export function DynamicBreadcrumb() {
+ const pathname = usePathname();
+ const segments = pathname.split("/").filter(Boolean);
+
+ // Root path — render "Dashboard" as a single page crumb
+ if (segments.length === 0) {
+ return (
+
+
+
+ Dashboard
+
+
+
+ );
+ }
+
+ return (
+
+
+ {/* Home icon link */}
+
+
+
+
+
+
+
+
+ {segments.map((segment, index) => {
+ const href = "/" + segments.slice(0, index + 1).join("/");
+ const label = ROUTE_LABELS[segment] ?? segment;
+ const isLast = index === segments.length - 1;
+
+ return (
+
+
+
+ {isLast ? (
+ {label}
+ ) : (
+
+ {label}
+
+ )}
+
+
+ );
+ })}
+
+
+ );
+}
diff --git a/apps/admin/src/components/layout/sidebar/app-sidebar.tsx b/apps/admin/src/components/layout/sidebar/app-sidebar.tsx
index b7c7b86..5b681f6 100644
--- a/apps/admin/src/components/layout/sidebar/app-sidebar.tsx
+++ b/apps/admin/src/components/layout/sidebar/app-sidebar.tsx
@@ -1,16 +1,8 @@
"use client";
import * as React from "react";
-import {
- LayoutDashboard,
- ShoppingCart,
- Package,
- Users,
- Tag,
- Star,
- Settings,
- PawPrint,
-} from "lucide-react";
+import { HugeiconsIcon } from "@hugeicons/react";
+import { Store01Icon } from "@hugeicons/core-free-icons";
import {
Sidebar,
SidebarContent,
@@ -23,19 +15,8 @@ import {
} from "@/components/ui/sidebar";
import { NavMain } from "./nav-main";
import { NavUser } from "./nav-user";
-
-const navItems = [
- { title: "Dashboard", url: "/", icon: LayoutDashboard },
- { title: "Orders", url: "/orders", icon: ShoppingCart },
- { title: "Products", url: "/products", icon: Package },
- { title: "Customers", url: "/customers", icon: Users },
- { title: "Categories", url: "/categories", icon: Tag },
- { title: "Reviews", url: "/reviews", icon: Star },
-];
-
-const settingsItems = [
- { title: "Settings", url: "/settings", icon: Settings },
-];
+import { NAV_LINKS } from "@/lib/constants/app.constants";
+import { PawPrint } from "lucide-react";
export function AppSidebar({ ...props }: React.ComponentProps) {
return (
@@ -57,8 +38,14 @@ export function AppSidebar({ ...props }: React.ComponentProps) {
-
-
+ {/* dashboard */}
+
+
+ {/* Application */}
+
+
+ {/* Users */}
+
diff --git a/apps/admin/src/components/layout/sidebar/nav-main.tsx b/apps/admin/src/components/layout/sidebar/nav-main.tsx
index c861409..6a4d083 100644
--- a/apps/admin/src/components/layout/sidebar/nav-main.tsx
+++ b/apps/admin/src/components/layout/sidebar/nav-main.tsx
@@ -1,39 +1,102 @@
"use client";
import Link from "next/link";
-import { type LucideIcon } from "lucide-react";
+import { usePathname } from "next/navigation";
+import { HugeiconsIcon, type IconSvgElement } from "@hugeicons/react";
+import { ArrowRight01Icon } from "@hugeicons/core-free-icons";
import {
SidebarGroup,
SidebarGroupLabel,
SidebarMenu,
SidebarMenuButton,
SidebarMenuItem,
+ SidebarMenuSub,
+ SidebarMenuSubButton,
+ SidebarMenuSubItem,
} from "@/components/ui/sidebar";
+import { CollapsibleTrigger, CollapsibleContent, Collapsible } from "@/components/ui/collapsible";
export function NavMain({
- items,
+ overview,
+ isOverview,
+ navMain,
}: {
- items: {
+ overview: {
title: string;
url: string;
- icon: LucideIcon;
- isActive?: boolean;
+ icon: IconSvgElement;
+ }[];
+ isOverview?: boolean;
+ navMain: {
+ title: string;
+ url: string;
+ icon: IconSvgElement;
+ items?: {
+ title: string;
+ url: string;
+ }[];
}[];
}) {
+ const pathname = usePathname();
+
+ if (isOverview) {
+ return (
+
+ Platform
+
+ {overview.map((item) => (
+
+
+
+
+ {item.title}
+
+
+
+ ))}
+
+
+ );
+ }
+
return (
- Platform
+ Application
- {items.map((item) => (
-
-
-
-
- {item.title}
-
-
-
- ))}
+ {navMain.map((item) => {
+ const isGroupActive = pathname.startsWith(item.url);
+ return (
+
+
+
+
+
+ {item.title}
+
+
+
+
+
+ {item.items?.map((subItem) => (
+
+
+
+ {subItem.title}
+
+
+
+ ))}
+
+
+
+
+ );
+ })}
);
diff --git a/apps/admin/src/components/shared/still_building_placeholder.tsx b/apps/admin/src/components/shared/still_building_placeholder.tsx
index 2023f4a..c2d330f 100644
--- a/apps/admin/src/components/shared/still_building_placeholder.tsx
+++ b/apps/admin/src/components/shared/still_building_placeholder.tsx
@@ -6,9 +6,9 @@ export default function StillBuildingPlaceholder() {
-
- Building
- in progress
+
+ Building
+ in Progress
diff --git a/apps/admin/src/lib/constants/app.constants.ts b/apps/admin/src/lib/constants/app.constants.ts
index 06b2e31..c0fa211 100644
--- a/apps/admin/src/lib/constants/app.constants.ts
+++ b/apps/admin/src/lib/constants/app.constants.ts
@@ -1,30 +1,53 @@
-import { BookOpen, Bot, ShoppingCart, LayoutDashboard, Users } from "lucide-react";
+import {
+ DashboardSquare02Icon,
+ ShoppingCart01Icon,
+ PackageIcon,
+ UserMultipleIcon,
+} from "@hugeicons/core-free-icons";
+
+export const ROUTE_LABELS: Record = {
+ orders: "Orders",
+ products: "Products",
+ categories: "Categories",
+ images: "Images",
+ variants: "Variants",
+ customers: "Customers",
+ reviews: "Reviews",
+ messages: "Messages",
+ newsletter: "Newsletter",
+ users: "Users",
+ settings: "Settings",
+ returns: "Returns",
+};
export const NAV_LINKS = {
overview: [
{
title: "Dashboard",
url: "/",
- icon: LayoutDashboard,
+ icon: DashboardSquare02Icon,
},
],
navMain: [
{
title: "Sales",
url: "/orders",
- icon: ShoppingCart,
- isActive: true,
+ icon: ShoppingCart01Icon,
items: [
{
title: "Orders",
url: "/orders",
},
+ {
+ title: "Returns",
+ url: "/returns",
+ },
],
},
{
title: "Products",
url: "/products",
- icon: Bot,
+ icon: PackageIcon,
items: [
{
title: "Categories",
@@ -32,7 +55,7 @@ export const NAV_LINKS = {
},
{
title: "Products",
- url: "/products/products",
+ url: "/products",
},
{
title: "Images",
@@ -44,54 +67,31 @@ export const NAV_LINKS = {
},
],
},
- {
- title: "Documentation",
- url: "#",
- icon: BookOpen,
- items: [
- {
- title: "Introduction",
- url: "#",
- },
- {
- title: "Get Started",
- url: "#",
- },
- {
- title: "Tutorials",
- url: "#",
- },
- {
- title: "Changelog",
- url: "#",
- },
- ],
- },
{
title: "Customers",
url: "/customers",
- icon: Users,
+ icon: UserMultipleIcon,
items: [
{
title: "Reviews",
- url: "#",
+ url: "/customers/reviews",
},
{
title: "Messages",
- url: "#",
+ url: "/customers/messages",
},
{
title: "Newsletter",
- url: "#",
+ url: "/customers/newsletter",
},
],
},
],
- sales: [
+ users: [
{
- title: "Orders",
- url: "/orders",
- icon: ShoppingCart,
+ title: "Users",
+ url: "/users",
+ icon: UserMultipleIcon,
},
],
};
diff --git a/apps/admin/src/middleware.ts b/apps/admin/src/proxy.ts
similarity index 100%
rename from apps/admin/src/middleware.ts
rename to apps/admin/src/proxy.ts
diff --git a/apps/admin/tsconfig.json b/apps/admin/tsconfig.json
index fe63dae..207fe18 100644
--- a/apps/admin/tsconfig.json
+++ b/apps/admin/tsconfig.json
@@ -12,10 +12,10 @@
"incremental": true,
"module": "esnext",
"esModuleInterop": true,
- "moduleResolution": "node",
+ "moduleResolution": "bundler",
"resolveJsonModule": true,
"isolatedModules": true,
- "jsx": "preserve",
+ "jsx": "react-jsx",
"plugins": [
{
"name": "next"
@@ -23,14 +23,17 @@
],
"target": "ES2017",
"paths": {
- "@/*": ["./src/*"]
+ "@/*": [
+ "./src/*"
+ ]
}
},
"include": [
"next-env.d.ts",
".next/types/**/*.ts",
"**/*.ts",
- "**/*.tsx"
+ "**/*.tsx",
+ ".next/dev/types/**/*.ts"
],
"exclude": [
"node_modules"
diff --git a/package-lock.json b/package-lock.json
index 3725f1c..0f31c04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -15,7 +15,7 @@
"@clerk/backend": "^2.32.1",
"@tailwindcss/postcss": "^4.2.0",
"convex": "^1.32.0",
- "next": "^15.3.2",
+ "next": "16.1.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"stripe": "^20.4.0",
@@ -45,7 +45,10 @@
"apps/admin": {
"version": "0.0.1",
"dependencies": {
+ "@base-ui/react": "^1.2.0",
"@clerk/nextjs": "^6.38.2",
+ "@hugeicons/core-free-icons": "^3.3.0",
+ "@hugeicons/react": "^1.1.5",
"@repo/convex": "*",
"@repo/types": "*",
"@repo/utils": "*",
@@ -609,7 +612,6 @@
"version": "7.28.6",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.6.tgz",
"integrity": "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA==",
- "dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
@@ -663,6 +665,59 @@
"node": ">=6.9.0"
}
},
+ "node_modules/@base-ui/react": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.2.0.tgz",
+ "integrity": "sha512-O6aEQHcm+QyGTFY28xuwRD3SEJGZOBDpyjN2WvpfWYFVhg+3zfXPysAILqtM0C1kWC82MccOE/v1j+GHXE4qIw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.6",
+ "@base-ui/utils": "0.2.5",
+ "@floating-ui/react-dom": "^2.1.6",
+ "@floating-ui/utils": "^0.2.10",
+ "tabbable": "^6.4.0",
+ "use-sync-external-store": "^1.6.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/mui-org"
+ },
+ "peerDependencies": {
+ "@types/react": "^17 || ^18 || ^19",
+ "react": "^17 || ^18 || ^19",
+ "react-dom": "^17 || ^18 || ^19"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@base-ui/utils": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.5.tgz",
+ "integrity": "sha512-oYC7w0gp76RI5MxprlGLV0wze0SErZaRl3AAkeP3OnNB/UBMb6RqNf6ZSIlxOc9Qp68Ab3C2VOcJQyRs7Xc7Vw==",
+ "license": "MIT",
+ "dependencies": {
+ "@babel/runtime": "^7.28.6",
+ "@floating-ui/utils": "^0.2.10",
+ "reselect": "^5.1.1",
+ "use-sync-external-store": "^1.6.0"
+ },
+ "peerDependencies": {
+ "@types/react": "^17 || ^18 || ^19",
+ "react": "^17 || ^18 || ^19",
+ "react-dom": "^17 || ^18 || ^19"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@clerk/backend": {
"version": "2.32.1",
"resolved": "https://registry.npmjs.org/@clerk/backend/-/backend-2.32.1.tgz",
@@ -1714,6 +1769,21 @@
"hono": "^4"
}
},
+ "node_modules/@hugeicons/core-free-icons": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/@hugeicons/core-free-icons/-/core-free-icons-3.3.0.tgz",
+ "integrity": "sha512-qYyr4JQ2eQIHTSTbITvnJvs6ERNK64D9gpwZnf2IyuG0exzqfyABLO/oTB71FB3RZPfu1GbwycdiGSo46apjMQ==",
+ "license": "MIT"
+ },
+ "node_modules/@hugeicons/react": {
+ "version": "1.1.5",
+ "resolved": "https://registry.npmjs.org/@hugeicons/react/-/react-1.1.5.tgz",
+ "integrity": "sha512-JX/iDz3oO7hWdVqbjwFwRrAjHk8h2vI+mBkNzp4JcXG3t4idoupfjon73nLOA7cr27m0M8hrRC1Q2h6nEBGKVA==",
+ "license": "MIT",
+ "peerDependencies": {
+ "react": ">=16.0.0"
+ }
+ },
"node_modules/@humanfs/core": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
@@ -2498,9 +2568,9 @@
}
},
"node_modules/@next/env": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.12.tgz",
- "integrity": "sha512-pUvdJN1on574wQHjaBfNGDt9Mz5utDSZFsIIQkMzPgNS8ZvT4H2mwOrOIClwsQOb6EGx5M76/CZr6G8i6pSpLg==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-16.1.6.tgz",
+ "integrity": "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ==",
"license": "MIT"
},
"node_modules/@next/eslint-plugin-next": {
@@ -2514,9 +2584,9 @@
}
},
"node_modules/@next/swc-darwin-arm64": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.12.tgz",
- "integrity": "sha512-RnRjBtH8S8eXCpUNkQ+543DUc7ys8y15VxmFU9HRqlo9BG3CcBUiwNtF8SNoi2xvGCVJq1vl2yYq+3oISBS0Zg==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-16.1.6.tgz",
+ "integrity": "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw==",
"cpu": [
"arm64"
],
@@ -2530,9 +2600,9 @@
}
},
"node_modules/@next/swc-darwin-x64": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.12.tgz",
- "integrity": "sha512-nqa9/7iQlboF1EFtNhWxQA0rQstmYRSBGxSM6g3GxvxHxcoeqVXfGNr9stJOme674m2V7r4E3+jEhhGvSQhJRA==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz",
+ "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==",
"cpu": [
"x64"
],
@@ -2546,9 +2616,9 @@
}
},
"node_modules/@next/swc-linux-arm64-gnu": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.12.tgz",
- "integrity": "sha512-dCzAjqhDHwmoB2M4eYfVKqXs99QdQxNQVpftvP1eGVppamXh/OkDAwV737Zr0KPXEqRUMN4uCjh6mjO+XtF3Mw==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz",
+ "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==",
"cpu": [
"arm64"
],
@@ -2562,9 +2632,9 @@
}
},
"node_modules/@next/swc-linux-arm64-musl": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.12.tgz",
- "integrity": "sha512-+fpGWvQiITgf7PUtbWY1H7qUSnBZsPPLyyq03QuAKpVoTy/QUx1JptEDTQMVvQhvizCEuNLEeghrQUyXQOekuw==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz",
+ "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==",
"cpu": [
"arm64"
],
@@ -2578,9 +2648,9 @@
}
},
"node_modules/@next/swc-linux-x64-gnu": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.12.tgz",
- "integrity": "sha512-jSLvgdRRL/hrFAPqEjJf1fFguC719kmcptjNVDJl26BnJIpjL3KH5h6mzR4mAweociLQaqvt4UyzfbFjgAdDcw==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz",
+ "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==",
"cpu": [
"x64"
],
@@ -2594,9 +2664,9 @@
}
},
"node_modules/@next/swc-linux-x64-musl": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.12.tgz",
- "integrity": "sha512-/uaF0WfmYqQgLfPmN6BvULwxY0dufI2mlN2JbOKqqceZh1G4hjREyi7pg03zjfyS6eqNemHAZPSoP84x17vo6w==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz",
+ "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==",
"cpu": [
"x64"
],
@@ -2610,9 +2680,9 @@
}
},
"node_modules/@next/swc-win32-arm64-msvc": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.12.tgz",
- "integrity": "sha512-xhsL1OvQSfGmlL5RbOmU+FV120urrgFpYLq+6U8C6KIym32gZT6XF/SDE92jKzzlPWskkbjOKCpqk5m4i8PEfg==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz",
+ "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==",
"cpu": [
"arm64"
],
@@ -2626,9 +2696,9 @@
}
},
"node_modules/@next/swc-win32-x64-msvc": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.12.tgz",
- "integrity": "sha512-Z1Dh6lhFkxvBDH1FoW6OU/L6prYwPSlwjLiZkExIAh8fbP6iI/M7iGTQAJPYJ9YFlWobCZ1PHbchFhFYb2ADkw==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz",
+ "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==",
"cpu": [
"x64"
],
@@ -10110,7 +10180,6 @@
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.0.tgz",
"integrity": "sha512-lIyg0szRfYbiy67j9KN8IyeD7q7hcmqnJ1ddWmNt19ItGpNN64mnllmxUNFIOdOm6by97jlL6wfpTTJrmnjWAA==",
- "dev": true,
"license": "Apache-2.0",
"bin": {
"baseline-browser-mapping": "dist/cli.cjs"
@@ -14337,14 +14406,15 @@
}
},
"node_modules/next": {
- "version": "15.5.12",
- "resolved": "https://registry.npmjs.org/next/-/next-15.5.12.tgz",
- "integrity": "sha512-Fi/wQ4Etlrn60rz78bebG1i1SR20QxvV8tVp6iJspjLUSHcZoeUXCt+vmWoEcza85ElZzExK/jJ/F6SvtGktjA==",
+ "version": "16.1.6",
+ "resolved": "https://registry.npmjs.org/next/-/next-16.1.6.tgz",
+ "integrity": "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw==",
"license": "MIT",
"peer": true,
"dependencies": {
- "@next/env": "15.5.12",
+ "@next/env": "16.1.6",
"@swc/helpers": "0.5.15",
+ "baseline-browser-mapping": "^2.8.3",
"caniuse-lite": "^1.0.30001579",
"postcss": "8.4.31",
"styled-jsx": "5.1.6"
@@ -14353,18 +14423,18 @@
"next": "dist/bin/next"
},
"engines": {
- "node": "^18.18.0 || ^19.8.0 || >= 20.0.0"
+ "node": ">=20.9.0"
},
"optionalDependencies": {
- "@next/swc-darwin-arm64": "15.5.12",
- "@next/swc-darwin-x64": "15.5.12",
- "@next/swc-linux-arm64-gnu": "15.5.12",
- "@next/swc-linux-arm64-musl": "15.5.12",
- "@next/swc-linux-x64-gnu": "15.5.12",
- "@next/swc-linux-x64-musl": "15.5.12",
- "@next/swc-win32-arm64-msvc": "15.5.12",
- "@next/swc-win32-x64-msvc": "15.5.12",
- "sharp": "^0.34.3"
+ "@next/swc-darwin-arm64": "16.1.6",
+ "@next/swc-darwin-x64": "16.1.6",
+ "@next/swc-linux-arm64-gnu": "16.1.6",
+ "@next/swc-linux-arm64-musl": "16.1.6",
+ "@next/swc-linux-x64-gnu": "16.1.6",
+ "@next/swc-linux-x64-musl": "16.1.6",
+ "@next/swc-win32-arm64-msvc": "16.1.6",
+ "@next/swc-win32-x64-msvc": "16.1.6",
+ "sharp": "^0.34.4"
},
"peerDependencies": {
"@opentelemetry/api": "^1.1.0",
@@ -15728,6 +15798,12 @@
"node": ">=0.10.0"
}
},
+ "node_modules/reselect": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
+ "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
+ "license": "MIT"
+ },
"node_modules/resolve": {
"version": "1.22.11",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz",
@@ -16798,6 +16874,12 @@
"react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
}
},
+ "node_modules/tabbable": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz",
+ "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==",
+ "license": "MIT"
+ },
"node_modules/tagged-tag": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz",
diff --git a/package.json b/package.json
index dea6ead..7264e0b 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
"@clerk/backend": "^2.32.1",
"@tailwindcss/postcss": "^4.2.0",
"convex": "^1.32.0",
- "next": "^15.3.2",
+ "next": "16.1.6",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"stripe": "^20.4.0",
- Building
- in progress
+
+ Building
+ in Progress
diff --git a/apps/admin/src/lib/constants/app.constants.ts b/apps/admin/src/lib/constants/app.constants.ts
index 06b2e31..c0fa211 100644
--- a/apps/admin/src/lib/constants/app.constants.ts
+++ b/apps/admin/src/lib/constants/app.constants.ts
@@ -1,30 +1,53 @@
-import { BookOpen, Bot, ShoppingCart, LayoutDashboard, Users } from "lucide-react";
+import {
+ DashboardSquare02Icon,
+ ShoppingCart01Icon,
+ PackageIcon,
+ UserMultipleIcon,
+} from "@hugeicons/core-free-icons";
+
+export const ROUTE_LABELS: Record