Initial commit: Converge portfolio rationalization app

Next.js app for mapping a customer's competitive tool landscape onto our
portfolio and building the consolidation business case: assessment
workbench, customer report and Word export, product catalog, competitive
knowledge base, dossier import, shareable landscape questionnaires with a
review inbox, tool-footprint and business-unit value analysis, and an
implementation timeline.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-24 11:48:42 -04:00
commit d5c77543e8
64 changed files with 30861 additions and 0 deletions

56
src/components/Nav.tsx Normal file
View File

@@ -0,0 +1,56 @@
"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: "/catalog", label: "Product catalog" },
];
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>
);
}