test valuation


import { useState } from "react";
import { BarChart, Bar, XAxis, YAxis, CartesianGrid, Tooltip, ResponsiveContainer, Cell, LabelList } from "recharts";

const revenue = {
"2025 Actual": 312226,
"2026 Conservative": 469008,
"2026 Base": 503520,
"2026 Optimistic": 537076,
"2027 Conservative": 585736,
"2027 Base": 642690,
"2027 Optimistic": 704085,
};

const SDE_MARGIN = 0.70;

const multiples = [
{ label: "2.0x", value: 2.0, desc: "Distressed / declining channel" },
{ label: "2.5x", value: 2.5, desc: "Stable, single-operator" },
{ label: "3.0x", value: 3.0, desc: "Solid growth, good niche" },
{ label: "3.5x", value: 3.5, desc: "Strong growth + brand equity" },
{ label: "4.0x", value: 4.0, desc: "Premium, high-growth channel" },
{ label: "4.5x", value: 4.5, desc: "Exceptional / strategic buyer" },
];

const fmt = (v) => {
if (v >= 1000000) return `$${(v / 1000000).toFixed(2)}M`;
return `$${(v / 1000).toFixed(0)}K`;
};

export default function ChannelValuation() {
const [selectedYear, setSelectedYear] = useState("2026 Base");
const [selectedMultiple, setSelectedMultiple] = useState(3.5);

const rev = revenue[selectedYear];
const sde = rev * SDE_MARGIN;
const valuation = sde * selectedMultiple;

const tableData = multiples.map(m => ({
multiple: m.label,
multipleVal: m.value,
valuation: sde * m.value,
desc: m.desc,
isSelected: m.value === selectedMultiple,
}));

const scenarioChart = Object.entries(revenue).map(([key, rev]) => ({
name: key.replace("2026 ", "'26 ").replace("2027 ", "'27 ").replace("2025 ", "'25 "),
sde: rev * SDE_MARGIN,
valuation: rev * SDE_MARGIN * selectedMultiple,
fullName: key,
}));

return (

{/* Header */}

Channel Valuation

Based on SDE at 70% of Revenue × Market Multiple

{/* Big valuation number */}

Estimated Channel Value


{fmt(valuation)}

{selectedYear} Revenue {fmt(rev)} → SDE {fmt(sde)} × {selectedMultiple}x

{/* Controls row */}

{/* Revenue scenario selector */}

Revenue Scenario

{Object.entries(revenue).map(([key, val]) => (

))}

{/* Multiple selector */}

SDE Multiple

{multiples.map(m => (

))}

{/* Valuation matrix chart */}

Valuation by Scenario at {selectedMultiple}x Multiple




fmt(v)} axisLine={false} tickLine={false} />

[fmt(v), "Valuation"]}
contentStyle={{ background: "#1e1b2e", border: "1px solid rgba(255,255,255,0.1)", borderRadius: 10 }}
labelStyle={{ color: "#94a3b8" }}
itemStyle={{ color: "#fff" }}
/>

{scenarioChart.map((entry, i) => (

))}
fmt(v)} style={{ fill: "#94a3b8", fontSize: 11 }} />


{/* Valuation range summary table */}

Full Valuation Range

{Object.entries(revenue).map(([key, rev], i) => {
const s = rev * 0.70;
const isSelected = key === selectedYear;
return (

);
})}

Scenario Revenue SDE (70%) @ 2.5x @ 3.0x @ 3.5x @ 4.0x
{key} {fmt(rev)} {fmt(s)} {fmt(s*2.5)} {fmt(s*3.0)} {fmt(s*3.5)} {fmt(s*4.0)}

{/* Notes */}

Valuation Notes

YouTube channels typically trade at 2.5x–4.0x annual SDE.
Key factors pushing toward premium multiples: strong growth trajectory (+28% in '25, 60%+ projected '26), rising RPM, loyal returning viewers, and diversified revenue (ads + Premium).
Factors that may discount: creator dependency, single-platform risk, and whether revenue is tied to trending vs. evergreen content.
At the 2026 base case with a 3.5x multiple, the channel values at approximately $1.23M.
With trailing 2025 actuals at 3.5x, the floor valuation today is roughly $765K.

);
}