diff --git a/app/compare/page.tsx b/app/compare/page.tsx
new file mode 100644
index 0000000..fda39d5
--- /dev/null
+++ b/app/compare/page.tsx
@@ -0,0 +1,194 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+import { Check, X, Minus, ArrowRight } from "lucide-react";
+import { compareCopy, type SupportLevel } from "@/lib/copy/compare";
+import { buildPageMetadata } from "@/lib/seo";
+import { siteConfig } from "@/lib/config";
+
+export const metadata: Metadata = buildPageMetadata({
+ title: `Why Recoup? — Compare AI Music Agents vs Agencies & Generic AI | ${siteConfig.name}`,
+ description:
+ "See how Recoup's purpose-built music agents compare to hiring staff, creative agencies, and generic AI like ChatGPT. Real cost savings from real labels.",
+ path: "/compare",
+});
+
+/* ── support-level icon ── */
+function SupportIcon({ level }: { level: SupportLevel }) {
+ if (level === "full")
+ return (
+
+
+
+ );
+ if (level === "partial")
+ return (
+
+
+
+ );
+ return (
+
+
+
+ );
+}
+
+export default function ComparePage() {
+ const c = compareCopy;
+
+ return (
+
+ {/* ── Hero ── */}
+
+
+ {c.title}
+
+
+ {c.description}
+
+
+
+ {/* ── Comparison Grid ── */}
+
+ {/* column headers — desktop */}
+
+
Capability
+ {c.columns.map((col) => (
+
+ {col}
+
+ ))}
+
+
+
+ {c.rows.map((row) => (
+
+ {/* Desktop row */}
+
+
+ {row.capability}
+
+ {(["recoup", "humans", "agency", "genericAI"] as const).map(
+ (key) => (
+
+
+
+ {row[key].note}
+
+
+ )
+ )}
+
+
+ {/* Mobile card */}
+
+
+ {row.capability}
+
+
+ {(["recoup", "humans", "agency", "genericAI"] as const).map(
+ (key, i) => (
+
+
+
+
+ {c.columns[i]}
+
+
+ {row[key].note}
+
+
+
+ )
+ )}
+
+
+
+ ))}
+
+
+
+ {/* ── Cost Comparison ── */}
+
+
+ {c.costTitle}
+
+
+ {c.costDescription}
+
+
+
+ {c.costs.map((cost) => (
+
+
+ {cost.source}
+
+
+ {cost.label}
+
+
+ {cost.traditional}
+
+
+ {cost.recoup}
+
+
{cost.savings}
+
+ ))}
+
+
+
+ {/* ── ChatGPT Objection ── */}
+
+
+
+ {c.chatgptTitle}
+
+
+ {c.chatgptDescription}
+
+
+
+ {c.chatgptPoints.map((point) => (
+
+
+
+
+ {point}
+
+ ))}
+
+
+
+ {c.chatgptPunchline}
+
+
+
+
+ {/* ── CTA ── */}
+
+
+
+ {c.ctaPrimary.label}
+
+
+
+ {c.ctaSecondary.label}
+
+
+
+
+ );
+}
diff --git a/lib/copy/compare.ts b/lib/copy/compare.ts
new file mode 100644
index 0000000..0d122b1
--- /dev/null
+++ b/lib/copy/compare.ts
@@ -0,0 +1,129 @@
+/**
+ * Compare page copy — single source of truth.
+ * Competitive comparison: Recoup vs alternatives.
+ */
+
+export type SupportLevel = "full" | "partial" | "none";
+
+export interface ComparisonRow {
+ capability: string;
+ recoup: { level: SupportLevel; note: string };
+ humans: { level: SupportLevel; note: string };
+ agency: { level: SupportLevel; note: string };
+ genericAI: { level: SupportLevel; note: string };
+}
+
+export interface CostRow {
+ label: string;
+ traditional: string;
+ recoup: string;
+ savings: string;
+ source: string;
+}
+
+export const compareCopy = {
+ title: "Why Recoup?",
+ description:
+ "Generic AI doesn't understand music. Agencies are slow and expensive. Recoup is purpose-built music intelligence — agents that know your artists, your data, and your industry.",
+
+ columns: ["Recoup", "In-House Team", "Creative Agency", "ChatGPT / Claude"] as const,
+
+ rows: [
+ {
+ capability: "Content Creation",
+ recoup: { level: "full", note: "30 days of branded content in one session" },
+ humans: { level: "full", note: "High quality, slow turnaround" },
+ agency: { level: "full", note: "$5K+/mo, days per batch" },
+ genericAI: { level: "partial", note: "Can write, but no artist context" },
+ },
+ {
+ capability: "Artist Research",
+ recoup: { level: "full", note: "Streaming, social, audience, playlists — live data" },
+ humans: { level: "partial", note: "Manual data pulls, hours per report" },
+ agency: { level: "none", note: "Not typically offered" },
+ genericAI: { level: "partial", note: "No access to streaming APIs" },
+ },
+ {
+ capability: "Release Strategy",
+ recoup: { level: "full", note: "Data-informed, auto-generated per release" },
+ humans: { level: "full", note: "Experienced, but expensive" },
+ agency: { level: "partial", note: "Template-based, not data-driven" },
+ genericAI: { level: "partial", note: "Generic advice, no real data" },
+ },
+ {
+ capability: "Social Analytics",
+ recoup: { level: "full", note: "Cross-platform scraping + insights" },
+ humans: { level: "partial", note: "Manual exports from each platform" },
+ agency: { level: "partial", note: "Monthly reports, often delayed" },
+ genericAI: { level: "none", note: "No platform access" },
+ },
+ {
+ capability: "Catalog Valuation",
+ recoup: { level: "full", note: "Real-time from streaming data" },
+ humans: { level: "partial", note: "Requires specialist + weeks" },
+ agency: { level: "none", note: "Not offered" },
+ genericAI: { level: "none", note: "No valuation models" },
+ },
+ {
+ capability: "Automated Reporting",
+ recoup: { level: "full", note: "Weekly reports, zero human effort" },
+ humans: { level: "partial", note: "40+ hours/month for a team of 5" },
+ agency: { level: "partial", note: "Monthly cadence, manual process" },
+ genericAI: { level: "none", note: "No scheduling or automation" },
+ },
+ {
+ capability: "Agent Plugin Ecosystem",
+ recoup: { level: "full", note: "Install plugins in Claude, Cursor, Codex" },
+ humans: { level: "none", note: "N/A" },
+ agency: { level: "none", note: "N/A" },
+ genericAI: { level: "partial", note: "General tools, no music plugins" },
+ },
+ ] satisfies ComparisonRow[],
+
+ costTitle: "The real cost of alternatives",
+ costDescription:
+ "These aren't hypothetical. They're from real labels who switched to Recoup.",
+
+ costs: [
+ {
+ label: "Creative Director",
+ traditional: "$10,000/mo",
+ recoup: "72-hour campaign delivery",
+ savings: "$10K saved on a single campaign",
+ source: "Fat Beats",
+ },
+ {
+ label: "Content Agency",
+ traditional: "$5,000/mo",
+ recoup: "Same price, 10× the output",
+ savings: "Agency eliminated + new AI artist co-created",
+ source: "Rostrum Records",
+ },
+ {
+ label: "Manual Reporting",
+ traditional: "40+ staff hours/mo",
+ recoup: "Automated, $0 marginal cost",
+ savings: "$3K–$5K/mo in staff time",
+ source: "Parlophone (Warner)",
+ },
+ ] satisfies CostRow[],
+
+ chatgptTitle: "But can't I just use ChatGPT?",
+ chatgptDescription:
+ "ChatGPT can write a marketing plan. Recoup writes one informed by your artist's actual streaming data, audience demographics, playlist history, and competitive landscape.",
+
+ chatgptPoints: [
+ "No access to streaming analytics (Spotify, Apple Music, Chartmetric)",
+ "No playlist intelligence or placement tracking",
+ "No artist context — brand voice, catalog history, audience segments",
+ "No automated workflows — can't schedule reports or content pipelines",
+ "No music industry data models — catalog valuation, royalty estimation",
+ "No plugin ecosystem — can't extend with music-specific tools",
+ ],
+
+ chatgptPunchline:
+ "Generic AI is a blank canvas. Recoup is a music business that already knows your artists.",
+
+ ctaPrimary: { label: "See it in action", href: "/valuation" },
+ ctaSecondary: { label: "View pricing", href: "/pricing" },
+};
diff --git a/lib/nav.ts b/lib/nav.ts
index 956cf3b..0bdef7e 100644
--- a/lib/nav.ts
+++ b/lib/nav.ts
@@ -6,6 +6,7 @@ import { siteConfig } from "@/lib/config";
export const nav: readonly { label: string; href: string; external?: boolean }[] = [
{ label: "Results", href: "/results" },
+ { label: "Compare", href: "/compare" },
{ label: "Pricing", href: "/pricing" },
{ label: "Docs", href: siteConfig.docsUrl, external: true },
{ label: "Blog", href: "/blog" },
@@ -24,6 +25,7 @@ export const footerNav = {
label: "Resources",
items: [
{ label: "Results", href: "/results" },
+ { label: "Compare", href: "/compare" },
{ label: "Blog", href: "/resources" },
{ label: "AI Playbook", href: "/playbook" },
{ label: "ROI Calculator", href: "/calculator" },