PAP-56: IA Phase 1 — left-nav restructure

Rebuild the sidebar to the board-locked IA structure (frontend-only):

- Add Conference room top-level item above New Task (chat-bubble icon),
  routing to a new placeholder page.
- Rename "New Issue" -> "New Task" and switch its label to the standard
  nav color (text-foreground/80) to match SidebarNavItem.
- Add Artifacts (new placeholder page) and Projects (-> existing /projects)
  to the Work section in the order Tasks · Routines · Goals · Workspaces ·
  Artifacts · Projects.
- Remove the old collapsible per-project PROJECTS section (SidebarProjects)
  from the sidebar; tiles get rebuilt in a child issue.
- Add /conference-room and /artifacts routes in App.tsx.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
scotttongandClaude Opus 4.8 committed 2026-06-05 15:12:56 -07:00
1 parent 55cd725bf5
commit 8be2eb41b0
5 files changed
+51 -10

No files matched your search

+4
View File
@@ -10,6 +10,8 @@ import { Companies } from "./pages/Companies";
import { Agents } from "./pages/Agents";
import { AgentDetail } from "./pages/AgentDetail";
import { Projects } from "./pages/Projects";
import { ConferenceRoom } from "./pages/ConferenceRoom";
import { Artifacts } from "./pages/Artifacts";
import { ProjectDetail } from "./pages/ProjectDetail";
import { ProjectWorkspaceDetail } from "./pages/ProjectWorkspaceDetail";
import { Workspaces } from "./pages/Workspaces";
@@ -67,6 +69,8 @@ function boardRoutes() {
return (
<>
<Route index element={<Navigate to="dashboard" replace />} />
<Route path="conference-room" element={<ConferenceRoom />} />
<Route path="artifacts" element={<Artifacts />} />
<Route path="dashboard" element={<Dashboard />} />
<Route path="dashboard/live" element={<DashboardLive />} />
<Route path="onboarding" element={<OnboardingRoutePage />} />
-4
View File
@@ -82,10 +82,6 @@ vi.mock("./SidebarCompanyMenu", () => ({
SidebarCompanyMenu: () => <div>Company menu</div>,
}));
vi.mock("./SidebarProjects", () => ({
SidebarProjects: () => null,
}));
vi.mock("./SidebarAgents", () => ({
SidebarAgents: () => null,
}));
+9 -6
View File
@@ -12,12 +12,14 @@ import {
Repeat,
GitBranch,
Settings,
MessagesSquare,
Package,
FolderOpen,
} from "lucide-react";
import { useQuery } from "@tanstack/react-query";
import { NavLink } from "@/lib/router";
import { SidebarSection } from "./SidebarSection";
import { SidebarNavItem } from "./SidebarNavItem";
import { SidebarProjects } from "./SidebarProjects";
import { SidebarAgents } from "./SidebarAgents";
import { useDialogActions } from "../context/DialogContext";
import { useCompany } from "../context/CompanyContext";
@@ -73,14 +75,15 @@ export function Sidebar() {
<nav className="flex-1 min-h-0 overflow-y-auto scrollbar-auto-hide flex flex-col gap-4 pointer-coarse:gap-3 px-3 py-2">
<div className="flex flex-col gap-0.5">
{/* New Issue button aligned with nav items */}
<SidebarNavItem to="/conference-room" label="Conference room" icon={MessagesSquare} />
{/* New Task button aligned with nav items */}
<button
onClick={() => openNewIssue()}
data-slot="icon-button"
className="flex items-center gap-2.5 px-3 py-2 pointer-coarse:py-1.5 text-[13px] font-medium text-muted-foreground hover:bg-accent/50 hover:text-foreground transition-colors"
className="flex items-center gap-2.5 px-3 py-2 pointer-coarse:py-1.5 text-[13px] font-medium text-foreground/80 hover:bg-accent/50 hover:text-foreground transition-colors"
>
<SquarePen className="h-4 w-4 shrink-0" />
<span className="truncate">New Issue</span>
<span className="truncate">New Task</span>
</button>
<SidebarNavItem to="/dashboard" label="Dashboard" icon={LayoutDashboard} liveCount={liveRunCount} />
<SidebarNavItem
@@ -100,6 +103,8 @@ export function Sidebar() {
{showWorkspacesLink ? (
<SidebarNavItem to="/workspaces" label="Workspaces" icon={GitBranch} />
) : null}
<SidebarNavItem to="/artifacts" label="Artifacts" icon={Package} />
<SidebarNavItem to="/projects" label="Projects" icon={FolderOpen} />
<PluginSlotOutlet
slotTypes={["sidebar"]}
context={pluginContext}
@@ -115,8 +120,6 @@ export function Sidebar() {
/>
</SidebarSection>
<SidebarProjects />
<SidebarAgents />
<SidebarSection label="Company">
+19
View File
@@ -0,0 +1,19 @@
import { useEffect } from "react";
import { Package } from "lucide-react";
import { EmptyState } from "../components/EmptyState";
import { useBreadcrumbs } from "../context/BreadcrumbContext";
export function Artifacts() {
const { setBreadcrumbs } = useBreadcrumbs();
useEffect(() => {
setBreadcrumbs([{ label: "Artifacts" }]);
}, [setBreadcrumbs]);
return (
<EmptyState
icon={Package}
message="Artifacts are coming soon."
/>
);
}
+19
View File
@@ -0,0 +1,19 @@
import { useEffect } from "react";
import { MessagesSquare } from "lucide-react";
import { EmptyState } from "../components/EmptyState";
import { useBreadcrumbs } from "../context/BreadcrumbContext";
export function ConferenceRoom() {
const { setBreadcrumbs } = useBreadcrumbs();
useEffect(() => {
setBreadcrumbs([{ label: "Conference room" }]);
}, [setBreadcrumbs]);
return (
<EmptyState
icon={MessagesSquare}
message="The conference room is coming soon."
/>
);
}