Skip to content

Commit 1739cef

Browse files
CynaConsclaude
andcommitted
feat(site): add Copilot support and Roadmap component
Hero: - Update tagline to include Copilot - Add "GPT • Claude • Gemini" subtitle - Update terminal animation to show 3 agents Comparison: - Add model diversity row New Roadmap component: - Git-style timeline visualization - v0.1-v0.4 complete, v0.5 current SEO: - Update meta descriptions with Copilot/Gemini keywords 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 226f817 commit 1739cef

5 files changed

Lines changed: 113 additions & 12 deletions

File tree

site/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,19 @@
77

88
<!-- SEO -->
99
<title>PowerSpawn - Universal Multi-Agent MCP Server</title>
10-
<meta name="description" content="Spawn Claude AND Codex from one coordinator. Cross-model AI agent orchestration with deterministic logging and file-based persistence." />
11-
<meta name="keywords" content="MCP, Claude, Codex, AI agents, multi-agent, orchestration, Claude Code, GitHub Copilot" />
10+
<meta name="description" content="Spawn Claude, Codex, and Copilot from one coordinator. Cross-model AI agent orchestration (GPT, Claude, Gemini) with deterministic logging and file-based persistence." />
11+
<meta name="keywords" content="MCP, Claude, Codex, Copilot, GPT, Gemini, AI agents, multi-agent, orchestration, Claude Code, GitHub Copilot" />
1212

1313
<!-- Open Graph -->
1414
<meta property="og:title" content="PowerSpawn - Universal Multi-Agent MCP Server" />
15-
<meta property="og:description" content="Spawn Claude AND Codex from one coordinator. Your agents leave a paper trail." />
15+
<meta property="og:description" content="Spawn Claude, Codex, and Copilot from one coordinator. GPT • Claude • Gemini — Your agents leave a paper trail." />
1616
<meta property="og:type" content="website" />
1717
<meta property="og:url" content="https://powerspawn.com" />
1818

1919
<!-- Twitter -->
2020
<meta name="twitter:card" content="summary_large_image" />
2121
<meta name="twitter:title" content="PowerSpawn - Universal Multi-Agent MCP Server" />
22-
<meta name="twitter:description" content="Spawn Claude AND Codex from one coordinator. Your agents leave a paper trail." />
22+
<meta name="twitter:description" content="Spawn Claude, Codex, and Copilot from one coordinator. GPT • Claude • Gemini — Your agents leave a paper trail." />
2323

2424
<!-- Fonts -->
2525
<link rel="preconnect" href="https://fonts.googleapis.com">

site/src/App.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Hero } from './components/Hero'
22
import { Features } from './components/Features'
33
import { HowItWorks } from './components/HowItWorks'
44
import { Comparison } from './components/Comparison'
5+
import { Roadmap } from './components/Roadmap'
56
import { QuickStart } from './components/QuickStart'
67
import { Footer } from './components/Footer'
78

@@ -12,6 +13,7 @@ function App() {
1213
<Features />
1314
<HowItWorks />
1415
<Comparison />
16+
<Roadmap />
1517
<QuickStart />
1618
<Footer />
1719
</div>

site/src/components/Comparison.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useRef } from 'react'
44

55
const comparisonData = [
66
{ feature: 'Cross-model spawning', powerSpawn: true, autoGen: false, crewAI: false, langGraph: false },
7+
{ feature: 'Model diversity (GPT, Claude, Gemini)', powerSpawn: true, autoGen: 'partial', crewAI: 'partial', langGraph: 'partial' },
78
{ feature: 'Uses CLI subscriptions', powerSpawn: true, autoGen: false, crewAI: false, langGraph: false },
89
{ feature: 'Deterministic logging', powerSpawn: true, autoGen: false, crewAI: false, langGraph: false },
910
{ feature: 'File-based persistence', powerSpawn: true, autoGen: false, crewAI: false, langGraph: false },

site/src/components/Hero.tsx

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,15 @@ const terminalLines = [
66
{ text: '→ Spawning Claude agent (sonnet)...', delay: 0.5, color: 'text-cyan-400' },
77
{ text: '→ Agent #a3f2 running', delay: 1, color: 'text-green-400' },
88
{ text: '', delay: 1.2 },
9-
{ text: '$ # Claude is busy? Spawn Codex instead!', delay: 1.5, color: 'text-gray-500' },
10-
{ text: '$ codex "Run the test suite"', delay: 2 },
11-
{ text: '→ Spawning Codex agent...', delay: 2.5, color: 'text-cyan-400' },
12-
{ text: '→ Agent #b7c1 running', delay: 3, color: 'text-green-400' },
13-
{ text: '', delay: 3.2 },
14-
{ text: '✓ Both agents working in parallel!', delay: 3.5, color: 'text-emerald-400' },
9+
{ text: '$ codex "Run the test suite"', delay: 1.5 },
10+
{ text: '→ Spawning Codex agent (gpt-5.1)...', delay: 2, color: 'text-cyan-400' },
11+
{ text: '→ Agent #b7c1 running', delay: 2.5, color: 'text-green-400' },
12+
{ text: '', delay: 2.7 },
13+
{ text: '$ copilot --model gemini "Analyze the codebase"', delay: 3 },
14+
{ text: '→ Spawning Copilot agent (gemini-3-pro)...', delay: 3.5, color: 'text-cyan-400' },
15+
{ text: '→ Agent #c9d4 running', delay: 4, color: 'text-green-400' },
16+
{ text: '', delay: 4.2 },
17+
{ text: '✓ Three agents working in parallel!', delay: 4.5, color: 'text-emerald-400' },
1518
]
1619

1720
function AnimatedTerminal() {
@@ -123,9 +126,9 @@ export function Hero() {
123126
transition={{ duration: 0.6, delay: 0.2 }}
124127
className="text-xl md:text-2xl text-gray-300 mb-8 max-w-2xl mx-auto"
125128
>
126-
Spawn Claude and Codex from one coordinator.
129+
Spawn Claude, Codex, and Copilot from one coordinator.
127130
<br />
128-
<span className="text-gray-400">Your agents leave a paper trail.</span>
131+
<span className="text-gray-400">GPT • Claude • Gemini — Your agents leave a paper trail.</span>
129132
</motion.p>
130133

131134
{/* Install command */}

site/src/components/Roadmap.tsx

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import { motion } from 'framer-motion'
2+
import { useInView } from 'framer-motion'
3+
import { useRef } from 'react'
4+
5+
const roadmapItems = [
6+
// Completed
7+
{ version: 'v0.1', title: 'Core Spawner', desc: 'spawn_claude, spawn_codex with IAC.md logging', status: 'completed' },
8+
{ version: 'v0.2', title: 'MCP Server', desc: 'Full MCP protocol, wait_for_agents, context handling', status: 'completed' },
9+
{ version: 'v0.3', title: 'Landing Page', desc: 'powerspawn.com with React + Tailwind', status: 'completed' },
10+
{ version: 'v0.4', title: 'Copilot Integration', desc: 'spawn_copilot with GPT, Claude, and Gemini models', status: 'completed' },
11+
// Current
12+
{ version: 'v0.5', title: 'VS Code MCP Testing', desc: 'Copilot + VS Code MCP configuration validation', status: 'current' },
13+
// Upcoming
14+
{ version: 'v0.6', title: 'MCP Registry', desc: 'Submit to official MCP server registry', status: 'upcoming' },
15+
{ version: 'v0.7', title: 'Test Suite', desc: 'Unit and integration tests with CI/CD', status: 'upcoming' },
16+
{ version: 'v1.0', title: 'Stable Release', desc: 'Production-ready with full documentation', status: 'upcoming' },
17+
]
18+
19+
export function Roadmap() {
20+
const ref = useRef(null)
21+
const isInView = useInView(ref, { once: true, margin: '-100px' })
22+
23+
return (
24+
<section className="py-24 px-4" id="roadmap">
25+
<div className="max-w-3xl mx-auto">
26+
<motion.div
27+
ref={ref}
28+
initial={{ opacity: 0, y: 20 }}
29+
animate={isInView ? { opacity: 1, y: 0 } : {}}
30+
transition={{ duration: 0.5 }}
31+
className="text-center mb-12"
32+
>
33+
<h2 className="text-4xl font-bold text-white mb-4">
34+
Roadmap
35+
</h2>
36+
<p className="text-xl text-gray-400">
37+
From multi-agent spawner to production platform
38+
</p>
39+
</motion.div>
40+
41+
{/* Timeline */}
42+
<div className="relative">
43+
{/* Vertical line */}
44+
<div className="absolute left-6 top-0 bottom-0 w-0.5 bg-gray-700" />
45+
46+
<div className="space-y-6">
47+
{roadmapItems.map((item, index) => (
48+
<motion.div
49+
key={item.version}
50+
initial={{ opacity: 0, x: -20 }}
51+
animate={isInView ? { opacity: 1, x: 0 } : {}}
52+
transition={{ duration: 0.4, delay: 0.2 + index * 0.08 }}
53+
className={`relative pl-16 ${item.status === 'upcoming' ? 'opacity-50' : ''}`}
54+
>
55+
{/* Status indicator */}
56+
<div className={`absolute left-4 w-5 h-5 rounded-full border-2 flex items-center justify-center
57+
${item.status === 'completed' ? 'bg-green-500 border-green-500' : ''}
58+
${item.status === 'current' ? 'bg-orange-500 border-orange-500 animate-pulse' : ''}
59+
${item.status === 'upcoming' ? 'bg-transparent border-gray-600' : ''}
60+
`}>
61+
{item.status === 'completed' && (
62+
<svg className="w-3 h-3 text-white" fill="none" viewBox="0 0 24 24" stroke="currentColor">
63+
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={3} d="M5 13l4 4L19 7" />
64+
</svg>
65+
)}
66+
</div>
67+
68+
{/* Content */}
69+
<div className={`p-4 rounded-lg ${item.status === 'current' ? 'bg-orange-500/10 border border-orange-500/30' : ''}`}>
70+
<div className="flex items-center gap-3 mb-1">
71+
<span className={`text-sm font-mono ${
72+
item.status === 'completed' ? 'text-green-400' :
73+
item.status === 'current' ? 'text-orange-400' :
74+
'text-gray-500'
75+
}`}>
76+
{item.version}
77+
</span>
78+
<span className={`font-semibold ${
79+
item.status === 'current' ? 'text-orange-300' : 'text-white'
80+
}`}>
81+
{item.title}
82+
</span>
83+
</div>
84+
<p className="text-gray-400 text-sm">
85+
{item.desc}
86+
</p>
87+
</div>
88+
</motion.div>
89+
))}
90+
</div>
91+
</div>
92+
</div>
93+
</section>
94+
)
95+
}

0 commit comments

Comments
 (0)