Files
Converge/src/components/Nav.tsx
Chris Olson 93007a1053 Sprint 2 UI and brand refresh
Workbench: ramp-adjusted headline (TCO, net run-rate, NPV, IRR, payback),
financial model panel with internal-only investment, year-by-year cash flow,
scenario panel (presets + custom, presented scenario, report comparison),
overlap heat map, shelfware and expansion panel, editable implementation
timeline (drag, resize, row editor, dependencies, reset), version history
with compare and restore, deal status, customer logo.

Deliverables: report, Word and new PowerPoint deck present the chosen
scenario with net figures only; investment and dossier entitlements never
itemized (covered by the leak suite). Exports and printing snapshot
automatically.

New pages: Portfolio dashboard, Settings (company name, logo, accent).
Knowledge base: duplicate queue with merge, confidence and sourcing,
TCO defaults, needs-review filter.

Brand: VMware by Broadcom palette per Brand Guidelines.pdf; Darkmode navy
dark theme; AA-safe accent ink; business units remapped to palette.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 15:41:15 -04:00

59 lines
1.9 KiB
TypeScript

"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import Logo from "./Logo";
import ThemeToggle from "./ThemeToggle";
const LINKS = [
{ href: "/", label: "Assessments" },
{ href: "/knowledge-base", label: "Knowledge base" },
{ href: "/portfolio", label: "Portfolio" },
{ href: "/catalog", label: "Product catalog" },
{ href: "/settings", label: "Settings" },
];
export default function Nav() {
const path = usePathname();
const isReport = path.endsWith("/report");
// Questionnaire respondents get a standalone page with no route into the tool.
if (path.startsWith("/q/")) return null;
return (
<header
className={`no-print sticky top-0 z-40 mb-6 border-b bg-[var(--plane)]/85 backdrop-blur-xl ${isReport ? "print:hidden" : ""}`}
>
<div className="mx-auto flex h-14 w-full max-w-[1600px] items-center gap-2 px-4 sm:px-6">
<Link href="/" className="mr-3 flex items-center gap-2.5">
<Logo size={24} />
<span className="text-[14px] font-semibold tracking-tight">Converge</span>
</Link>
<nav className="flex items-center gap-1">
{LINKS.map((l) => {
const active = l.href === "/" ? path === "/" || path.startsWith("/assessments") : path.startsWith(l.href);
return (
<Link
key={l.href}
href={l.href}
className={`rounded-lg px-3 py-1.5 text-[13px] font-medium transition-colors ${
active
? "bg-[var(--surface-2)] text-[var(--text-primary)]"
: "text-[var(--text-secondary)] hover:bg-[var(--surface-2)] hover:text-[var(--text-primary)]"
}`}
>
{l.label}
</Link>
);
})}
</nav>
<div className="ml-auto">
<ThemeToggle />
</div>
</div>
</header>
);
}