Skip to content

Commit 9ad069b

Browse files
committed
Add Setups page, navigation links, and CI auto-deploy trigger
- New /for/setups page: interactive browser for 15 multi-agent deployment recipes with difficulty filtering, agent cards, data flow visualization, and copy-pasteable quick start commands - Add Setups link to IslandNavbar (desktop + mobile), BlogFooter, and homepage inline nav (desktop dropdown + mobile + footer) - Add CTA banner on /for/skills linking to /for/setups - Add repository_dispatch trigger to deploy-website workflow so pilot-skills repo changes auto-rebuild the website
1 parent fbb867f commit 9ad069b

6 files changed

Lines changed: 418 additions & 10 deletions

File tree

.github/workflows/deploy-website.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ on:
33
push:
44
branches: [main]
55
paths: ['web/**']
6+
repository_dispatch:
7+
types: [pilot-skills-updated]
68
workflow_dispatch:
79

810
jobs:

web/src/components/BlogFooter.astro

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,46 @@
99
<a href="https://polo.pilotprotocol.network">Polo</a>
1010
<a href="https://console.pilotprotocol.network">Console</a>
1111
<a href="/for/skills">Agent Skills</a>
12+
<a href="/for/setups">Setups</a>
1213
<a href="/for/mcp">For MCP</a>
1314
<a href="/for/p2p">For P2P</a>
1415
</div>
15-
<div style="margin:24px auto 20px;max-width:400px;text-align:center">
16-
<p style="color:#a1a1aa;font-size:0.9rem;margin:0 0 10px">Weekly digest in your inbox</p>
17-
<form id="newsletter-form" style="display:flex;gap:8px;justify-content:center">
18-
<input type="email" name="email" placeholder="you@example.com" required style="flex:1;padding:8px 14px;border-radius:6px;border:1px solid #333;background:#18181b;color:#fff;font-size:0.9rem;outline:none">
19-
<button type="submit" style="padding:8px 18px;border-radius:6px;border:none;background:#22c55e;color:#fff;font-weight:600;font-size:0.9rem;cursor:pointer;white-space:nowrap">Subscribe</button>
16+
<div class="newsletter-wrap">
17+
<p class="newsletter-label">Weekly digest in your inbox</p>
18+
<form id="newsletter-form" class="newsletter-form">
19+
<input type="email" name="email" placeholder="you@example.com" required class="newsletter-input">
20+
<button type="submit" class="newsletter-btn">Subscribe</button>
2021
</form>
21-
<p id="newsletter-msg" style="font-size:0.8rem;margin:8px 0 0;min-height:1.2em"></p>
22+
<p id="newsletter-msg" class="newsletter-msg"></p>
2223
</div>
23-
<p class="footer-brand"><a href="https://vulturelabs.com"><img src="/img/vulture-labs.png" alt="Vulture Labs" style="height:1em;vertical-align:-0.15em;margin-right:6px;filter:brightness(0) invert(1);display:inline-block">Vulture Labs</a></p>
24+
<p class="footer-brand"><a href="https://vulturelabs.com"><img src="/img/vulture-labs.png" alt="Vulture Labs" class="footer-logo">Vulture Labs</a></p>
2425
<p class="footer-tagline">Built for agents, by humans.</p>
2526
</div>
2627
</footer>
2728

29+
<style is:global>
30+
.blog-footer-full{max-width:720px;margin:0 auto;padding:48px 24px;border-top:1px solid rgba(255,255,255,0.08);text-align:center}
31+
.blog-footer-full .footer-links{display:flex;gap:24px;justify-content:center;flex-wrap:wrap;margin-bottom:16px}
32+
.blog-footer-full .footer-links a{font-size:0.85rem;color:var(--muted);transition:color 0.2s}
33+
.blog-footer-full .footer-links a:hover{color:var(--fg);text-decoration:none}
34+
.blog-footer-full .newsletter-wrap{margin:24px auto 20px;max-width:400px;text-align:center}
35+
.blog-footer-full .newsletter-label{color:#a1a1aa;font-size:0.9rem;margin:0 0 10px}
36+
.blog-footer-full .newsletter-form{display:flex;gap:8px;justify-content:center}
37+
.blog-footer-full .newsletter-input{flex:1;padding:8px 14px;border-radius:6px;border:1px solid #333;background:#18181b;color:#fff;font-size:0.9rem;outline:none}
38+
.blog-footer-full .newsletter-btn{padding:8px 18px;border-radius:6px;border:none;background:#22c55e;color:#fff;font-weight:600;font-size:0.9rem;cursor:pointer;white-space:nowrap}
39+
.blog-footer-full .newsletter-msg{font-size:0.8rem;margin:8px 0 0;min-height:1.2em}
40+
.blog-footer-full .footer-brand{font-size:0.85rem;color:var(--muted)}
41+
.blog-footer-full .footer-brand a{color:var(--fg);font-weight:600}
42+
.blog-footer-full .footer-brand a:hover{text-decoration:none}
43+
.blog-footer-full .footer-logo{height:1em;vertical-align:-0.15em;margin-right:6px;filter:brightness(0) invert(1);display:inline-block}
44+
.blog-footer-full .footer-tagline{font-size:0.8rem;color:var(--muted);margin-top:4px}
45+
@media(max-width:768px){
46+
.blog-footer-full .footer-links{gap:16px}
47+
.blog-footer-full .footer-links a{font-size:0.8rem}
48+
.blog-footer-full .footer-brand{font-size:0.8rem}
49+
}
50+
</style>
51+
2852
<script>
2953
(function(){
3054
var form = document.getElementById('newsletter-form');

web/src/components/IslandNavbar.astro

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ const { active } = Astro.props;
9696
<svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>
9797
Skill Zoo
9898
</a>
99+
<a href="/for/setups">
100+
<svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>
101+
Setups
102+
</a>
99103
</div>
100104
</div>
101105
<a href="/docs/plans" class={active === 'plans' ? 'active' : ''}><svg class="nav-icon" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Plans</a>
@@ -123,6 +127,7 @@ const { active } = Astro.props;
123127
<a href="/for/mcp"><svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>For MCP Servers</a>
124128
<a href="/for/p2p"><svg viewBox="0 0 24 24"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>For P2P Agents</a>
125129
<a href="/for/skills"><svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>Skill Zoo</a>
130+
<a href="/for/setups"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>Setups</a>
126131
<div class="mob-label">Navigate</div>
127132
<a href="/docs/plans"><svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Plans</a>
128133
<a href="/blog/"><svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4z"/></svg>Blog</a>

web/src/html/index.html

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,9 @@
121121

122122
/* Announcement badge */
123123
.announcement{margin-bottom:24px}
124-
.announcement span{display:inline-block;background:var(--surface);color:var(--fg);border:1px solid var(--border);padding:6px 16px;border-radius:6px;font-size:0.75rem;font-weight:600;font-family:'SF Mono',Menlo,Consolas,monospace;letter-spacing:0.05em;text-transform:uppercase}
124+
.announcement>span{display:inline-flex;align-items:center;gap:8px;background:var(--surface);color:var(--fg);border:1px solid var(--border);padding:6px 16px;border-radius:6px;font-size:0.75rem;font-weight:600;font-family:'SF Mono',Menlo,Consolas,monospace;letter-spacing:0.05em;text-transform:uppercase}
125+
.live-dot{display:block;width:6px;height:6px;border-radius:50%;background:#22c55e;flex-shrink:0;box-shadow:0 0 0 0 rgba(34,197,94,0.6);animation:live-pulse 2s ease-out infinite}
126+
@keyframes live-pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,0.6)}100%{box-shadow:0 0 0 8px rgba(34,197,94,0)}}
125127

126128
/* Code tabs */
127129
.hero-right{display:flex;flex-direction:column;gap:12px}
@@ -462,6 +464,7 @@
462464
<a href="/for/mcp"><svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>For MCP Servers</a>
463465
<a href="/for/p2p"><svg viewBox="0 0 24 24"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>For P2P Agents</a>
464466
<a href="/for/skills"><svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>Skill Zoo</a>
467+
<a href="/for/setups"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>Setups</a>
465468
</div>
466469
</div>
467470
<a href="/docs/plans"><svg class="nav-icon" viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Plans</a>
@@ -487,6 +490,7 @@
487490
<a href="/for/mcp"><svg viewBox="0 0 24 24"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>For MCP Servers</a>
488491
<a href="/for/p2p"><svg viewBox="0 0 24 24"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><line x1="8.59" y1="13.51" x2="15.42" y2="17.49"/><line x1="15.41" y1="6.51" x2="8.59" y2="10.49"/></svg>For P2P Agents</a>
489492
<a href="/for/skills"><svg viewBox="0 0 24 24"><path d="M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z"/><polyline points="3.27 6.96 12 12.01 20.73 6.96"/><line x1="12" y1="22.08" x2="12" y2="12"/></svg>Skill Zoo</a>
493+
<a href="/for/setups"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="3"/><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06A1.65 1.65 0 0 0 4.68 15a1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06A1.65 1.65 0 0 0 9 4.68a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06A1.65 1.65 0 0 0 19.4 9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"/></svg>Setups</a>
490494
<div class="mob-label">Navigate</div>
491495
<a href="/docs/plans"><svg viewBox="0 0 24 24"><path d="M12 2L2 7l10 5 10-5-10-5z"/><path d="M2 17l10 5 10-5"/><path d="M2 12l10 5 10-5"/></svg>Plans</a>
492496
<a href="/blog/"><svg viewBox="0 0 24 24"><path d="M12 20h9"/><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4z"/></svg>Blog</a>
@@ -503,7 +507,7 @@
503507
<div class="hero">
504508
<div class="hero-left">
505509
<div class="announcement">
506-
<span id="milestone-badge">2B+ EXCHANGES SERVED</span>
510+
<span id="milestone-badge"><span class="live-dot"></span><span id="milestone-count"></span> EXCHANGES SERVED</span>
507511
</div>
508512
<h1>Networking<br>for AI Agents</h1>
509513
<p class="tagline">Pilot Protocol lets AI agents find each other, trust each other, and communicate directly &mdash; no platform in the data path, no API keys, no message broker.</p>
@@ -1298,6 +1302,7 @@ <h2>Latest from the blog</h2>
12981302
<a href="https://polo.pilotprotocol.network">Polo</a>
12991303
<a href="https://console.pilotprotocol.network">Console</a>
13001304
<a href="/for/skills">Agent Skills</a>
1305+
<a href="/for/setups">Setups</a>
13011306
<a href="/for/mcp">For MCP</a>
13021307
<a href="/for/p2p">For P2P</a>
13031308
</div>
@@ -1363,9 +1368,11 @@ <h2>Latest from the blog</h2>
13631368
function fmtNum(n){if(n>=1e9)return(n/1e9).toFixed(1)+'B';if(n>=1e6)return(n/1e6).toFixed(1)+'M';if(n>=1e3)return(n/1e3).toFixed(1)+'K';return n.toString()}
13641369

13651370
fetch('https://polo.pilotprotocol.network/api/stats').then(function(r){return r.json()}).then(function(d){
1366-
document.getElementById('stat-requests').textContent=fmtNum(d.total_requests||0);
1371+
var req=d.total_requests||0;
1372+
document.getElementById('stat-requests').textContent=fmtNum(req);
13671373
document.getElementById('stat-nodes').textContent=fmtNum(d.active_nodes||0);
13681374
document.getElementById('stat-trust').textContent=fmtNum(d.total_trust_links||0);
1375+
if(req>0){document.getElementById('milestone-count').textContent=fmtNum(req)+'+';}
13691376
document.getElementById('stat-task-executors').textContent=fmtNum(d.task_executors||0);
13701377
}).catch(function(){});
13711378

0 commit comments

Comments
 (0)