3) Show Admin in side panel + guard pages

src/routes.tsx (or wherever you build nav/routes)

import AdminDashboard from "./pages/admin/AdminDashboard";
const IconImporter = React.lazy(() => import("./pages/admin/IconImporter"));
const IconLabeler  = React.lazy(() => import("./pages/admin/IconLabeler"));
import { getAdminRole, getAdminKey } from "./admin/useAdminSession";

const isAuthedAdmin = !!getAdminRole() && !!getAdminKey();

export const NAV: NavItem[] = [
  // ... Business Assets groups ...
  ...(isAuthedAdmin ? [{
    label: "Admin",
    icon: <Shield className="w-4 h-4" />,
    children: [
      { label: "Dashboard",     path: "/admin",                   icon: <LayoutDashboard className="w-4 h-4" /> },
      { label: "Icon Importer", path: "/admin/icon-importer",     icon: <Upload className="w-4 h-4" /> },
      { label: "Icon Labeler",  path: "/admin/icon-labeler",      icon: <Tag className="w-4 h-4" /> },
    ],
  }] : []),
];

export const ROUTES = [
  // ...
  { path: "/admin", element: <AdminDashboard /> },
  { path: "/admin/icon-importer", element: isAuthedAdmin ? <IconImporter /> : <AdminDashboard /> },
  { path: "/admin/icon-labeler",  element: isAuthedAdmin ? <IconLabeler  /> : <AdminDashboard /> },
];

4) Add the admin key header on admin pages

At the top of IconImporter.tsx and IconLabeler.tsx:

import { getAdminKey } from "../../admin/useAdminSession";
const ADMIN_KEY = getAdminKey();

await fetch("/api/icons/import-from-screenshot", { method: "POST", body: fd, headers: { "x-admin-key": ADMIN_KEY } });
await fetch("/api/icons/queue",   { method: "POST", headers: { "Content-Type":"application/json", "x-admin-key": ADMIN_KEY }, body: JSON.stringify({ items: payload }) });
await fetch("/api/icons/queue",   { headers: { "x-admin-key": ADMIN_KEY } });
await fetch("/api/icons/publish", { method: "POST", headers: { "Content-Type":"application/json", "x-admin-key": ADMIN_KEY }, body: JSON.stringify({ items: labeled }) });
await fetch(`/api/icons/queue/${id}`, { method:"DELETE", headers: { "x-admin-key": ADMIN_KEY } });

How it behaves

You (with OWNER_KEY) and your managers (with MANAGER_KEY) can sign into the Admin Dashboard (paste key + choose role).

The sidebar shows the Admin section with tiles.

Icon Importer and Labeler are only accessible in that admin session.

Server enforces it with headers + roles; public can’t hit the endpoints.