lakshmisravya123
Major upgrade: comprehensive startup validation with market sizing, SWOT, competitor analysis, revenue models, go-to-market strategy
6fcad97
import React, { useState } from 'react';
function scoreClass(s) {
if (s >= 70) return 'good';
if (s >= 40) return 'ok';
return 'bad';
}
function trendClass(t) {
if (t === 'growing') return 'good';
if (t === 'stable') return 'ok';
return 'bad';
}
function severityClass(s) {
if (s === 'critical') return 'critical';
if (s === 'high') return 'high';
if (s === 'medium') return 'medium';
return 'low';
}
function threatClass(t) {
if (t === 'high') return 'high';
if (t === 'medium') return 'medium';
return 'low';
}
function ScoreRing({ score }) {
const radius = 54;
const circumference = 2 * Math.PI * radius;
const offset = circumference - (score / 100) * circumference;
const cls = scoreClass(score);
return (
<div className="score-ring-container">
<svg width="140" height="140" viewBox="0 0 140 140">
<circle cx="70" cy="70" r={radius} fill="none" stroke="var(--border)" strokeWidth="10" />
<circle cx="70" cy="70" r={radius} fill="none" stroke={cls === 'good' ? 'var(--success)' : cls === 'ok' ? 'var(--warning)' : 'var(--danger)'}
strokeWidth="10" strokeDasharray={circumference} strokeDashoffset={offset}
strokeLinecap="round" transform="rotate(-90 70 70)" style={{ transition: 'stroke-dashoffset 1s ease' }} />
</svg>
<div className={`score-ring-value ${cls}`}>{score}</div>
</div>
);
}
function BarChart({ items, colorKey }) {
const maxVal = Math.max(...items.map(i => i.value), 1);
return (
<div className="bar-chart">
{items.map((item, i) => (
<div key={i} className="bar-row">
<div className="bar-label">{item.label}</div>
<div className="bar-track">
<div className={`bar-fill ${colorKey || ''}`} style={{ width: `${(item.value / maxVal) * 100}%` }} />
</div>
<div className="bar-value">{item.display}</div>
</div>
))}
</div>
);
}
function SectionNav({ sections, active, onSelect }) {
return (
<div className="section-nav">
{sections.map((s) => (
<button key={s.id} className={`section-nav-btn ${active === s.id ? 'active' : ''}`} onClick={() => onSelect(s.id)}>
<span className="nav-icon">{s.icon}</span>
<span className="nav-label">{s.label}</span>
</button>
))}
</div>
);
}
const sections = [
{ id: 'overview', icon: '\u{1F3AF}', label: 'Overview' },
{ id: 'market', icon: '\u{1F4CA}', label: 'Market' },
{ id: 'competitors', icon: '\u{2694}\u{FE0F}', label: 'Competition' },
{ id: 'revenue', icon: '\u{1F4B0}', label: 'Revenue' },
{ id: 'swot', icon: '\u{1F9E9}', label: 'SWOT' },
{ id: 'gtm', icon: '\u{1F680}', label: 'Go-to-Market' },
{ id: 'funding', icon: '\u{1F3E6}', label: 'Funding' },
{ id: 'feasibility', icon: '\u{1F527}', label: 'Feasibility' },
{ id: 'risks', icon: '\u{26A0}\u{FE0F}', label: 'Risks' },
{ id: 'pivot', icon: '\u{1F504}', label: 'Pivots' },
{ id: 'plan', icon: '\u{1F4C5}', label: '90-Day Plan' },
{ id: 'pitch', icon: '\u{1F4DD}', label: 'Pitch Deck' },
];
export default function Results({ data, onReset }) {
const a = data.analysis;
const [activeSection, setActiveSection] = useState('overview');
const safeArray = (val) => Array.isArray(val) ? val : [];
return (
<div className="results">
<SectionNav sections={sections} active={activeSection} onSelect={setActiveSection} />
{/* === OVERVIEW === */}
{activeSection === 'overview' && (
<>
<div className="verdict-card">
<div className="idea-name">{a.ideaName}</div>
<div className="one-liner">{a.oneLiner}</div>
<ScoreRing score={a.overallScore} />
<div className="score-label">Viability Score</div>
<div className={`verdict-badge ${a.verdict}`}>{(a.verdict || '').replace(/_/g, ' ')}</div>
<p className="verdict-explain">{a.verdictExplanation}</p>
</div>
{a.similarSuccesses && (
<div className="card">
<h3>{'\u{1F3C6}'} Similar Success Stories</h3>
<div className="success-grid">
{safeArray(a.similarSuccesses).map((s, i) => (
<div key={i} className="success-item">
<div className="success-company">{s.company}</div>
<div className="success-detail"><strong>Similarity:</strong> {s.similarity}</div>
<div className="success-detail"><strong>Outcome:</strong> {s.outcome}</div>
<div className="success-lesson">{'\u{1F4A1}'} {s.lessonToApply}</div>
</div>
))}
</div>
</div>
)}
</>
)}
{/* === MARKET SIZING === */}
{activeSection === 'market' && a.marketSizing && (
<>
<div className="card">
<h3>{'\u{1F4CA}'} TAM / SAM / SOM Market Sizing</h3>
<div className="market-funnel">
<div className="funnel-level tam">
<div className="funnel-header">
<span className="funnel-label">TAM</span>
<span className="funnel-value">{a.marketSizing.tam}</span>
</div>
<div className="funnel-desc">{a.marketSizing.tamReasoning}</div>
</div>
<div className="funnel-level sam">
<div className="funnel-header">
<span className="funnel-label">SAM</span>
<span className="funnel-value">{a.marketSizing.sam}</span>
</div>
<div className="funnel-desc">{a.marketSizing.samReasoning}</div>
</div>
<div className="funnel-level som">
<div className="funnel-header">
<span className="funnel-label">SOM</span>
<span className="funnel-value">{a.marketSizing.som}</span>
</div>
<div className="funnel-desc">{a.marketSizing.somReasoning}</div>
</div>
</div>
</div>
<div className="card">
<h3>{'\u{1F4C8}'} Market Dynamics</h3>
<div className="stat-grid">
<div className="stat">
<div className="stat-label">Growth Rate (CAGR)</div>
<div className="stat-value accent">{a.marketSizing.marketGrowthRate}</div>
</div>
<div className="stat">
<div className="stat-label">Market Trend</div>
<div className={`stat-value trend-${trendClass(a.marketSizing.marketTrend)}`}>{a.marketSizing.marketTrend}</div>
</div>
<div className="stat">
<div className="stat-label">Timing</div>
<div className="stat-value">{a.marketSizing.timing}</div>
</div>
<div className="stat">
<div className="stat-label">Timing Analysis</div>
<div className="stat-value sm">{a.marketSizing.timingNote}</div>
</div>
</div>
</div>
</>
)}
{/* === COMPETITOR ANALYSIS === */}
{activeSection === 'competitors' && a.competitorAnalysis && (
<>
<div className="card">
<h3>{'\u{2694}\u{FE0F}'} Direct Competitors</h3>
<div className="competitor-grid">
{safeArray(a.competitorAnalysis.directCompetitors).map((c, i) => (
<div key={i} className="competitor-card">
<div className="comp-header">
<span className="comp-name">{c.name}</span>
<span className="comp-funding">{c.funding}</span>
</div>
<div className="comp-row"><span className="comp-label">Strength</span><span>{c.strength}</span></div>
<div className="comp-row"><span className="comp-label">Weakness</span><span>{c.weakness}</span></div>
<div className="comp-row"><span className="comp-label">Market Share</span><span>{c.marketShare}</span></div>
</div>
))}
</div>
</div>
<div className="card">
<h3>{'\u{1F310}'} Indirect Competitors</h3>
{safeArray(a.competitorAnalysis.indirectCompetitors).map((c, i) => (
<div key={i} className="indirect-comp">
<div className="ic-header">
<span className="ic-name">{c.name}</span>
<span className={`threat-badge ${threatClass(c.threat)}`}>{c.threat} threat</span>
</div>
<div className="ic-detail">{c.howTheyCompete}</div>
</div>
))}
</div>
<div className="card">
<h3>{'\u{1F440}'} Potential Future Competitors</h3>
{safeArray(a.competitorAnalysis.potentialCompetitors).map((c, i) => (
<div key={i} className="indirect-comp">
<div className="ic-header">
<span className="ic-name">{c.name}</span>
<span className={`threat-badge ${threatClass(c.likelihood)}`}>{c.likelihood} likelihood</span>
</div>
<div className="ic-detail">Possible entry: {c.timeframe}</div>
</div>
))}
</div>
<div className="card">
<h3>{'\u{1F6E1}\u{FE0F}'} Your Competitive Edge</h3>
<div className="stat-grid">
<div className="stat full-width">
<div className="stat-label">Competitive Advantage</div>
<div className="stat-value sm">{a.competitorAnalysis.competitiveAdvantage}</div>
</div>
<div className="stat">
<div className="stat-label">Moat Possibility</div>
<div className="stat-value">{a.competitorAnalysis.moatPossibility}</div>
</div>
<div className="stat">
<div className="stat-label">Moat Strategy</div>
<div className="stat-value sm">{a.competitorAnalysis.moatStrategy}</div>
</div>
</div>
</div>
</>
)}
{/* === REVENUE MODEL === */}
{activeSection === 'revenue' && a.revenueModel && (
<>
<div className="card">
<h3>{'\u{1F4B0}'} Revenue Projections</h3>
<div className="revenue-bars">
{a.revenueModel.projectedRevenue && (
<div className="projection-grid">
<div className="projection-item y1">
<div className="proj-year">Year 1</div>
<div className="proj-value">{a.revenueModel.projectedRevenue.year1}</div>
</div>
<div className="projection-item y2">
<div className="proj-year">Year 2</div>
<div className="proj-value">{a.revenueModel.projectedRevenue.year2}</div>
</div>
<div className="projection-item y3">
<div className="proj-year">Year 3</div>
<div className="proj-value">{a.revenueModel.projectedRevenue.year3}</div>
</div>
</div>
)}
</div>
</div>
<div className="card">
<h3>{'\u{1F4B5}'} Business Model & Pricing</h3>
<div className="stat-grid">
<div className="stat">
<div className="stat-label">Primary Model</div>
<div className="stat-value accent">{a.revenueModel.primaryModel}</div>
</div>
<div className="stat">
<div className="stat-label">Break-even Timeline</div>
<div className="stat-value">{a.revenueModel.breakEvenTimeline}</div>
</div>
<div className="stat full-width">
<div className="stat-label">Pricing Strategy</div>
<div className="stat-value sm">{a.revenueModel.pricingStrategy}</div>
</div>
</div>
</div>
{a.revenueModel.unitEconomics && (
<div className="card">
<h3>{'\u{1F4CA}'} Unit Economics</h3>
<div className="stat-grid three">
<div className="stat highlight-green">
<div className="stat-label">LTV</div>
<div className="stat-value">{a.revenueModel.unitEconomics.ltv}</div>
</div>
<div className="stat highlight-amber">
<div className="stat-label">CAC</div>
<div className="stat-value">{a.revenueModel.unitEconomics.cac}</div>
</div>
<div className="stat highlight-purple">
<div className="stat-label">LTV:CAC Ratio</div>
<div className="stat-value">{a.revenueModel.unitEconomics.ltvCacRatio}</div>
</div>
<div className="stat">
<div className="stat-label">Payback Period</div>
<div className="stat-value">{a.revenueModel.unitEconomics.paybackPeriod}</div>
</div>
<div className="stat">
<div className="stat-label">Gross Margin</div>
<div className="stat-value">{a.revenueModel.unitEconomics.grossMargin}</div>
</div>
</div>
</div>
)}
</>
)}
{/* === SWOT ANALYSIS === */}
{activeSection === 'swot' && a.swotAnalysis && (
<div className="card swot-card">
<h3>{'\u{1F9E9}'} SWOT Analysis</h3>
<div className="swot-grid">
<div className="swot-box strengths">
<div className="swot-title">{'\u{1F4AA}'} Strengths</div>
<ul>{safeArray(a.swotAnalysis.strengths).map((s, i) => <li key={i}>{s}</li>)}</ul>
</div>
<div className="swot-box weaknesses">
<div className="swot-title">{'\u{26A0}\u{FE0F}'} Weaknesses</div>
<ul>{safeArray(a.swotAnalysis.weaknesses).map((w, i) => <li key={i}>{w}</li>)}</ul>
</div>
<div className="swot-box opportunities">
<div className="swot-title">{'\u{1F31F}'} Opportunities</div>
<ul>{safeArray(a.swotAnalysis.opportunities).map((o, i) => <li key={i}>{o}</li>)}</ul>
</div>
<div className="swot-box threats">
<div className="swot-title">{'\u{1F525}'} Threats</div>
<ul>{safeArray(a.swotAnalysis.threats).map((t, i) => <li key={i}>{t}</li>)}</ul>
</div>
</div>
</div>
)}
{/* === GO TO MARKET === */}
{activeSection === 'gtm' && a.goToMarket && (
<>
<div className="card">
<h3>{'\u{1F680}'} Go-to-Market Strategy</h3>
<div className="gtm-timeline">
{['phase1', 'phase2', 'phase3'].map((phase, i) => {
const p = a.goToMarket[phase];
if (!p) return null;
return (
<div key={i} className={`gtm-phase phase-${i + 1}`}>
<div className="phase-marker">{i + 1}</div>
<div className="phase-content">
<div className="phase-name">{p.name}</div>
<div className="phase-strategy">{p.strategy}</div>
<div className="phase-meta">
<span className="phase-channels">{'\u{1F4E2}'} {safeArray(p.channels).join(', ')}</span>
<span className="phase-target">{'\u{1F3AF}'} {p.targetMetric}</span>
<span className="phase-budget">{'\u{1F4B2}'} {p.budget}</span>
</div>
</div>
</div>
);
})}
</div>
</div>
<div className="card">
<h3>{'\u{1F4E3}'} Viral & Adoption Strategy</h3>
<div className="stat-grid">
<div className="stat">
<div className="stat-label">Viral Potential</div>
<div className="stat-value">{a.goToMarket.viralPotential}</div>
</div>
<div className="stat">
<div className="stat-label">Early Adopters</div>
<div className="stat-value sm">{a.goToMarket.earlyAdopters}</div>
</div>
<div className="stat full-width">
<div className="stat-label">Viral Mechanism</div>
<div className="stat-value sm">{a.goToMarket.viralMechanism}</div>
</div>
</div>
</div>
</>
)}
{/* === FUNDING ASSESSMENT === */}
{activeSection === 'funding' && a.fundingAssessment && (
<div className="card">
<h3>{'\u{1F3E6}'} Funding Assessment</h3>
<div className="funding-header">
<div className="funding-stage">
<div className="stage-label">Current Stage</div>
<div className="stage-value">{a.fundingAssessment.currentStage}</div>
</div>
<div className="funding-stage">
<div className="stage-label">Readiness</div>
<div className={`stage-value readiness-${a.fundingAssessment.readiness?.replace(/\s/g, '-')}`}>{a.fundingAssessment.readiness}</div>
</div>
</div>
<div className="stat-grid">
<div className="stat highlight-green">
<div className="stat-label">Recommended Raise</div>
<div className="stat-value">{a.fundingAssessment.recommendedRaise}</div>
</div>
<div className="stat highlight-purple">
<div className="stat-label">Valuation Range</div>
<div className="stat-value">{a.fundingAssessment.valuationRange}</div>
</div>
</div>
<div className="milestones">
<div className="milestone-title">Key Milestones Needed</div>
{safeArray(a.fundingAssessment.keyMilestonesNeeded).map((m, i) => (
<div key={i} className="milestone-item">
<span className="milestone-num">{i + 1}</span>
<span>{m}</span>
</div>
))}
</div>
<div className="stat-grid" style={{ marginTop: '1rem' }}>
<div className="stat">
<div className="stat-label">Best Investor Fit</div>
<div className="stat-value sm">{safeArray(a.fundingAssessment.investorFit).join(', ')}</div>
</div>
<div className="stat">
<div className="stat-label">Pitch Strength</div>
<div className="stat-value sm">{a.fundingAssessment.pitchStrength}</div>
</div>
</div>
</div>
)}
{/* === FEASIBILITY === */}
{activeSection === 'feasibility' && a.feasibility && (
<div className="card">
<h3>{'\u{1F527}'} Technical Feasibility</h3>
<div className="stat-grid">
<div className="stat">
<div className="stat-label">Technical Complexity</div>
<div className={`stat-value complexity-${a.feasibility.technicalComplexity}`}>{a.feasibility.technicalComplexity}</div>
</div>
<div className="stat">
<div className="stat-label">Time to MVP</div>
<div className="stat-value">{a.feasibility.timeToMVP}</div>
</div>
<div className="stat">
<div className="stat-label">Estimated Cost</div>
<div className="stat-value">{a.feasibility.estimatedCost}</div>
</div>
<div className="stat">
<div className="stat-label">Tech Stack</div>
<div className="stat-value sm">{a.feasibility.techStack}</div>
</div>
<div className="stat full-width">
<div className="stat-label">Team Needed</div>
<div className="stat-value sm">{safeArray(a.feasibility.teamNeeded).join(' \u{2022} ')}</div>
</div>
<div className="stat full-width">
<div className="stat-label">Technical Note</div>
<div className="stat-value sm">{a.feasibility.technicalNote}</div>
</div>
<div className="stat full-width">
<div className="stat-label">Biggest Technical Risk</div>
<div className="stat-value sm">{a.feasibility.biggestTechnicalRisk}</div>
</div>
</div>
</div>
)}
{/* === RISK MATRIX === */}
{activeSection === 'risks' && a.riskMatrix && (
<div className="card">
<h3>{'\u{26A0}\u{FE0F}'} Risk Matrix</h3>
<div className="risk-matrix-grid">
<div className="rm-header">
<span className="rm-h-risk">Risk</span>
<span className="rm-h-cat">Category</span>
<span className="rm-h-prob">Probability</span>
<span className="rm-h-impact">Impact</span>
<span className="rm-h-sev">Severity</span>
</div>
{safeArray(a.riskMatrix).map((r, i) => (
<div key={i} className="rm-row">
<div className="rm-risk">
<div className="rm-risk-name">{r.risk}</div>
<div className="rm-mitigation">{'\u{1F6E1}\u{FE0F}'} {r.mitigation}</div>
</div>
<span className="rm-cat">{r.category}</span>
<span className={`rm-badge ${severityClass(r.probability)}`}>{r.probability}</span>
<span className={`rm-badge ${severityClass(r.impact)}`}>{r.impact}</span>
<span className={`rm-badge ${severityClass(r.severity)}`}>{r.severity}</span>
</div>
))}
</div>
</div>
)}
{/* === PIVOT SUGGESTIONS === */}
{activeSection === 'pivot' && a.pivotSuggestions && (
<div className="card">
<h3>{'\u{1F504}'} Pivot Suggestions</h3>
<div className="pivot-grid">
{safeArray(a.pivotSuggestions).map((p, i) => (
<div key={i} className="pivot-card">
<div className="pivot-header">
<span className="pivot-name">{p.pivot}</span>
<span className={`effort-badge ${p.effort}`}>{p.effort} effort</span>
</div>
<div className="pivot-reasoning">{p.reasoning}</div>
</div>
))}
</div>
</div>
)}
{/* === 90-DAY PLAN === */}
{activeSection === 'plan' && a.ninetyDayPlan && (
<div className="card">
<h3>{'\u{1F4C5}'} 90-Day Validation Plan</h3>
<div className="plan-timeline">
{safeArray(a.ninetyDayPlan).map((p, i) => (
<div key={i} className="plan-item">
<div className="plan-week-marker">
<div className="plan-dot" />
<div className="plan-week">{p.week}</div>
</div>
<div className="plan-content">
<div className="plan-action">{p.action}</div>
<div className="plan-meta">
<span>{'\u{1F4E6}'} <strong>Deliverable:</strong> {p.deliverable}</span>
<span>{'\u{1F3AF}'} <strong>Goal:</strong> {p.goal}</span>
</div>
</div>
</div>
))}
</div>
</div>
)}
{/* === PITCH DECK === */}
{activeSection === 'pitch' && a.pitchDeckOutline && (
<div className="card">
<h3>{'\u{1F4DD}'} Pitch Deck Outline</h3>
<div className="pitch-grid">
{safeArray(a.pitchDeckOutline).map((slide, i) => (
<div key={i} className="pitch-slide">
<div className="slide-number">Slide {slide.slide}</div>
<div className="slide-title">{slide.title}</div>
<div className="slide-content">{slide.content}</div>
</div>
))}
</div>
</div>
)}
<button className="btn-reset" onClick={onReset}>{'\u{1F504}'} Validate Another Idea</button>
</div>
);
}