// ════════════════════════════════════════════════════════════════ // IdeaGrid — 43 идеи Стартапзавода + IdeaCard + IdeaExpansion // ════════════════════════════════════════════════════════════════ const { useState: useStateIdea } = React; function IdeaGrid({ onOpenSynthesis }) { const D = window.SDH_DATA; const [family, setFamily] = useStateIdea('all'); const [focusOnly, setFocusOnly] = useStateIdea(false); const [open, setOpen] = useStateIdea(null); let arr = D.ideas; if (family !== 'all') arr = arr.filter(i => i.family === family); if (focusOnly) arr = arr.filter(i => i.focus); const focusCount = D.ideas.filter(i => i.focus).length; return (
{/* HERO */}
идеи · стартапзавод

43 направления для проработки

Каждая идея помечена методологической семьёй (SPE, CAPE, I·NoT, ROSI) и связана с нишей рынка. Карточки в фокусе ★ обсуждаются на ближайшем синтез-сейшне.

{/* FILTER */} семья {D.FAMILIES.map(f => { const count = D.ideas.filter(i => i.family === f.id).length; return ( ); })} } right={ } /> {/* GRID */}
{arr.map(idea => ( setOpen(idea)} /> ))}
{open && setOpen(null)} onOpenSynthesis={() => { const o = open; setOpen(null); onOpenSynthesis && onOpenSynthesis(o); }} />}
); } function IdeaCard({ idea, onOpen }) { return (
{/* head: number + focus star */}
№ {String(idea.number).padStart(2, '0')} {idea.focus && ( фокус )}
{/* title */}

{idea.title}

{/* badges */}
{idea.familyLabel} {idea.nicheLabel}
{/* footer: competitors + beeswarm */}
{idea.competitors} конкурентов {' · '} {idea.linked} связей
{idea.competitors >= 3 && (
вердикты: рискованно · валидация · жизнеспособно
)}
); } function IdeaExpansion({ idea, onClose, onOpenSynthesis }) { return (
e.stopPropagation()} className="sdh-fade" style={{ background: 'var(--surface-elevated)', borderRadius: 'var(--radius-2xl)', border: '1px solid var(--border-subtle)', maxWidth: 920, width: '100%', padding: 'var(--space-8)', boxShadow: 'var(--shadow-xl)', position: 'relative', }}>
идея № {String(idea.number).padStart(2, '0')} {idea.focus && ★ в фокусе}

{idea.title}

{idea.familyLabel} {idea.nicheLabel}
{/* LEFT */}

конкурентный ландшафт

{/* right */}

близость к идее (релевантность)

{idea.similarity.toFixed(2)}

появилась впервые

{idea.first_seen_at}

связанные идеи

{idea.linked} прямых пересечений в графе

{Array.from({ length: idea.linked }).map((_, k) => { const seed = idea.number * 11 + k * 7; const series = Array.from({ length: 14 }).map((__, t) => ({ value: 2 + ((Math.sin((seed + t) * 0.7) + 1) * 4) + ((seed + t * 3) % 5), })); return (
№{String(((idea.number + k * 3) % 43) + 1).padStart(2, '0')}
); })}

{idea.recommendation}

); } function Verdict({ hue, count, label }) { return (
  • {count} {label}
  • ); } window.IdeaGrid = IdeaGrid;