import React, { useState, useMemo } from 'react'; import { TrendingUp, DollarSign, FileText, Layers, Users, HelpCircle, CheckCircle, Lock, Sliders, Upload, ArrowRight, ShieldCheck, Briefcase, BarChart3, Info, Sparkles, ChevronRight, Download, UserCheck, RefreshCw, Search, Filter, Tv, Award, AlertCircle, Globe, UserPlus, Loader2, BookOpen, FileCheck } from 'lucide-react'; // Pre-configured mock data for Agents/Catalogs to explore const INITIAL_SUBMISSIONS = [ { id: "CAT-8902", catalogName: "Neon Nights - Synthwave Collection", primaryArtist: "The Retro Vibe, Sunset Rider", tracksCount: 42, distributor: "DistroKid", sharePercent: 100, splitsCount: 2, ltmIncome: 145000, catalogAge: 5, assetTypes: ["Master", "Streaming"], status: "Underwriting", submittedBy: "Marcus Vance", email: "marcus@neonvibe.com", date: "2026-05-20", files: ["reports_2024_2025.csv", "split_sheets_signed.pdf"] }, { id: "CAT-4421", catalogName: "Streamer Beats & Gaming Backgrounds Bundle", primaryArtist: "HyperX Beats, LoFi Gamer", tracksCount: 88, distributor: "UnitedMasters", sharePercent: 100, splitsCount: 1, ltmIncome: 74200, catalogAge: 3, assetTypes: ["Master", "Live Streaming (Twitch/Kick)"], status: "Underwriting", submittedBy: "Toby Henderson", email: "toby@gamerbeats.media", date: "2026-05-23", files: ["twitch_earnings_24m.csv", "distributor_export.xlsx"] }, { id: "CAT-7411", catalogName: "Acoustic Whispers (Publishing Share)", primaryArtist: "Elena Rostova", tracksCount: 18, distributor: "Kobalt", sharePercent: 50, splitsCount: 3, ltmIncome: 38200, catalogAge: 6, assetTypes: ["Publishing", "Mechanicals"], status: "Offer Pending", submittedBy: "Elena Rostova", email: "elena@rostovamusic.co", date: "2026-05-22", files: ["royalties_24months_summary.xlsx"] } ]; // Pre-configured Agent Applications const INITIAL_APPLICATIONS = [ { id: "REP-902", fullName: "Amara Diop", email: "amara.diop@westcoastmusic.sn", whatsapp: "+221 77 123 4567", territories: ["Central Africa", "France"], languages: "French, Wolof, English", networkDescription: "Manage a roster of 14 independent Afrobeat and Afro-house artists in Dakar and Brazzaville.", marketIntel: "Thorough understanding of SACEM, neighboring performance structures, and local DSP distribution bottlenecks.", estimatedDeals: "5-15 catalogs", status: "Pending Review", date: "2026-05-23" }, { id: "REP-412", fullName: "Thiago Silva Santos", email: "thiago@riocreative.br", whatsapp: "+55 21 98765-4321", territories: ["Brazil"], languages: "Portuguese, Spanish, English", networkDescription: "Direct relationships with prominent funk carioca producers and samba publishing administrators.", marketIntel: "Expertise in Abramus/UBC split configurations and international master sync clearances.", estimatedDeals: "15+ catalogs", status: "Approved", date: "2026-05-21" } ]; // Robust Gemini LLM Caller incorporating exponential backoff const callGeminiAPI = async (prompt, systemInstruction = "") => { const apiKey = ""; // Provided automatically in premium preview runtime env const url = `https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash-preview-09-2025:generateContent?key=${apiKey}`; let delay = 1000; for (let attempt = 0; attempt < 5; attempt++) { try { const response = await fetch(url, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ contents: [{ parts: [{ text: prompt }] }], systemInstruction: systemInstruction ? { parts: [{ text: systemInstruction }] } : undefined }) }); if (!response.ok) { throw new Error(`API Connection Status: ${response.status}`); } const data = await response.json(); const textResult = data.candidates?.[0]?.content?.parts?.[0]?.text; if (textResult) return textResult; throw new Error("No response content generated by model."); } catch (error) { if (attempt === 4) { throw new Error(`Underwriting Engine experienced an absolute timeout: ${error.message}`); } await new Promise(resolve => setTimeout(resolve, delay)); delay *= 2; // Exponential Backoff Delays: 1s, 2s, 4s, 8s } } }; export default function App() { // Navigation & Interactive Tabs const [activeTab, setActiveTab] = useState('home'); // 'home', 'how-it-works', 'eligibility', 'get-started', 'trends', 'cases', 'login', 'agent-dashboard', 'join-agent' // Custom Valuation Simulator State const [simulatorLtm, setSimulatorLtm] = useState(150000); // starts at 150k as an elegant mid-range catalog value const [selectedAssetTypes, setSelectedAssetTypes] = useState(['Master', 'Streaming']); const [selectedGenre, setSelectedGenre] = useState('Pop/Hip-Hop'); const [catalogAge, setCatalogAge] = useState(4); // default age in years const [isOtherGenreActive, setIsOtherGenreActive] = useState(false); const [otherGenreSelection, setOtherGenreSelection] = useState('Latin / Reggaeton'); const [newsletterEmail, setNewsletterEmail] = useState(''); // AI Interactive State holders const [aiProspectusLoading, setAiProspectusLoading] = useState(false); const [aiProspectusResult, setAiProspectusResult] = useState(""); const [aiUnderwriterLoading, setAiUnderwriterLoading] = useState(false); const [aiUnderwriterResult, setAiUnderwriterResult] = useState(""); const [aiAgentSourcingLoading, setAiAgentSourcingLoading] = useState(false); const [aiAgentSourcingResult, setAiAgentSourcingResult] = useState(""); // New Lead / Onboarding State (KYC) const [kycStep, setKycStep] = useState(1); const [kycForm, setKycForm] = useState({ fullName: '', email: '', phone: '', companyName: '', catalogName: '', primaryArtists: '', tracksCount: '', catalogAge: '3', distributor: '', sharePercent: '100', splitsCount: '1', ltmIncome: '', rightsTypes: [], uploadedFiles: [], agreeToTerms: false }); // Free Agent Application State const [agentForm, setAgentForm] = useState({ fullName: '', email: '', whatsapp: '', primaryTerritories: [], languagesSpoken: '', networkDescription: '', marketIntelDescription: '', estimatedDeals: '1-5 catalogs', agreeToBrokerCode: false }); const [agentStep, setAgentStep] = useState(1); // 1 = form, 2 = success const [submittedLeads, setSubmittedLeads] = useState(INITIAL_SUBMISSIONS); const [submittedAgents, setSubmittedAgents] = useState(INITIAL_APPLICATIONS); const [showNotification, setShowNotification] = useState(null); // Authentication State for Agent Portal const [username, setUsername] = useState('admin'); const [password, setPassword] = useState('FodasPutas20+'); const [isAuthenticated, setIsAuthenticated] = useState(false); const [loginError, setLoginError] = useState(''); // Agent Dashboard states const [dashboardSearch, setDashboardSearch] = useState(''); const [selectedSubmission, setSelectedSubmission] = useState(null); const [selectedAgentApp, setSelectedAgentApp] = useState(null); const [dashboardFilterStatus, setDashboardFilterStatus] = useState('All'); const [dashboardSubTab, setDashboardSubTab] = useState('catalogs'); // 'catalogs', 'agent-applications' // Trigger temporary notification helper const triggerNotification = (message, type = 'success') => { setShowNotification({ message, type }); setTimeout(() => setShowNotification(null), 4000); }; // Determine if the current catalog is eligible/legitimate based on rules: // "For advance catalog that have 2 years minimum and 10k/years income are legitme" const isSimulatorLegitimate = useMemo(() => { return catalogAge >= 2 && simulatorLtm >= 10000; }, [catalogAge, simulatorLtm]); // Calculate estimated multiplier ranges based on catalog age, asset types, and genre mix (Range: 4x to 11x) const computedValuation = useMemo(() => { let acqMinMult = 4.0; let acqMaxMult = 11.0; let advMinMult = 3.0; let advMaxMult = 7.0; const isPopOrHighValueGenre = [ 'Pop/Hip-Hop', 'Electronic/Dance', 'Latin / Reggaeton', 'Afrobeat', 'R&B / Soul' ].includes(selectedGenre); if (catalogAge <= 4) { // Acquisitions are capped at max 6x acqMinMult = 4.0; acqMaxMult = Math.min(6.0, 3.5 + (catalogAge * 0.65)); // Advances are capped at a conservative 4.5x multiple advMinMult = 3.0; advMaxMult = Math.min(4.5, 2.5 + (catalogAge * 0.5)); } else { // Older than 5 years: multiples for acquisitions starts at 6.0x up to 11.0x maximum acqMinMult = 6.0; let dynamicAcqMax = 8.0; if (selectedAssetTypes.includes('Publishing')) dynamicAcqMax += 1.5; if (selectedAssetTypes.includes('Neighboring Rights')) dynamicAcqMax += 0.5; if (selectedAssetTypes.includes('Live Streaming (Twitch/Kick)')) dynamicAcqMax += 1.0; if (isPopOrHighValueGenre) dynamicAcqMax += 1.0; acqMaxMult = Math.min(11.0, dynamicAcqMax); // Advances starts at 4.5x and cap at 7.0x max LTM for highly mature catalogs advMinMult = 4.5; let dynamicAdvMax = 5.2; if (selectedAssetTypes.includes('Publishing')) dynamicAdvMax += 0.6; if (selectedAssetTypes.includes('Live Streaming (Twitch/Kick)')) dynamicAdvMax += 0.6; if (isPopOrHighValueGenre) dynamicAdvMax += 0.6; advMaxMult = Math.min(7.0, dynamicAdvMax); } const minAcquisition = Math.round(simulatorLtm * acqMinMult); const maxAcquisition = Math.round(simulatorLtm * acqMaxMult); const minAdvance = Math.round(simulatorLtm * advMinMult); const maxAdvance = Math.round(simulatorLtm * advMaxMult); return { acquisitionMin: minAcquisition, acquisitionMax: maxAcquisition, acquisitionMinMult: acqMinMult.toFixed(1), acquisitionMaxMult: acqMaxMult.toFixed(1), advanceMin: minAdvance, advanceMax: maxAdvance, advanceMinMult: advMinMult.toFixed(1), advanceMaxMult: advMaxMult.toFixed(1) }; }, [simulatorLtm, selectedAssetTypes, selectedGenre, catalogAge]); // Dynamic AI Strategic Prospectus via Gemini API (For Creators) const generateAiProspectus = async () => { setAiProspectusLoading(true); setAiProspectusResult(""); const systemPrompt = "You are a world-class Music Catalog Valuation Underwriter and Investment Banker at Luna x Catalog. You specialize in generating classic, executive-level private equity summaries for music assets."; const userPrompt = ` Please write a comprehensive, classic, high-end Prospectus Valuation Analysis for our catalog with these characteristics: - Last Twelve Months (LTM) Net Income: $${simulatorLtm.toLocaleString()} USD - Catalog Age / Longevity: ${catalogAge} Years of active streaming history - Music Genre: ${selectedGenre} - Royalty Assets Included: ${selectedAssetTypes.join(', ')} Format the output with these classic sections using elegant Markdown: 1. Executive Portfolio Overview 2. Strategic Valuation Analysis (incorporating why a catalog of ${catalogAge} years commands a buyout multiple estimation of ${computedValuation.acquisitionMinMult}x - ${computedValuation.acquisitionMaxMult}x and an advance multiple of ${computedValuation.advanceMinMult}x - ${computedValuation.advanceMaxMult}x) 3. Global Market Context (USA, France, Central Africa, Brazil) 4. Targeted Advisory & Optimization Strategy (Consolidating splits, platform expansion advice) `; try { const responseText = await callGeminiAPI(userPrompt, systemPrompt); setAiProspectusResult(responseText); triggerNotification("AI Prospectus generated successfully!", "success"); } catch (err) { setAiProspectusResult(`An issue occurred while calling the Underwriting System: ${err.message}. Please retry.`); triggerNotification("Underwriting system busy. Retrying.", "error"); } finally { setAiProspectusLoading(false); } }; // Dynamic AI Underwriting Analysis for Agency submissions (For Auditing Agents) const generateAgentUnderwriterAnalysis = async (lead) => { setAiUnderwriterLoading(true); setAiUnderwriterResult(""); const systemPrompt = "You are the Head of Risk Management at Luna x Catalog. Your job is to draft formal risk parameters, transaction structures, and investor pitch pitches for music acquisitions."; const userPrompt = ` Please analyze the client catalog submission and compile an internal Underwriting Audit Portfolio: - Reference ID: ${lead.id} - Catalog Name: ${lead.catalogName} - Featured Artist: ${lead.primaryArtist} - Active Longevity: ${lead.catalogAge} Years - Track Count: ${lead.tracksCount} - Distributor Source: ${lead.distributor} - Client Share: ${lead.sharePercent}% - Splits: ${lead.splitsCount} - Sourced LTM Net Earnings: $${lead.ltmIncome.toLocaleString()} - Included Royalty Types: ${lead.assetTypes.join(', ')} Please generate: 1. Institutional Risk Tier rating (Conservative, Balanced, or Aggressive) with justifications. 2. Recommended Recoupable Advance structure (calculating maximum risk limits). 3. A professional outreach pitch template addressed to our 50+ prospective liquidity partners highlighting why this asset fits institutional acquisitions. `; try { const responseText = await callGeminiAPI(userPrompt, systemPrompt); setAiUnderwriterResult(responseText); triggerNotification("Agent Risk Assessment compiled.", "success"); } catch (err) { setAiUnderwriterResult(`Underwriting system timed out: ${err.message}`); triggerNotification("Unable to process risk analysis.", "error"); } finally { setAiUnderwriterLoading(false); } }; // AI Sourcing Strategy Blueprint (For Free Agents applying) const generateAgentSourcingStrategy = async () => { setAiAgentSourcingLoading(true); setAiAgentSourcingResult(""); const systemPrompt = "You are the VP of Global Sourcing at Luna x Catalog. You specialize in training decentralized scouts and brokers on how to target indie creators starting at $10k/yearly."; const userPrompt = ` Please write a high-fidelity, actionable Sourcing Playbook for a decentralized broker operating with these conditions: - Preferred Territories: ${agentForm.primaryTerritories.join(', ')} - Spoken Languages: ${agentForm.languagesSpoken} - Targeted Catalog Target: Independent Artists & Labels starting at $10k/yearly LTM Please structure your playbook using Montserrat-aligned Markdown: 1. Regional Scouting Strategy (Localizing networks in ${agentForm.primaryTerritories.join(', ')}) 2. Local Licensing Rules (How collective management societies such as SACEM, soundExchange, or Brazil's Abramus/UBC operate) 3. Direct Pitch Script & Communication Strategy to target Indie Creators `; try { const responseText = await callGeminiAPI(userPrompt, systemPrompt); setAiAgentSourcingResult(responseText); triggerNotification("AI Sourcing strategy formulated.", "success"); } catch (err) { setAiAgentSourcingResult(`Failed to communicate with Risk Sourcing Engine: ${err.message}`); } finally { setAiAgentSourcingLoading(false); } }; // Handle Multi-step KYC Submission const handleKycSubmit = (e) => { e.preventDefault(); if (kycStep < 3) { setKycStep(kycStep + 1); return; } // Process ultimate submission const newLead = { id: `CAT-${Math.floor(1000 + Math.random() * 9000)}`, catalogName: kycForm.catalogName || "Untitled Catalog", primaryArtist: kycForm.primaryArtists || "Unknown Artist", tracksCount: parseInt(kycForm.tracksCount) || 1, distributor: kycForm.distributor || "Direct", sharePercent: parseInt(kycForm.sharePercent) || 100, splitsCount: parseInt(kycForm.splitsCount) || 1, ltmIncome: parseFloat(kycForm.ltmIncome) || 0, catalogAge: parseInt(kycForm.catalogAge) || 3, assetTypes: kycForm.rightsTypes.length > 0 ? kycForm.rightsTypes : ["Master", "Streaming"], status: "Received", submittedBy: kycForm.fullName || "Anonymous Creator", email: kycForm.email, date: new Date().toISOString().split('T')[0], files: kycForm.uploadedFiles.length > 0 ? kycForm.uploadedFiles : ["automated_generation.csv"] }; setSubmittedLeads([newLead, ...submittedLeads]); setKycStep(4); // Show success step triggerNotification("Your catalog assessment & KYC has been safely submitted!", "success"); }; // Handle Agent Partner Onboarding Submission const handleAgentSubmit = (e) => { e.preventDefault(); const newAgent = { id: `REP-${Math.floor(100 + Math.random() * 900)}`, fullName: agentForm.fullName, email: agentForm.email, whatsapp: agentForm.whatsapp, territories: agentForm.primaryTerritories.length > 0 ? agentForm.primaryTerritories : ["Global / Other"], languages: agentForm.languagesSpoken || "English", networkDescription: agentForm.networkDescription, marketIntel: agentForm.marketIntelDescription, estimatedDeals: agentForm.estimatedDeals, status: "Pending Review", date: new Date().toISOString().split('T')[0] }; setSubmittedAgents([newAgent, ...submittedAgents]); setAgentStep(2); triggerNotification("Broker Application logged. Our executive office will connect shortly.", "success"); }; const handleFileUploadMock = (e) => { const file = e.target.files[0]; if (file) { setKycForm(prev => ({ ...prev, uploadedFiles: [...prev.uploadedFiles, file.name] })); triggerNotification(`Successfully attached: ${file.name}`, "info"); } }; // Auth Handler const handleLogin = (e) => { e.preventDefault(); if (username === 'admin' && password === 'FodasPutas20+') { setIsAuthenticated(true); setActiveTab('agent-dashboard'); setLoginError(''); triggerNotification("Auditor Access Granted. Welcome back, Agent.", "success"); } else { setLoginError("Invalid agency credentials. Please check details."); } }; const toggleRightsSelection = (type) => { setKycForm(prev => { const rights = prev.rightsTypes.includes(type) ? prev.rightsTypes.filter(t => t !== type) : [...prev.rightsTypes, type]; return { ...prev, rightsTypes: rights }; }); }; const toggleTerritorySelection = (territory) => { setAgentForm(prev => { const list = prev.primaryTerritories.includes(territory) ? prev.primaryTerritories.filter(t => t !== territory) : [...prev.primaryTerritories, territory]; return { ...prev, primaryTerritories: list }; }); }; const handleNewsletterSubmit = (e) => { e.preventDefault(); if (newsletterEmail) { triggerNotification("Successfully subscribed to L'Una Music Group Newsletter!", "success"); setNewsletterEmail(''); } }; return (
{/* Montserrat Injection Stylesheet */} {/* Toast Notification Container */} {showNotification && (

{showNotification.message}

)} {/* Premium Navigation */}
setActiveTab('home')}>
LUNA X

C A T A L O G

{/* Nav Items */} {/* Action Buttons */}
{/* Main Container */}
{/* TAB 1: HERO & HOME PAGE */} {activeTab === 'home' && (
{/* Hero Section */}
Licensed Capital Agents & Brokers

Premium Advances & Complete Catalog Acquisitions

As highly experienced market agents and brokers, Luna x Catalog secures elite capital advances and direct acquisition pipelines for Master Royalties, Publishing Shares, and Live Streaming Rights. With over $25M USD closed in the last 3 years, our multilingual teams speak over 5 languages, advising portfolios across France, the USA, Central Africa, Brazil, and more. We structure liquidity for both major artists and independent creator catalogs starting at $10k/yearly.

{/* Combined Onboarding Router Section */}
{/* Creator Path Card */}
Creators & Labels

Apply for Capital

For artists, label owners, and copyright holders looking to estimate durability metrics, submit statements, and trigger direct buyout or advance structures.

{/* Broker Path Card */}
Scouts & Brokers

Become a Free Agent

For experienced scouts, managers, and catalog brokers wishing to introduce clients, evaluate local networks, and earn premium transaction shares.

{/* Over 50 partners Trust Metric bar - UPDATED WITH LATEST STATS */}

Our Track Record & Global Representation

$25M+ USD Closed (Last 3 Yrs)
GLOBAL FR, USA, Central Africa, BR
5+ LANGUAGES Fluent Client Advisory
$10K+ Indie Catalogs Accepted
{/* Interactive Valuation Calculator Widget */}
Instant Simulator

Estimate Your Catalog's Durability

Utilize our weighted variables to gauge how direct institutional acquirers structure cash-flow multipliers against your historical LTM revenue.

{/* Inputs */}
{/* LTM Slider */}
${simulatorLtm.toLocaleString()}
setSimulatorLtm(Number(e.target.value))} className="w-full h-1 bg-neutral-800 rounded appearance-none cursor-pointer accent-orange-500" />
$10,000 $1,000,000 $2,000,000+
{/* Catalog Age (Longevity Selector) - MINIMUM 2 YEARS */}
{catalogAge === 5 ? '5+ Years' : `${catalogAge} Years`}
{[2, 3, 4, 5].map((year) => { const isSelected = catalogAge === year; return ( ); })}
* Catalogs under 4 years are capped at a maximum buyout multiple of 6.0x. For mature catalogs (5+ years), multiples start at a baseline of 6.0x and scale up to 11.0x.
{/* Rights Checkboxes */}
{['Master', 'Publishing', 'Streaming', 'Neighboring Rights', 'Live Streaming (Twitch/Kick)'].map((asset) => { const isSelected = selectedAssetTypes.includes(asset); return ( ); })}
{/* Genre Selector with "Other" dropdown */}
{['Pop/Hip-Hop', 'Electronic/Dance', 'Rock/Alternative', 'Jazz/Classical', 'Lofi/Ambient'].map((g) => ( ))}
{/* Interactive Other Genre Selection Dropdown */} {isOtherGenreActive && (
)}
{/* Valuation Dashboard Display */}

Underwriting Performance

SCALE 4x - 11x
{/* Real-time Legitimacy Badge (Based on rules: min 2 years & 10k LTM) */}
{isSimulatorLegitimate ? (
✓ Validated Legitimacy Status

Meets the 2-Year minimum age & $10k/yr income standard for fast advance routing.

) : (
Asset Underqualified

Requires a minimum of 2 catalog years and $10,000 USD LTM income to claim upfront advance liquidity.

)}
{/* Differentiated Calculations display for Acquisition vs Advance */}

Recoupable Funding Advance

{computedValuation.advanceMinMult}x - {computedValuation.advanceMaxMult}x LTM

${(computedValuation.advanceMin).toLocaleString()} to ${(computedValuation.advanceMax).toLocaleString()}

Creators retain ultimate catalog copyright ownership.

Premium Buyout Assessment

{computedValuation.acquisitionMinMult}x - {computedValuation.acquisitionMaxMult}x LTM

${(computedValuation.acquisitionMin).toLocaleString()} to ${(computedValuation.acquisitionMax).toLocaleString()}

Perpetual transfer of rights streams at prime multiples.
{/* ✨ NEW FEATURE: Gemini API Creator Prospectus */}

Luna x AI Portfolio Strategist

Generate an executive Private Equity Prospectus specifically tailored to your current catalog configuration.

{aiProspectusResult && (
{aiProspectusResult}
)}
{/* Services Overview Grid */}
Our Royalties Spectrum

Consolidated Streaming & Rights Assets

We secure optimal capital structures against all intellectual property royalty components.

{/* Streaming Master */}

Master & Streaming

Advances secured against Spotify, Apple Music, and direct digital distributor streams. Retain ownership or execute full buyouts.

{/* Publishing Share */}

Music Publishing

Acquisitions and funding on writer's share, publisher's share, mechanical royalties, and sync stream incomes managed by global PROs.

{/* Neighboring Rights */}

Neighboring Rights

Liquid cash flows for master performance rights collected through SoundExchange, PPL, GVL, and other collective organizations.

{/* Live Streaming & Twitch */}

Live Streaming & Twitch

Valuations and advances secured from background sync music, broadcaster licenses, content creator channels, Twitch, and TikTok.

)} {/* TAB 2: HOW IT WORKS */} {activeTab === 'how-it-works' && (
Interactive Guide (Coming Soon)

The Catalog Brokerage Flow

Secure upfront institutional capital using a structured, clear timeline.

Step 01

Onboard & Submit KYC Details

Provide credentials for your distributor/PRO, song splits, share percentages, and upload your last 24 months of earnings reports in CSV or Excel format.

Step 02

Multi-Partner Underwriting

We clean, verify, and structure your statements. Our automated platform presents anonymous catalog performance metrics to our 50+ prospective liquidity partners.

Step 03

Compare Liquidity Offers

We deliver the highest premium multiple offers generated by our ecosystem, showing fully transparent terms, schedules, and advance structures.

Step 04

Payout within 7 Days

Upon dynamic digital execution, premium capital routing settles directly into your designated accounts.

Ready to begin?

Attach your statement history to begin our automated analytics pipeline.

)} {/* TAB 3: ELIGIBILITY ("LEGIBILIDADE") */} {activeTab === 'eligibility' && (
Legibilidade criteria

Who Qualifies for Catalog Funding?

Review baseline operational metrics required for institutional capital placement.

{/* Special Highlight on 2-Year & 10k/year Legitimacy Rule */}

Official Legitimacy Standard

As experienced agents and brokers, we support both major rosters and indie catalogs starting at **$10,000 USD/year** in LTM income, operating globally with strong transaction expertise across France, USA, Central Africa, and Brazil.

1

Earnings History

A minimum of **12 to 24 months of clear digital statement history** with cumulative LTM earnings exceeding **$10,000 USD** across streaming platforms. We specialize in launching independent assets with steady streaming patterns.

2

Distributors Accepted

Valid statements from DistroKid, TuneCore, FUGA, Believe, AWAL, UnitedMasters, Stem, Symphonic, and direct publisher administration streams are accepted.

3

Clear Rights Ownership

Legitimate title or contract validation ensuring authority to split or sell the respective Masters, Streaming, or Publishing shares.

4

Historical Consistency

Stable passive consumption patterns across Spotify editorial playlisting, search, sync placements, and streaming broadcasts.

Unsure of eligibility status?

Our onboarding teams review and verify all data structures individually.

)} {/* TAB 4: GET STARTED (KYC & ONBOARDING FORM FOR LABELS/ARTISTS/OWNERS) */} {activeTab === 'get-started' && (
{/* Steps Visual Indicator */}
Catalog Owner & Label Onboarding
Step {kycStep} of 3
{/* FORM CONTAINER */}
{kycStep < 4 && (
{/* STEP 1: Contacts & Basic Identity */} {kycStep === 1 && (

Represented Entity Profile

Provide official details to secure and process valuation credentials.

setKycForm({...kycForm, fullName: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, email: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, phone: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, companyName: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
)} {/* STEP 2: Catalog Metadata Details */} {kycStep === 2 && (

Provide Catalog Metrics

Structure key variables corresponding to specific rights assets.

setKycForm({...kycForm, catalogName: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, primaryArtists: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, distributor: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, tracksCount: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, sharePercent: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setKycForm({...kycForm, splitsCount: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
)} {/* STEP 3: Income, Reporting Documents Upload */} {kycStep === 3 && (

Income History & Statements

Provide official statement history to run historical analytics metrics.

$ setKycForm({...kycForm, ltmIncome: e.target.value})} className="w-full bg-neutral-955 border border-neutral-900 rounded-sm pl-8 pr-4 py-3.5 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
{/* Interactive Rights Selector */}
{[ 'Master Recording', 'Music Publishing Share', 'Streaming Performance', 'Neighboring Rights / SoundExchange', 'Live Streaming & Creator Royalties (Twitch, Kick, TikTok, etc.)' ].map((type) => { const isChosen = kycForm.rightsTypes.includes(type); return ( ); })}
{/* File Uploader */}

Drag & drop or click to select file

Reports are securely parsed and encrypted in transit.

{/* List Uploaded Files */} {kycForm.uploadedFiles.length > 0 && (

Prepared Reports:

{kycForm.uploadedFiles.map((file, idx) => (
{file}
Ready
))}
)}
setKycForm({...kycForm, agreeToTerms: e.target.checked})} className="mt-1 accent-amber-500" />
)} {/* NAVIGATION CONTROLS */}
{kycStep > 1 ? ( ) :
}
)} {/* SUCCESS STATE */} {kycStep === 4 && (

KYC Submitted Successfully

Our intake agents are working to compile reports for 50+ prospective institutional buyers. We will follow up via email at {kycForm.email} within 24 hours.

Reference ID CAT-{Math.floor(1000 + Math.random() * 9000)}
Underwriting Assignment Automated / Queue
)}
)} {/* TAB 5: TRENDS */} {activeTab === 'trends' && (
Industry Valuations

Music Catalog Market Trends

Monitor modern multiple modifications across diverse creator rights classes.

Master Record Streaming

6.5x – 9.0x

• Fast liquid acquisitions for catalogs >2 years

• Premium valuations on platform editorial playlisting

Music Publishing Shares

9.5x – 14.0x

• High durability on mechanical performance flows

• Classic premium multiple valuations

Neighboring Performance Shares

5.0x – 7.5x

• Secured collections via SoundExchange

• Constant expansion driven by licensing adjustments

{/* Trending Insights Feed */}

Brokerage Insights

May 2026 Update

Live Stream Assets Show Significant Valuation Growth

Background music sync and creator portfolios are showing superior consistency profiles. Acquisition pools are prioritizing creator-owned catalogs.

April 2026 Update

Royalty Split Consolidation Prior to Underwriting

Consolidating split shares ahead of time increases transactional values significantly. Larger packages command modern buyout premiums.

)} {/* TAB 6: CASES - EXTENDED WITH HIGH-PROFILE INTERNATIONAL & LOCAL TRANSACTIONS */} {activeTab === 'cases' && (
Proven Liquidity Cases

Successful Catalog Transactions

Explore actual master, publishing, and live streaming rights transactions executed globally by our agents and brokers. Exact financial metrics are kept strictly confidential under partner non-disclosure agreements.

{/* Case 1: Mohombi (France, Sweden, Congo) */}
FRANCE / SWEDEN / CONGO

Mohombi

Master Recording & Publishing

Sourced and secured a global master and music publishing advance for international superstar Mohombi. Consolidated complex cross-border royalty streams across multiple societies to deliver accelerated upfront capital.

Territories Europe & Central Africa
Structure Advance
{/* Case 2: Klem Shen (France) */}
FRANCE

Klem Shen

Master Recording Rights on Streaming

Structured a custom non-recourse streaming royalty advance for French hip-hop pioneer Klem Shen. Calculated against consistent back-catalog digital streaming performance metrics, providing substantial liquidity while preserving 100% catalog copyright ownership.

Territories France
Structure Advance
{/* Case 3: Vessau Records (Central Africa) */}
CENTRAL AFRICA

Vessau Records

Master Catalog

Underwrote the master royalty portfolio for premier Central African master catalog Vessau Records. Structured an administrative advance securing immediate operational capital against regional streaming nodes to support strategic release slates.

Territories Congo / Central Africa
Structure Advance
{/* Case 4: Renaissance Records (USA) */}
UNITED STATES

Renaissance Records

Classic Rock, Jazz, Blues & Motown

Brokered the strategic royalty advance of a classic catalog containing iconic Rock, Jazz, Blues, and Motown recordings, providing rapid capital deployment for long-tail active portfolios.

Territories North America
Structure Advance
{/* Case 5: Trz (France) */}
FRANCE

Trz

Hip-Hop, Rap & Pop Master Rights for Streaming

Sourced and structured a streaming royalty advance against hip-hop, rap and pop master rights in France for innovator Trz, securing direct routes into active global digital streaming distribution networks.

Territories France
Structure Advance
)} {/* NEW TAB: JOIN AS FREE AGENT FORM WITH AI Sourcing Strategy */} {activeTab === 'join-agent' && (
{/* ... Agent Partner Program header ... */}
Partner Program

Become a Free Agent / Broker

Luna x Catalog operates worldwide. Apply to join our decentralized broker framework and earn premium advisory payouts on closed acquisition deals.

{agentStep === 1 && (

1. Professional Credentials

Tell us who you are and where you manage direct industry contacts.

setAgentForm({...agentForm, fullName: e.target.value})} className="w-full bg-neutral-950 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all font-semibold" />
setAgentForm({...agentForm, email: e.target.value})} className="w-full bg-neutral-950 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all font-semibold" />
setAgentForm({...agentForm, whatsapp: e.target.value})} className="w-full bg-neutral-950 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
setAgentForm({...agentForm, languagesSpoken: e.target.value})} className="w-full bg-neutral-950 border border-neutral-900 rounded-sm px-4 py-3 text-xs text-white focus:outline-none focus:border-amber-500 transition-all" />
{['France', 'USA', 'Central Africa', 'Brazil', 'Other'].map((loc) => { const isSelected = agentForm.primaryTerritories.includes(loc); return ( ); })}

2. Network & Intel Evaluation

Your ability to source legitimate music rights catalog records relies on structural network depth.