// Interactive AI workflow visualization — clickable pipeline const Workflow = () => { const stages = [ { id: 'input', label: 'Input', icon: 'Database', desc: 'A new event arrives — a document upload, an inbound message, an API call from your system of record.', example: 'PDF · invoice_4821.pdf · 2.1 MB', color: '#E63329', }, { id: 'ai', label: 'AI', icon: 'Spark', desc: 'A domain-tuned model parses, classifies, and extracts the structured data — with confidence scores attached.', example: 'vendor: Acme Co · total: $12,480 · conf 0.98', color: '#F5C518', }, { id: 'decision', label: 'Decision', icon: 'Target', desc: 'Rules + reasoning route the event. Auto-approve if confident, escalate if novel, hold if anomalous.', example: 'route: auto-approve · policy: vendor.tier1 · ok', color: '#14A04A', }, { id: 'auto', label: 'Automation', icon: 'Bolt', desc: 'The system writes back to the source-of-truth. Posts to the ledger, updates the CRM, kicks off the payment.', example: 'NetSuite.bill.create · payment.scheduled', color: '#1B7BD6', }, { id: 'output', label: 'Output', icon: 'Check', desc: 'The outcome lands. The vendor is paid. The team is notified. The signal feeds back into the model.', example: 'paid · −0.4s cycle · learning.loop ✓', color: '#E63329', }, ]; const [active, setActive] = useState(0); // Auto-advance useEffect(() => { const t = setInterval(() => setActive(a => (a + 1) % stages.length), 3200); return () => clearInterval(t); }, []); return (
{/* Pipeline */}
{stages.map((s, i) => { const IconCmp = I[s.icon]; const isActive = i === active; const isPast = i < active; return ( ); })}
{/* Detail panel */}
Stage {String(active+1).padStart(2,'0')} · {stages[active].label}

{stages[active].desc.split(' — ')[0]}

{stages[active].desc}

trace · {stages[active].id}.event ● live
→ {stages[active].example}
t = {(active*0.18).toFixed(2)}s
status: {active === stages.length-1 ? 'completed' : 'forward.next'}
); }; window.Workflow = Workflow;