Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions src/pages/app-store.astro
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,26 @@ import '../styles/system.css';
const title = "App Store - Agent Apps on Pilot Protocol";
const description = "Browse and install agent apps from the Pilot Protocol App Store. Experiences tailor-made for AI agents - one command to install, one namespace to manage.";
const canonicalUrl = "https://pilotprotocol.network/app-store";

// Live agent count — same source as the home page (build-time fetch, graceful fallback).
let liveAgents = '~35,000';
function fmtCompact(n: number): string {
if (n >= 1_000_000_000) return `~${(n / 1_000_000_000).toFixed(1).replace(/\.0$/, '')}B`;
if (n >= 1_000_000) return `~${(n / 1_000_000).toFixed(1).replace(/\.0$/, '')}M`;
if (n >= 10_000) return `~${Math.round(n / 1000)},000`;
if (n >= 1_000) return `~${(n / 1000).toFixed(1).replace(/\.0$/, '')}K`;
return String(n);
}
try {
const res = await fetch('https://polo.pilotprotocol.network/api/public-stats', {
headers: { 'User-Agent': 'pilotprotocol-web' },
});
if (res.ok) {
const s: any = await res.json();
const agentsN = typeof s.total_nodes === 'number' ? s.total_nodes : (typeof s.active_nodes === 'number' ? s.active_nodes : null);
if (agentsN != null) liveAgents = fmtCompact(agentsN);
}
} catch {}
---

<!DOCTYPE html>
Expand All @@ -31,11 +51,11 @@ const canonicalUrl = "https://pilotprotocol.network/app-store";
<div class="eyebrow">App Store</div>
<h1>Agent Apps.<br/><em>One command away.</em></h1>
<p class="lede">
The App Store is where agents find experiences built just for them — and
where builders publish their own. Every app is an agent-first interface:
no human UI bolted on, no browser chrome in the way. Install with one
command, manage from one namespace, and submit your own apps to the store
anytime.
The App Store is where agents find tools built specifically for them — and
where builders publish their own. Every app is an agent-native interface
discoverable by <span data-live="agents-long">{liveAgents}</span> agents on the
Pilot Protocol network. Install with one command, manage from one namespace,
and submit your own apps to the store anytime.
</p>
<div class="head-cta">
<a class="btn primary" href="/publish"
Expand Down
2 changes: 1 addition & 1 deletion src/pages/publish.astro
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ const canonicalUrl = 'https://pilotprotocol.network/publish';
#publish .stepper li { display:flex; align-items:center; gap:9px; flex:1 1 0; min-width:0; color:var(--c-faint); font-size:13px; position:relative; }
#publish .stepper li:not(:last-child)::after { content:""; position:absolute; left:34px; right:6px; top:15px; height:2px; background:var(--c-line2); }
#publish .stepper .dot { width:30px;height:30px;border-radius:999px;border:1.5px solid var(--c-line2);display:grid;place-items:center;font-size:13px;background:#fff;z-index:1;flex:none; }
#publish .stepper .lbl { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-transform:uppercase; letter-spacing:.03em; font-weight:500; }
#publish .stepper .lbl { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; text-transform:uppercase; letter-spacing:.03em; font-weight:500; position:relative; z-index:1; background:#f7f6f1; margin-left:-9px; padding:0 8px 0 9px; }
#publish .stepper li.done .dot { background:var(--c-acc); border-color:var(--c-acc); color:#fff; }
#publish .stepper li.done { color:var(--c-dim); }
#publish .stepper li.done:not(:last-child)::after { background:var(--c-acc); }
Expand Down
Loading