// AIDD Agents — interactive autonomous-agent orchestra // Innovative reinterpretation: each agent is a clickable orbit node; // the center "stage" reveals that agent's live work product; // connecting arcs animate as the workflow progresses. const AIDDAgents = () => { const agents = [ { n: '01', name: 'Requirements', role: 'Translates briefs into specs', icon: 'Doc', color: '#E63329', duration: '6m', input: 'PRD, SOW, Slack threads', output: 'Functional specs, Jira stories', tasks: [ 'Analyse PRD/SOW documents', 'Generate functional specs', 'Create structured Jira stories', ], preview: 'requirements', }, { n: '02', name: 'Architecture', role: 'Designs the system', icon: 'Layers', color: '#F5C518', duration: '11m', input: 'Functional spec', output: 'System diagram, stack, contracts', tasks: [ 'Generate system architecture', 'Select technology stack', 'Define data models & APIs', ], preview: 'architecture', }, { n: '03', name: 'Design', role: 'Visualises the product', icon: 'Brush', color: '#14A04A', duration: '14m', input: 'Spec + architecture', output: 'Wireframes, Figma kit, mockups', tasks: [ 'Create UI wireframes & flows', 'Generate Figma components', 'Create visual mockups', ], preview: 'design', }, { n: '04', name: 'Tech Lead', role: 'Sequences the build', icon: 'Settings', color: '#1B7BD6', duration: '4m', input: 'Spec, architecture, design', output: 'Implementation plan, dependency graph', tasks: [ 'Define implementation plan', 'Technical breakdown per story', 'Identify dependencies', ], preview: 'techlead', }, { n: '05', name: 'Coding', role: 'Ships production code', icon: 'Code', color: '#E63329', duration: '38m', input: 'Stories + design', output: 'Pull requests, unit tests', tasks: [ 'Write code via spec/UX/design', 'Implement Jira requirements', 'Generate unit tests', ], preview: 'coding', }, { n: '06', name: 'Code Review', role: 'Guards quality', icon: 'Eye', color: '#F5C518', duration: '5m', input: 'Pull request', output: 'Review comments, approval', tasks: [ 'Review code quality', 'Check architecture standards', 'Validate best practices', ], preview: 'review', }, { n: '07', name: 'Testing', role: 'Verifies behaviour', icon: 'Beaker', color: '#14A04A', duration: '9m', input: 'Built artifact', output: 'Test report, defect list', tasks: [ 'Execute functional tests', 'Perform regression testing', 'Report defects & issues', ], preview: 'testing', }, { n: '08', name: 'Deployment', role: 'Releases to production', icon: 'Rocket', color: '#1B7BD6', duration: '3m', input: 'Approved build', output: 'Live release, monitoring', tasks: [ 'Deploy to target env', 'Configure monitoring', 'Update release status', ], preview: 'deployment', }, ]; const [active, setActive] = useState(0); const [playing, setPlaying] = useState(true); const [hover, setHover] = useState(null); // Autoplay through agents useEffect(() => { if (!playing) return; const id = setInterval(() => { setActive((a) => (a + 1) % agents.length); }, 3200); return () => clearInterval(id); }, [playing, agents.length]); const current = agents[active]; // Geometry helpers const N = agents.length; const TAU = Math.PI * 2; // Start angle: top (-90°) const angleFor = (i) => -Math.PI / 2 + (i / N) * TAU; // SVG canvas const SIZE = 560; const C = SIZE / 2; const R_OUTER = 220; // node ring radius const R_INNER = 140; // inner core const R_TRACK = 200; // dashed track radius // Total elapsed minutes (cumulative) const totalMin = agents.reduce((s, a) => s + parseInt(a.duration), 0); const elapsedMin = agents .slice(0, active + 1) .reduce((s, a) => s + parseInt(a.duration), 0); return (
Eight autonomous agents.
One outcome — from brief to deploy. } sub="An end-to-end agent workflow that takes your requirements from brief to deployed product. Faster, cleaner, with less room for error at every stage. Click any agent to inspect its live output." className="border-t border-token" >
{/* Top status bar */}
Live · agent {current.n}
cycle.t = {elapsedMin}m / {totalMin}m
{/* Main grid: wheel left, stage right */}
{/* WHEEL */}
{/* Faint background grid rings */} {[60, 100, 140, 180, 220].map((r, i) => ( ))} {/* Cross hairlines */} {/* Active sweep arc — from start (top) to current angle */} {(() => { const startA = -Math.PI / 2; const endA = angleFor(active); // Build arc path const sx = C + R_TRACK * Math.cos(startA); const sy = C + R_TRACK * Math.sin(startA); const ex = C + R_TRACK * Math.cos(endA); const ey = C + R_TRACK * Math.sin(endA); const sweep = (endA - startA + TAU) % TAU; const large = sweep > Math.PI ? 1 : 0; if (active === 0) return null; return ( ); })()} {/* Soft core glow */} {/* Connection lines from center to each agent */} {agents.map((a, i) => { const ang = angleFor(i); const x = C + (R_OUTER - 36) * Math.cos(ang); const y = C + (R_OUTER - 36) * Math.sin(ang); const isActive = i === active; const isPast = i < active; return ( ); })} {/* Inner core — animated mark */} {/* Sparkle mark */} {/* Agent nodes */} {agents.map((a, i) => { const ang = angleFor(i); const x = C + R_OUTER * Math.cos(ang); const y = C + R_OUTER * Math.sin(ang); const isActive = i === active; const isHover = i === hover; const isPast = i < active; const r = isActive ? 30 : 26; return ( setHover(i)} onMouseLeave={() => setHover(null)} onClick={() => { setActive(i); setPlaying(false); }} role="button" aria-label={`Agent ${a.n}: ${a.name}`} > {/* Pulse ring (active only) */} {isActive && ( <> )} {/* Node body */} {/* Past — colored fill */} {isPast && !isActive && ( )} {/* Index badge */} {a.n} {/* Icon glyph (foreignObject for React icon) */}
{(() => { const Cmp = I[a.icon]; return Cmp ? : null; })()}
{/* Label outside node */} {(() => { // Place labels OUTSIDE each node, away from center const lx = 0; const ly = 0; // direction vector from center to node const dx = Math.cos(ang); const dy = Math.sin(ang); const tx = dx * (r + 16); const ty = dy * (r + 16); const anchor = dx > 0.3 ? 'start' : dx < -0.3 ? 'end' : 'middle'; return ( {a.name} {a.duration} · {isPast ? 'DONE' : isActive ? 'RUNNING' : 'QUEUED'} ); })()}
); })}
{/* STAGE: live output for the active agent */}
{/* Stage header */}
{(() => { const Cmp = I[current.icon]; return Cmp ? : null; })()}
Agent {current.n} · runtime {current.duration}

{current.name} Agent

{current.role}

{/* I/O strip */}
Input
{current.input}
Output
{current.output}
{/* Tasks */}
Tasks · in progress
    {current.tasks.map((t, k) => (
  • {t}
  • ))}
{/* Live preview pane */}
Live artifact
{/* Stage timeline scrubber */}
{agents.map((a, i) => { const isActive = i === active; const isPast = i < active; return ( ); })}
{/* Bottom legend */}
Brief → deploy
{totalMin} min average
Defects per release
−74% vs human-only
Humans on the loop
2 reviewers, 1 approver
); }; window.AIDDAgents = AIDDAgents;