+ {/* Sidebar — fixed height, independent scroll */}
+
+ {/* Tangent heading */}
+
+
+ Tangent
+
+
+
+
+
+ {({ isActive }) => (
+
+
+ Tangent Dashboard
+
+ )}
+
+
+ {FILTER_LINKS.map(({ filter, icon }) => (
+
+
+
+ {PIPELINE_FILTER_LABELS[filter]}
+
+
+ ))}
+
+
+ {/* Spacer */}
+
+
+ {/* Bottom utilities */}
+
+
+
+
+ Back to My Dashboard
+
+
+
+
+
+ Docs
+
+
+
+ {({ isActive }) => (
+
+
+ Settings
+
+ )}
+
+
+ {/* Footer links */}
+
+ {[
+ { label: "About", href: ABOUT_URL },
+ { label: "Give feedback", href: GIVE_FEEDBACK_URL },
+ { label: "Privacy policy", href: PRIVACY_POLICY_URL },
+ ].map(({ label, href }) => (
+
+ {label}
+
+ ))}
+
+ ver: {GIT_COMMIT.substring(0, 6)}
+
+
+
+
+
+ {/* Main content — independent scroll */}
+
+
+
+
+ );
+}
diff --git a/src/routes/tangent/TangentProjectDetailView.tsx b/src/routes/tangent/TangentProjectDetailView.tsx
new file mode 100644
index 000000000..4ca857e2f
--- /dev/null
+++ b/src/routes/tangent/TangentProjectDetailView.tsx
@@ -0,0 +1,118 @@
+import { Link, useParams } from "@tanstack/react-router";
+
+import { Icon } from "@/components/ui/icon";
+import { BlockStack, InlineStack } from "@/components/ui/layout";
+import { Spinner } from "@/components/ui/spinner";
+import { Heading, Paragraph, Text } from "@/components/ui/typography";
+import { APP_ROUTES } from "@/routes/router";
+import { CurrentPerformance } from "@/routes/tangent/components/detail/CurrentPerformance";
+import { ResultsSection } from "@/routes/tangent/components/detail/ResultsSection";
+import { ScenarioSection } from "@/routes/tangent/components/detail/ScenarioSection";
+import { TangentAnalysis } from "@/routes/tangent/components/detail/TangentAnalysis";
+import { OpportunityScoreRing } from "@/routes/tangent/components/OpportunityScoreRing";
+import { RunStatusIndicator } from "@/routes/tangent/components/RunStatusIndicator";
+import { ScenarioStatusBadge } from "@/routes/tangent/components/ScenarioStatusBadge";
+import { useTangentPipeline } from "@/routes/tangent/hooks/useTangentPipeline";
+import { getCreatorHandle } from "@/routes/tangent/labels";
+
+export function TangentProjectDetailView() {
+ const { runId = "" } = useParams({ strict: false });
+ const { data: pipeline, isPending, isError } = useTangentPipeline(runId);
+
+ const backLink = (
+