diff --git a/functions/forms/solution-lead.ts b/functions/forms/solution-lead.ts new file mode 100644 index 00000000..68b4e1a8 --- /dev/null +++ b/functions/forms/solution-lead.ts @@ -0,0 +1,76 @@ +import { + cleanLine, + escapeHtml, + field, + handleForm, + htmlField, + isEmail, + oneOf, + type FormEnv, +} from '../_form-mail'; + +const PROFILES = [ + 'private-agent-network', + 'agent-integration', + 'agent-capability-store', + 'secure-agent-runtime', + 'grounded-agent-search', + 'web-access-for-agents', + 'isolated-agent-compute', + 'agent-email-phone', + 'sales-agent-stack', + 'agent-commerce', + 'agent-ready-apis', + 'live-data-for-agents', +]; + +export const onRequest: PagesFunction = async ({ request, env }) => + handleForm(request, env, { + action: 'solution-lead', + required: ['name', 'email', 'profile', 'choice', 'context'], + limits: { + name: 120, + email: 254, + organization: 160, + profile: 80, + offer: 180, + choice: 240, + context: 4_000, + }, + validate: (values) => { + if (!isEmail(values.email)) return 'Please enter a valid work email address.'; + if (!oneOf(values.profile, PROFILES)) return 'Please choose a valid solution profile.'; + return null; + }, + subject: (values) => `[Solution funnel] ${cleanLine(values.profile)} — ${cleanLine(values.name)}`, + text: (values, reference) => [ + `Pilot Protocol solution-funnel lead — ${reference}`, + '', + field('Name', values.name), + field('Email', values.email), + field('Organization', values.organization), + field('Profile', values.profile), + field('Offer', values.offer), + field('Selected need', values.choice), + '', + 'Context:', + values.context || '', + '', + `Submitted from: ${values.page_url || 'Pilot solution landing page'}`, + ].join('\n'), + html: (values, reference) => ` +
+

Pilot Protocol solution lead · ${escapeHtml(reference)}

+ + ${htmlField('Name', values.name)} + ${htmlField('Email', values.email)} + ${htmlField('Organization', values.organization)} + ${htmlField('Profile', values.profile)} + ${htmlField('Offer', values.offer)} + ${htmlField('Selected need', values.choice)} +
+

Context

+

${escapeHtml(values.context)}

+

Submitted from ${escapeHtml(values.page_url || 'Pilot solution landing page')}

+
`, + }); diff --git a/package-lock.json b/package-lock.json index ab5781f3..c70c36a4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,8 @@ "dependencies": { "astro": "^7.1.6", "posthog-js": "^1.372.3", - "puppeteer": "^24.39.0" + "puppeteer": "^24.39.0", + "sharp": "^0.35.3" }, "engines": { "node": ">=22.12.0" @@ -941,7 +942,6 @@ "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", "license": "MIT", - "optional": true, "engines": { "node": ">=18" } @@ -4573,7 +4573,6 @@ "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "license": "Apache-2.0", - "optional": true, "dependencies": { "@img/colour": "^1.1.0", "detect-libc": "^2.1.2", diff --git a/package.json b/package.json index 7d620aa0..871aaf08 100644 --- a/package.json +++ b/package.json @@ -8,12 +8,15 @@ "dev": "astro dev", "build": "astro build && node scripts/build-cf-error-pages.mjs", "preview": "astro preview", + "optimize:article-images": "node scripts/optimize-article-images.mjs", + "optimize:blog-banners": "node scripts/optimize-blog-banners.mjs", "check:plain": "node scripts/check-plain-coverage.mjs", "check:site": "node scripts/check-site-integrity.mjs" }, "dependencies": { "astro": "^7.1.6", "posthog-js": "^1.372.3", - "puppeteer": "^24.39.0" + "puppeteer": "^24.39.0", + "sharp": "^0.35.3" } } diff --git a/public/_headers b/public/_headers index 7ad8e680..0aa34af9 100644 --- a/public/_headers +++ b/public/_headers @@ -24,3 +24,18 @@ /_astro/* Cache-Control: public, max-age=31536000, immutable + +/fonts/* + Cache-Control: public, max-age=31536000, immutable + +/img/* + Cache-Control: public, max-age=31536000, immutable + +/appicons/* + Cache-Control: public, max-age=31536000, immutable + +/blog/banners/* + Cache-Control: public, max-age=31536000, immutable + +/plain/* + X-Robots-Tag: noindex, follow diff --git a/public/_redirects b/public/_redirects index 84a96287..4caf4b1e 100644 --- a/public/_redirects +++ b/public/_redirects @@ -13,3 +13,17 @@ /docs/pilot-director /docs/pilot-mom 301 /plain/docs/pilot-director /plain/docs/pilot-mom 301 /blog/pilot-raises-4-5m-seed /news/pilot-raises-4-5m-seed 301 + +# Consolidate an overlapping P2P explainer into the more complete article. +/blog/why-secure-direct-p2p-connections-matter-for-ai-agents /blog/why-direct-p2p-connections-power-secure-ai-networking 301 + +# Retire a thin comparison built around a discontinued third-party domain. +/blog/boarding-pilotagent-org-alternatives-3 /blog/pilot-vs-tailscale-nebula-zerotier-ai-agents 301 + +# Normalize legacy file-style links to the clean public routes. +/blog/:slug.html /blog/:slug 301 +/docs/:slug.html /docs/:slug 301 +/learn/:slug.html /learn/:slug 301 +/news/:slug.html /news/:slug 301 +/apps/:slug.html /apps/:slug 301 +/brand/index.html /brand/ 301 diff --git a/public/appicons/optimized/io.pilot.aegis-240.webp b/public/appicons/optimized/io.pilot.aegis-240.webp new file mode 100644 index 00000000..0219e08b Binary files /dev/null and b/public/appicons/optimized/io.pilot.aegis-240.webp differ diff --git a/public/appicons/optimized/io.pilot.aegis-96.webp b/public/appicons/optimized/io.pilot.aegis-96.webp new file mode 100644 index 00000000..a5184bad Binary files /dev/null and b/public/appicons/optimized/io.pilot.aegis-96.webp differ diff --git a/public/appicons/optimized/io.pilot.agentphone-240.webp b/public/appicons/optimized/io.pilot.agentphone-240.webp new file mode 100644 index 00000000..9b4905f1 Binary files /dev/null and b/public/appicons/optimized/io.pilot.agentphone-240.webp differ diff --git a/public/appicons/optimized/io.pilot.agentphone-96.webp b/public/appicons/optimized/io.pilot.agentphone-96.webp new file mode 100644 index 00000000..7ce12540 Binary files /dev/null and b/public/appicons/optimized/io.pilot.agentphone-96.webp differ diff --git a/public/appicons/optimized/io.pilot.bowmark-240.webp b/public/appicons/optimized/io.pilot.bowmark-240.webp new file mode 100644 index 00000000..991bae84 Binary files /dev/null and b/public/appicons/optimized/io.pilot.bowmark-240.webp differ diff --git a/public/appicons/optimized/io.pilot.bowmark-96.webp b/public/appicons/optimized/io.pilot.bowmark-96.webp new file mode 100644 index 00000000..ea9792af Binary files /dev/null and b/public/appicons/optimized/io.pilot.bowmark-96.webp differ diff --git a/public/appicons/optimized/io.pilot.cosift-240.webp b/public/appicons/optimized/io.pilot.cosift-240.webp new file mode 100644 index 00000000..2a515f96 Binary files /dev/null and b/public/appicons/optimized/io.pilot.cosift-240.webp differ diff --git a/public/appicons/optimized/io.pilot.cosift-96.webp b/public/appicons/optimized/io.pilot.cosift-96.webp new file mode 100644 index 00000000..82c822e6 Binary files /dev/null and b/public/appicons/optimized/io.pilot.cosift-96.webp differ diff --git a/public/appicons/optimized/io.pilot.didit-240.webp b/public/appicons/optimized/io.pilot.didit-240.webp new file mode 100644 index 00000000..37407133 Binary files /dev/null and b/public/appicons/optimized/io.pilot.didit-240.webp differ diff --git a/public/appicons/optimized/io.pilot.didit-96.webp b/public/appicons/optimized/io.pilot.didit-96.webp new file mode 100644 index 00000000..04f6fd21 Binary files /dev/null and b/public/appicons/optimized/io.pilot.didit-96.webp differ diff --git a/public/appicons/optimized/io.pilot.miren-240.webp b/public/appicons/optimized/io.pilot.miren-240.webp new file mode 100644 index 00000000..cde9f030 Binary files /dev/null and b/public/appicons/optimized/io.pilot.miren-240.webp differ diff --git a/public/appicons/optimized/io.pilot.miren-96.webp b/public/appicons/optimized/io.pilot.miren-96.webp new file mode 100644 index 00000000..f156a22e Binary files /dev/null and b/public/appicons/optimized/io.pilot.miren-96.webp differ diff --git a/public/appicons/optimized/io.pilot.orthogonal-240.webp b/public/appicons/optimized/io.pilot.orthogonal-240.webp new file mode 100644 index 00000000..a7cc87aa Binary files /dev/null and b/public/appicons/optimized/io.pilot.orthogonal-240.webp differ diff --git a/public/appicons/optimized/io.pilot.orthogonal-96.webp b/public/appicons/optimized/io.pilot.orthogonal-96.webp new file mode 100644 index 00000000..78350f33 Binary files /dev/null and b/public/appicons/optimized/io.pilot.orthogonal-96.webp differ diff --git a/public/appicons/optimized/io.pilot.otto-240.webp b/public/appicons/optimized/io.pilot.otto-240.webp new file mode 100644 index 00000000..20577639 Binary files /dev/null and b/public/appicons/optimized/io.pilot.otto-240.webp differ diff --git a/public/appicons/optimized/io.pilot.otto-96.webp b/public/appicons/optimized/io.pilot.otto-96.webp new file mode 100644 index 00000000..1e632952 Binary files /dev/null and b/public/appicons/optimized/io.pilot.otto-96.webp differ diff --git a/public/appicons/optimized/io.pilot.plainweb-240.webp b/public/appicons/optimized/io.pilot.plainweb-240.webp new file mode 100644 index 00000000..2a515f96 Binary files /dev/null and b/public/appicons/optimized/io.pilot.plainweb-240.webp differ diff --git a/public/appicons/optimized/io.pilot.plainweb-96.webp b/public/appicons/optimized/io.pilot.plainweb-96.webp new file mode 100644 index 00000000..82c822e6 Binary files /dev/null and b/public/appicons/optimized/io.pilot.plainweb-96.webp differ diff --git a/public/appicons/optimized/io.pilot.primitive-240.webp b/public/appicons/optimized/io.pilot.primitive-240.webp new file mode 100644 index 00000000..32ebecee Binary files /dev/null and b/public/appicons/optimized/io.pilot.primitive-240.webp differ diff --git a/public/appicons/optimized/io.pilot.primitive-96.webp b/public/appicons/optimized/io.pilot.primitive-96.webp new file mode 100644 index 00000000..4498de7d Binary files /dev/null and b/public/appicons/optimized/io.pilot.primitive-96.webp differ diff --git a/public/appicons/optimized/io.pilot.sixtyfour-240.webp b/public/appicons/optimized/io.pilot.sixtyfour-240.webp new file mode 100644 index 00000000..17ffdc1f Binary files /dev/null and b/public/appicons/optimized/io.pilot.sixtyfour-240.webp differ diff --git a/public/appicons/optimized/io.pilot.sixtyfour-96.webp b/public/appicons/optimized/io.pilot.sixtyfour-96.webp new file mode 100644 index 00000000..e09391ff Binary files /dev/null and b/public/appicons/optimized/io.pilot.sixtyfour-96.webp differ diff --git a/public/appicons/optimized/io.pilot.smol-240.webp b/public/appicons/optimized/io.pilot.smol-240.webp new file mode 100644 index 00000000..ced13e14 Binary files /dev/null and b/public/appicons/optimized/io.pilot.smol-240.webp differ diff --git a/public/appicons/optimized/io.pilot.smol-96.webp b/public/appicons/optimized/io.pilot.smol-96.webp new file mode 100644 index 00000000..d7d8d2d2 Binary files /dev/null and b/public/appicons/optimized/io.pilot.smol-96.webp differ diff --git a/public/appicons/optimized/io.pilot.smolmachines-240.webp b/public/appicons/optimized/io.pilot.smolmachines-240.webp new file mode 100644 index 00000000..ced13e14 Binary files /dev/null and b/public/appicons/optimized/io.pilot.smolmachines-240.webp differ diff --git a/public/appicons/optimized/io.pilot.smolmachines-96.webp b/public/appicons/optimized/io.pilot.smolmachines-96.webp new file mode 100644 index 00000000..d7d8d2d2 Binary files /dev/null and b/public/appicons/optimized/io.pilot.smolmachines-96.webp differ diff --git a/public/appicons/optimized/io.pilot.tldr-240.webp b/public/appicons/optimized/io.pilot.tldr-240.webp new file mode 100644 index 00000000..d76e2b0f Binary files /dev/null and b/public/appicons/optimized/io.pilot.tldr-240.webp differ diff --git a/public/appicons/optimized/io.pilot.tldr-96.webp b/public/appicons/optimized/io.pilot.tldr-96.webp new file mode 100644 index 00000000..64fca5ee Binary files /dev/null and b/public/appicons/optimized/io.pilot.tldr-96.webp differ diff --git a/public/appicons/optimized/io.pilot.wallet-240.webp b/public/appicons/optimized/io.pilot.wallet-240.webp new file mode 100644 index 00000000..2a515f96 Binary files /dev/null and b/public/appicons/optimized/io.pilot.wallet-240.webp differ diff --git a/public/appicons/optimized/io.pilot.wallet-96.webp b/public/appicons/optimized/io.pilot.wallet-96.webp new file mode 100644 index 00000000..82c822e6 Binary files /dev/null and b/public/appicons/optimized/io.pilot.wallet-96.webp differ diff --git a/public/appicons/optimized/io.telepat.ideon-free-240.webp b/public/appicons/optimized/io.telepat.ideon-free-240.webp new file mode 100644 index 00000000..1fee1c52 Binary files /dev/null and b/public/appicons/optimized/io.telepat.ideon-free-240.webp differ diff --git a/public/appicons/optimized/io.telepat.ideon-free-96.webp b/public/appicons/optimized/io.telepat.ideon-free-96.webp new file mode 100644 index 00000000..624ac9d6 Binary files /dev/null and b/public/appicons/optimized/io.telepat.ideon-free-96.webp differ diff --git a/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-1200.webp b/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-1200.webp new file mode 100644 index 00000000..a88f75c3 Binary files /dev/null and b/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-1200.webp differ diff --git a/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-720.webp b/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-720.webp new file mode 100644 index 00000000..3a94e803 Binary files /dev/null and b/public/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-720.webp differ diff --git a/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-1200.webp b/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-1200.webp new file mode 100644 index 00000000..1359ab35 Binary files /dev/null and b/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-720.webp b/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-720.webp new file mode 100644 index 00000000..309026c7 Binary files /dev/null and b/public/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/agent-communication-security-best-practices-1200.webp b/public/blog/banners/optimized/agent-communication-security-best-practices-1200.webp new file mode 100644 index 00000000..66a4de32 Binary files /dev/null and b/public/blog/banners/optimized/agent-communication-security-best-practices-1200.webp differ diff --git a/public/blog/banners/optimized/agent-communication-security-best-practices-720.webp b/public/blog/banners/optimized/agent-communication-security-best-practices-720.webp new file mode 100644 index 00000000..d4128658 Binary files /dev/null and b/public/blog/banners/optimized/agent-communication-security-best-practices-720.webp differ diff --git a/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-1200.webp b/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-1200.webp new file mode 100644 index 00000000..2b60c265 Binary files /dev/null and b/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-1200.webp differ diff --git a/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-720.webp b/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-720.webp new file mode 100644 index 00000000..287f190e Binary files /dev/null and b/public/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-720.webp differ diff --git a/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-1200.webp b/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-1200.webp new file mode 100644 index 00000000..d78fc860 Binary files /dev/null and b/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-1200.webp differ diff --git a/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-720.webp b/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-720.webp new file mode 100644 index 00000000..40b7f3a2 Binary files /dev/null and b/public/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-720.webp differ diff --git a/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-1200.webp b/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-1200.webp new file mode 100644 index 00000000..544ad98d Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-1200.webp differ diff --git a/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-720.webp b/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-720.webp new file mode 100644 index 00000000..5f2c363d Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-720.webp differ diff --git a/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-1200.webp b/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-1200.webp new file mode 100644 index 00000000..92259b47 Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-1200.webp differ diff --git a/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-720.webp b/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-720.webp new file mode 100644 index 00000000..2f535892 Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-challenges-decentralized-systems-720.webp differ diff --git a/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-1200.webp b/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-1200.webp new file mode 100644 index 00000000..034e8df4 Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-1200.webp differ diff --git a/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-720.webp b/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-720.webp new file mode 100644 index 00000000..a674aeda Binary files /dev/null and b/public/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-720.webp differ diff --git a/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-1200.webp b/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-1200.webp new file mode 100644 index 00000000..aaf0b0f0 Binary files /dev/null and b/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-1200.webp differ diff --git a/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-720.webp b/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-720.webp new file mode 100644 index 00000000..33a14a85 Binary files /dev/null and b/public/blog/banners/optimized/autonomous-agent-networking-distributed-ai-720.webp differ diff --git a/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-1200.webp b/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-1200.webp new file mode 100644 index 00000000..5c8c9b54 Binary files /dev/null and b/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-1200.webp differ diff --git a/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-720.webp b/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-720.webp new file mode 100644 index 00000000..1aba8894 Binary files /dev/null and b/public/blog/banners/optimized/benchmarking-http-vs-udp-overlay-720.webp differ diff --git a/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-1200.webp b/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-1200.webp new file mode 100644 index 00000000..a134eeb2 Binary files /dev/null and b/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-1200.webp differ diff --git a/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-720.webp b/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-720.webp new file mode 100644 index 00000000..948be3d2 Binary files /dev/null and b/public/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-720.webp differ diff --git a/public/blog/banners/optimized/build-agent-swarm-self-organizes-1200.webp b/public/blog/banners/optimized/build-agent-swarm-self-organizes-1200.webp new file mode 100644 index 00000000..a67f4067 Binary files /dev/null and b/public/blog/banners/optimized/build-agent-swarm-self-organizes-1200.webp differ diff --git a/public/blog/banners/optimized/build-agent-swarm-self-organizes-720.webp b/public/blog/banners/optimized/build-agent-swarm-self-organizes-720.webp new file mode 100644 index 00000000..e8d4a0fc Binary files /dev/null and b/public/blog/banners/optimized/build-agent-swarm-self-organizes-720.webp differ diff --git a/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-1200.webp b/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-1200.webp new file mode 100644 index 00000000..50f72119 Binary files /dev/null and b/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-1200.webp differ diff --git a/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-720.webp b/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-720.webp new file mode 100644 index 00000000..ebfb3ac6 Binary files /dev/null and b/public/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-720.webp differ diff --git a/public/blog/banners/optimized/build-multi-agent-network-five-minutes-1200.webp b/public/blog/banners/optimized/build-multi-agent-network-five-minutes-1200.webp new file mode 100644 index 00000000..4abf4e1f Binary files /dev/null and b/public/blog/banners/optimized/build-multi-agent-network-five-minutes-1200.webp differ diff --git a/public/blog/banners/optimized/build-multi-agent-network-five-minutes-720.webp b/public/blog/banners/optimized/build-multi-agent-network-five-minutes-720.webp new file mode 100644 index 00000000..fedd16d2 Binary files /dev/null and b/public/blog/banners/optimized/build-multi-agent-network-five-minutes-720.webp differ diff --git a/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-1200.webp b/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-1200.webp new file mode 100644 index 00000000..81bfe79b Binary files /dev/null and b/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-1200.webp differ diff --git a/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-720.webp b/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-720.webp new file mode 100644 index 00000000..361063a6 Binary files /dev/null and b/public/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-720.webp differ diff --git a/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-1200.webp b/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-1200.webp new file mode 100644 index 00000000..3f6fde5f Binary files /dev/null and b/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-1200.webp differ diff --git a/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-720.webp b/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-720.webp new file mode 100644 index 00000000..d5640e91 Binary files /dev/null and b/public/blog/banners/optimized/building-custom-pilot-skills-openclaw-720.webp differ diff --git a/public/blog/banners/optimized/chain-ai-models-across-machines-1200.webp b/public/blog/banners/optimized/chain-ai-models-across-machines-1200.webp new file mode 100644 index 00000000..68a4ba87 Binary files /dev/null and b/public/blog/banners/optimized/chain-ai-models-across-machines-1200.webp differ diff --git a/public/blog/banners/optimized/chain-ai-models-across-machines-720.webp b/public/blog/banners/optimized/chain-ai-models-across-machines-720.webp new file mode 100644 index 00000000..cdb897d1 Binary files /dev/null and b/public/blog/banners/optimized/chain-ai-models-across-machines-720.webp differ diff --git a/public/blog/banners/optimized/claude-agent-teams-over-pilot-1200.webp b/public/blog/banners/optimized/claude-agent-teams-over-pilot-1200.webp new file mode 100644 index 00000000..9ccdd585 Binary files /dev/null and b/public/blog/banners/optimized/claude-agent-teams-over-pilot-1200.webp differ diff --git a/public/blog/banners/optimized/claude-agent-teams-over-pilot-720.webp b/public/blog/banners/optimized/claude-agent-teams-over-pilot-720.webp new file mode 100644 index 00000000..cf77a0fb Binary files /dev/null and b/public/blog/banners/optimized/claude-agent-teams-over-pilot-720.webp differ diff --git a/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-1200.webp b/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-1200.webp new file mode 100644 index 00000000..771d96f9 Binary files /dev/null and b/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-1200.webp differ diff --git a/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-720.webp b/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-720.webp new file mode 100644 index 00000000..09c53e4d Binary files /dev/null and b/public/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-720.webp differ diff --git a/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-1200.webp b/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-1200.webp new file mode 100644 index 00000000..5a5e4f69 Binary files /dev/null and b/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-1200.webp differ diff --git a/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-720.webp b/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-720.webp new file mode 100644 index 00000000..88a0f78c Binary files /dev/null and b/public/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-720.webp differ diff --git a/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-1200.webp b/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-1200.webp new file mode 100644 index 00000000..e1e30dcb Binary files /dev/null and b/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-1200.webp differ diff --git a/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-720.webp b/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-720.webp new file mode 100644 index 00000000..26834559 Binary files /dev/null and b/public/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-720.webp differ diff --git a/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-1200.webp b/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-1200.webp new file mode 100644 index 00000000..0f44a7dc Binary files /dev/null and b/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-1200.webp differ diff --git a/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-720.webp b/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-720.webp new file mode 100644 index 00000000..39ef439a Binary files /dev/null and b/public/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-720.webp differ diff --git a/public/blog/banners/optimized/connecting-mcp-servers-across-agents-1200.webp b/public/blog/banners/optimized/connecting-mcp-servers-across-agents-1200.webp new file mode 100644 index 00000000..2b082347 Binary files /dev/null and b/public/blog/banners/optimized/connecting-mcp-servers-across-agents-1200.webp differ diff --git a/public/blog/banners/optimized/connecting-mcp-servers-across-agents-720.webp b/public/blog/banners/optimized/connecting-mcp-servers-across-agents-720.webp new file mode 100644 index 00000000..d6eec919 Binary files /dev/null and b/public/blog/banners/optimized/connecting-mcp-servers-across-agents-720.webp differ diff --git a/public/blog/banners/optimized/contributing-codebase-tour-1200.webp b/public/blog/banners/optimized/contributing-codebase-tour-1200.webp new file mode 100644 index 00000000..e762498a Binary files /dev/null and b/public/blog/banners/optimized/contributing-codebase-tour-1200.webp differ diff --git a/public/blog/banners/optimized/contributing-codebase-tour-720.webp b/public/blog/banners/optimized/contributing-codebase-tour-720.webp new file mode 100644 index 00000000..3b7d11a5 Binary files /dev/null and b/public/blog/banners/optimized/contributing-codebase-tour-720.webp differ diff --git a/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-1200.webp b/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-1200.webp new file mode 100644 index 00000000..b4578795 Binary files /dev/null and b/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-1200.webp differ diff --git a/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-720.webp b/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-720.webp new file mode 100644 index 00000000..93d22410 Binary files /dev/null and b/public/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-720.webp differ diff --git a/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-1200.webp b/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-1200.webp new file mode 100644 index 00000000..6b3c366c Binary files /dev/null and b/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-1200.webp differ diff --git a/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-720.webp b/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-720.webp new file mode 100644 index 00000000..006600e3 Binary files /dev/null and b/public/blog/banners/optimized/decentralized-communication-protocols-ai-developers-720.webp differ diff --git a/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-1200.webp b/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-1200.webp new file mode 100644 index 00000000..3f4b6c48 Binary files /dev/null and b/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-1200.webp differ diff --git a/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-720.webp b/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-720.webp new file mode 100644 index 00000000..4ffcda61 Binary files /dev/null and b/public/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-720.webp differ diff --git a/public/blog/banners/optimized/decentralized-task-marketplace-agents-1200.webp b/public/blog/banners/optimized/decentralized-task-marketplace-agents-1200.webp new file mode 100644 index 00000000..b064ecc8 Binary files /dev/null and b/public/blog/banners/optimized/decentralized-task-marketplace-agents-1200.webp differ diff --git a/public/blog/banners/optimized/decentralized-task-marketplace-agents-720.webp b/public/blog/banners/optimized/decentralized-task-marketplace-agents-720.webp new file mode 100644 index 00000000..2abd67c2 Binary files /dev/null and b/public/blog/banners/optimized/decentralized-task-marketplace-agents-720.webp differ diff --git a/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-1200.webp b/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-1200.webp new file mode 100644 index 00000000..8845bded Binary files /dev/null and b/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-1200.webp differ diff --git a/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-720.webp b/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-720.webp new file mode 100644 index 00000000..dc19b67f Binary files /dev/null and b/public/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-720.webp differ diff --git a/public/blog/banners/optimized/distributed-monitoring-without-prometheus-1200.webp b/public/blog/banners/optimized/distributed-monitoring-without-prometheus-1200.webp new file mode 100644 index 00000000..7c50919c Binary files /dev/null and b/public/blog/banners/optimized/distributed-monitoring-without-prometheus-1200.webp differ diff --git a/public/blog/banners/optimized/distributed-monitoring-without-prometheus-720.webp b/public/blog/banners/optimized/distributed-monitoring-without-prometheus-720.webp new file mode 100644 index 00000000..9179651e Binary files /dev/null and b/public/blog/banners/optimized/distributed-monitoring-without-prometheus-720.webp differ diff --git a/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-1200.webp b/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-1200.webp new file mode 100644 index 00000000..64e4271e Binary files /dev/null and b/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-1200.webp differ diff --git a/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-720.webp b/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-720.webp new file mode 100644 index 00000000..c856019d Binary files /dev/null and b/public/blog/banners/optimized/distributed-rag-without-central-knowledge-base-720.webp differ diff --git a/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-1200.webp b/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-1200.webp new file mode 100644 index 00000000..94e95667 Binary files /dev/null and b/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-1200.webp differ diff --git a/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-720.webp b/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-720.webp new file mode 100644 index 00000000..c500a1b7 Binary files /dev/null and b/public/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-720.webp differ diff --git a/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-1200.webp b/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-1200.webp new file mode 100644 index 00000000..27064dc2 Binary files /dev/null and b/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-720.webp b/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-720.webp new file mode 100644 index 00000000..d8d15f2c Binary files /dev/null and b/public/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-1200.webp b/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-1200.webp new file mode 100644 index 00000000..b44775d9 Binary files /dev/null and b/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-1200.webp differ diff --git a/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-720.webp b/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-720.webp new file mode 100644 index 00000000..b6841410 Binary files /dev/null and b/public/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-720.webp differ diff --git a/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-1200.webp b/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-1200.webp new file mode 100644 index 00000000..8dd8a261 Binary files /dev/null and b/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-1200.webp differ diff --git a/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-720.webp b/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-720.webp new file mode 100644 index 00000000..926cd731 Binary files /dev/null and b/public/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-720.webp differ diff --git a/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-1200.webp b/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-1200.webp new file mode 100644 index 00000000..02a7a934 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-1200.webp differ diff --git a/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-720.webp b/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-720.webp new file mode 100644 index 00000000..2970d628 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-720.webp differ diff --git a/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-1200.webp b/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-1200.webp new file mode 100644 index 00000000..7e2fc183 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-1200.webp differ diff --git a/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-720.webp b/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-720.webp new file mode 100644 index 00000000..ac70c733 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-720.webp differ diff --git a/public/blog/banners/optimized/enterprise-private-networks-roadmap-1200.webp b/public/blog/banners/optimized/enterprise-private-networks-roadmap-1200.webp new file mode 100644 index 00000000..e25a0519 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-private-networks-roadmap-1200.webp differ diff --git a/public/blog/banners/optimized/enterprise-private-networks-roadmap-720.webp b/public/blog/banners/optimized/enterprise-private-networks-roadmap-720.webp new file mode 100644 index 00000000..0a04520f Binary files /dev/null and b/public/blog/banners/optimized/enterprise-private-networks-roadmap-720.webp differ diff --git a/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-1200.webp b/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-1200.webp new file mode 100644 index 00000000..7e2fc183 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-1200.webp differ diff --git a/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-720.webp b/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-720.webp new file mode 100644 index 00000000..ac70c733 Binary files /dev/null and b/public/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-720.webp differ diff --git a/public/blog/banners/optimized/federated-learning-p2p-communication-1200.webp b/public/blog/banners/optimized/federated-learning-p2p-communication-1200.webp new file mode 100644 index 00000000..e316a769 Binary files /dev/null and b/public/blog/banners/optimized/federated-learning-p2p-communication-1200.webp differ diff --git a/public/blog/banners/optimized/federated-learning-p2p-communication-720.webp b/public/blog/banners/optimized/federated-learning-p2p-communication-720.webp new file mode 100644 index 00000000..8e779b12 Binary files /dev/null and b/public/blog/banners/optimized/federated-learning-p2p-communication-720.webp differ diff --git a/public/blog/banners/optimized/github-com-alternatives-6-1200.webp b/public/blog/banners/optimized/github-com-alternatives-6-1200.webp new file mode 100644 index 00000000..ab1585f6 Binary files /dev/null and b/public/blog/banners/optimized/github-com-alternatives-6-1200.webp differ diff --git a/public/blog/banners/optimized/github-com-alternatives-6-720.webp b/public/blog/banners/optimized/github-com-alternatives-6-720.webp new file mode 100644 index 00000000..c2b052ca Binary files /dev/null and b/public/blog/banners/optimized/github-com-alternatives-6-720.webp differ diff --git a/public/blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp b/public/blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp new file mode 100644 index 00000000..65249039 Binary files /dev/null and b/public/blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp differ diff --git a/public/blog/banners/optimized/hipaa-compliant-agent-communication-720.webp b/public/blog/banners/optimized/hipaa-compliant-agent-communication-720.webp new file mode 100644 index 00000000..e28e8256 Binary files /dev/null and b/public/blog/banners/optimized/hipaa-compliant-agent-communication-720.webp differ diff --git a/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-1200.webp b/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-1200.webp new file mode 100644 index 00000000..b88f2981 Binary files /dev/null and b/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-1200.webp differ diff --git a/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-720.webp b/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-720.webp new file mode 100644 index 00000000..d272f2f6 Binary files /dev/null and b/public/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-720.webp differ diff --git a/public/blog/banners/optimized/how-ai-agents-discover-each-other-1200.webp b/public/blog/banners/optimized/how-ai-agents-discover-each-other-1200.webp new file mode 100644 index 00000000..5301ec9b Binary files /dev/null and b/public/blog/banners/optimized/how-ai-agents-discover-each-other-1200.webp differ diff --git a/public/blog/banners/optimized/how-ai-agents-discover-each-other-720.webp b/public/blog/banners/optimized/how-ai-agents-discover-each-other-720.webp new file mode 100644 index 00000000..e40615cd Binary files /dev/null and b/public/blog/banners/optimized/how-ai-agents-discover-each-other-720.webp differ diff --git a/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-1200.webp b/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-1200.webp new file mode 100644 index 00000000..41e33671 Binary files /dev/null and b/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-1200.webp differ diff --git a/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-720.webp b/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-720.webp new file mode 100644 index 00000000..ed834269 Binary files /dev/null and b/public/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-720.webp differ diff --git a/public/blog/banners/optimized/how-pilot-protocol-works-1200.webp b/public/blog/banners/optimized/how-pilot-protocol-works-1200.webp new file mode 100644 index 00000000..028fdc93 Binary files /dev/null and b/public/blog/banners/optimized/how-pilot-protocol-works-1200.webp differ diff --git a/public/blog/banners/optimized/how-pilot-protocol-works-720.webp b/public/blog/banners/optimized/how-pilot-protocol-works-720.webp new file mode 100644 index 00000000..b7afb665 Binary files /dev/null and b/public/blog/banners/optimized/how-pilot-protocol-works-720.webp differ diff --git a/public/blog/banners/optimized/http-services-over-encrypted-overlay-1200.webp b/public/blog/banners/optimized/http-services-over-encrypted-overlay-1200.webp new file mode 100644 index 00000000..f9659834 Binary files /dev/null and b/public/blog/banners/optimized/http-services-over-encrypted-overlay-1200.webp differ diff --git a/public/blog/banners/optimized/http-services-over-encrypted-overlay-720.webp b/public/blog/banners/optimized/http-services-over-encrypted-overlay-720.webp new file mode 100644 index 00000000..be214669 Binary files /dev/null and b/public/blog/banners/optimized/http-services-over-encrypted-overlay-720.webp differ diff --git a/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-1200.webp b/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-1200.webp new file mode 100644 index 00000000..56676792 Binary files /dev/null and b/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-1200.webp differ diff --git a/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-720.webp b/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-720.webp new file mode 100644 index 00000000..1b9dac1e Binary files /dev/null and b/public/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-720.webp differ diff --git a/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-1200.webp b/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-1200.webp new file mode 100644 index 00000000..fba587f4 Binary files /dev/null and b/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-1200.webp differ diff --git a/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-720.webp b/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-720.webp new file mode 100644 index 00000000..843a3459 Binary files /dev/null and b/public/blog/banners/optimized/lightweight-swarm-communication-drones-robots-720.webp differ diff --git a/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-1200.webp b/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-1200.webp new file mode 100644 index 00000000..4f7d5e2b Binary files /dev/null and b/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-1200.webp differ diff --git a/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-720.webp b/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-720.webp new file mode 100644 index 00000000..11a71d58 Binary files /dev/null and b/public/blog/banners/optimized/mcp-plus-pilot-tools-and-network-720.webp differ diff --git a/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-1200.webp b/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-1200.webp new file mode 100644 index 00000000..40e557c9 Binary files /dev/null and b/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-1200.webp differ diff --git a/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-720.webp b/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-720.webp new file mode 100644 index 00000000..5069136f Binary files /dev/null and b/public/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-720.webp differ diff --git a/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-1200.webp b/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-1200.webp new file mode 100644 index 00000000..4922e2a6 Binary files /dev/null and b/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-1200.webp differ diff --git a/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-720.webp b/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-720.webp new file mode 100644 index 00000000..77d4ddd0 Binary files /dev/null and b/public/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-720.webp differ diff --git a/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-1200.webp b/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-1200.webp new file mode 100644 index 00000000..98e85391 Binary files /dev/null and b/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-1200.webp differ diff --git a/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-720.webp b/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-720.webp new file mode 100644 index 00000000..80beaba1 Binary files /dev/null and b/public/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-720.webp differ diff --git a/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-1200.webp b/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-1200.webp new file mode 100644 index 00000000..cfbcb72e Binary files /dev/null and b/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-720.webp b/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-720.webp new file mode 100644 index 00000000..d21896c1 Binary files /dev/null and b/public/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-1200.webp b/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-1200.webp new file mode 100644 index 00000000..3b1713ee Binary files /dev/null and b/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-1200.webp differ diff --git a/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-720.webp b/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-720.webp new file mode 100644 index 00000000..559b9412 Binary files /dev/null and b/public/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-720.webp differ diff --git a/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-1200.webp b/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-1200.webp new file mode 100644 index 00000000..10852e1b Binary files /dev/null and b/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-1200.webp differ diff --git a/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-720.webp b/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-720.webp new file mode 100644 index 00000000..fd9a30b6 Binary files /dev/null and b/public/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-720.webp differ diff --git a/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-1200.webp b/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-1200.webp new file mode 100644 index 00000000..cc5e5f25 Binary files /dev/null and b/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-1200.webp differ diff --git a/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-720.webp b/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-720.webp new file mode 100644 index 00000000..f748fefe Binary files /dev/null and b/public/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-720.webp differ diff --git a/public/blog/banners/optimized/openanp-ai-alternatives-6-1200.webp b/public/blog/banners/optimized/openanp-ai-alternatives-6-1200.webp new file mode 100644 index 00000000..7d985567 Binary files /dev/null and b/public/blog/banners/optimized/openanp-ai-alternatives-6-1200.webp differ diff --git a/public/blog/banners/optimized/openanp-ai-alternatives-6-720.webp b/public/blog/banners/optimized/openanp-ai-alternatives-6-720.webp new file mode 100644 index 00000000..129606c3 Binary files /dev/null and b/public/blog/banners/optimized/openanp-ai-alternatives-6-720.webp differ diff --git a/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-1200.webp b/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-1200.webp new file mode 100644 index 00000000..7dabab9f Binary files /dev/null and b/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-1200.webp differ diff --git a/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-720.webp b/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-720.webp new file mode 100644 index 00000000..86774bfc Binary files /dev/null and b/public/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-720.webp differ diff --git a/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-1200.webp b/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-1200.webp new file mode 100644 index 00000000..5256cf67 Binary files /dev/null and b/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-1200.webp differ diff --git a/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-720.webp b/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-720.webp new file mode 100644 index 00000000..3de38aed Binary files /dev/null and b/public/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-720.webp differ diff --git a/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-1200.webp b/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-1200.webp new file mode 100644 index 00000000..c66127ad Binary files /dev/null and b/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-1200.webp differ diff --git a/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-720.webp b/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-720.webp new file mode 100644 index 00000000..71bd7321 Binary files /dev/null and b/public/blog/banners/optimized/openclaw-task-delegation-polo-reputation-720.webp differ diff --git a/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-1200.webp b/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-1200.webp new file mode 100644 index 00000000..7c0a1ea5 Binary files /dev/null and b/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-1200.webp differ diff --git a/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-720.webp b/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-720.webp new file mode 100644 index 00000000..93783566 Binary files /dev/null and b/public/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-720.webp differ diff --git a/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-1200.webp b/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-1200.webp new file mode 100644 index 00000000..48755634 Binary files /dev/null and b/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-1200.webp differ diff --git a/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-720.webp b/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-720.webp new file mode 100644 index 00000000..c2800c50 Binary files /dev/null and b/public/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-720.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-1200.webp b/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-1200.webp new file mode 100644 index 00000000..7dcfafb9 Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-1200.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-720.webp b/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-720.webp new file mode 100644 index 00000000..969d397c Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-agent-communication-no-server-720.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-1200.webp b/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-1200.webp new file mode 100644 index 00000000..320ca620 Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-1200.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-720.webp b/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-720.webp new file mode 100644 index 00000000..0c23d698 Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-file-transfer-agents-720.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-1200.webp b/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-1200.webp new file mode 100644 index 00000000..a945b29c Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-1200.webp differ diff --git a/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-720.webp b/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-720.webp new file mode 100644 index 00000000..719692cf Binary files /dev/null and b/public/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-720.webp differ diff --git a/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-1200.webp b/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-1200.webp new file mode 100644 index 00000000..2a6aa26a Binary files /dev/null and b/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-720.webp b/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-720.webp new file mode 100644 index 00000000..16915f5d Binary files /dev/null and b/public/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-1200.webp b/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-1200.webp new file mode 100644 index 00000000..216155d2 Binary files /dev/null and b/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-1200.webp differ diff --git a/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-720.webp b/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-720.webp new file mode 100644 index 00000000..1cacee81 Binary files /dev/null and b/public/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-720.webp differ diff --git a/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-1200.webp b/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-1200.webp new file mode 100644 index 00000000..e73ccaf3 Binary files /dev/null and b/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-720.webp b/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-720.webp new file mode 100644 index 00000000..ab8321f4 Binary files /dev/null and b/public/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/pilot-console-manage-agent-networks-1200.webp b/public/blog/banners/optimized/pilot-console-manage-agent-networks-1200.webp new file mode 100644 index 00000000..65002f7c Binary files /dev/null and b/public/blog/banners/optimized/pilot-console-manage-agent-networks-1200.webp differ diff --git a/public/blog/banners/optimized/pilot-console-manage-agent-networks-720.webp b/public/blog/banners/optimized/pilot-console-manage-agent-networks-720.webp new file mode 100644 index 00000000..8eeaf458 Binary files /dev/null and b/public/blog/banners/optimized/pilot-console-manage-agent-networks-720.webp differ diff --git a/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-1200.webp b/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-1200.webp new file mode 100644 index 00000000..994d61d5 Binary files /dev/null and b/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-1200.webp differ diff --git a/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-720.webp b/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-720.webp new file mode 100644 index 00000000..392c29e8 Binary files /dev/null and b/public/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-720.webp differ diff --git a/public/blog/banners/optimized/polo-score-reputation-without-blockchain-1200.webp b/public/blog/banners/optimized/polo-score-reputation-without-blockchain-1200.webp new file mode 100644 index 00000000..fd984879 Binary files /dev/null and b/public/blog/banners/optimized/polo-score-reputation-without-blockchain-1200.webp differ diff --git a/public/blog/banners/optimized/polo-score-reputation-without-blockchain-720.webp b/public/blog/banners/optimized/polo-score-reputation-without-blockchain-720.webp new file mode 100644 index 00000000..6f593710 Binary files /dev/null and b/public/blog/banners/optimized/polo-score-reputation-without-blockchain-720.webp differ diff --git a/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-1200.webp b/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-1200.webp new file mode 100644 index 00000000..13e6a26d Binary files /dev/null and b/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-1200.webp differ diff --git a/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-720.webp b/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-720.webp new file mode 100644 index 00000000..b872ae53 Binary files /dev/null and b/public/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-720.webp differ diff --git a/public/blog/banners/optimized/private-agent-network-company-1200.webp b/public/blog/banners/optimized/private-agent-network-company-1200.webp new file mode 100644 index 00000000..f15c182e Binary files /dev/null and b/public/blog/banners/optimized/private-agent-network-company-1200.webp differ diff --git a/public/blog/banners/optimized/private-agent-network-company-720.webp b/public/blog/banners/optimized/private-agent-network-company-720.webp new file mode 100644 index 00000000..50e62270 Binary files /dev/null and b/public/blog/banners/optimized/private-agent-network-company-720.webp differ diff --git a/public/blog/banners/optimized/private-networks-now-in-testing-1200.webp b/public/blog/banners/optimized/private-networks-now-in-testing-1200.webp new file mode 100644 index 00000000..f15c182e Binary files /dev/null and b/public/blog/banners/optimized/private-networks-now-in-testing-1200.webp differ diff --git a/public/blog/banners/optimized/private-networks-now-in-testing-720.webp b/public/blog/banners/optimized/private-networks-now-in-testing-720.webp new file mode 100644 index 00000000..50e62270 Binary files /dev/null and b/public/blog/banners/optimized/private-networks-now-in-testing-720.webp differ diff --git a/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-1200.webp b/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-1200.webp new file mode 100644 index 00000000..acaa65a9 Binary files /dev/null and b/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-720.webp b/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-720.webp new file mode 100644 index 00000000..3ba6730d Binary files /dev/null and b/public/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/python-sdk-pilot-protocol-1200.webp b/public/blog/banners/optimized/python-sdk-pilot-protocol-1200.webp new file mode 100644 index 00000000..a8513211 Binary files /dev/null and b/public/blog/banners/optimized/python-sdk-pilot-protocol-1200.webp differ diff --git a/public/blog/banners/optimized/python-sdk-pilot-protocol-720.webp b/public/blog/banners/optimized/python-sdk-pilot-protocol-720.webp new file mode 100644 index 00000000..cbdaad76 Binary files /dev/null and b/public/blog/banners/optimized/python-sdk-pilot-protocol-720.webp differ diff --git a/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-1200.webp b/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-1200.webp new file mode 100644 index 00000000..4f6a9096 Binary files /dev/null and b/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-1200.webp differ diff --git a/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-720.webp b/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-720.webp new file mode 100644 index 00000000..82b76c1b Binary files /dev/null and b/public/blog/banners/optimized/replace-message-broker-twelve-lines-go-720.webp differ diff --git a/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-1200.webp b/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-1200.webp new file mode 100644 index 00000000..f1e246d6 Binary files /dev/null and b/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-1200.webp differ diff --git a/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-720.webp b/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-720.webp new file mode 100644 index 00000000..8cda1c01 Binary files /dev/null and b/public/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-720.webp differ diff --git a/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-1200.webp b/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-1200.webp new file mode 100644 index 00000000..a1efaabc Binary files /dev/null and b/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-1200.webp differ diff --git a/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-720.webp b/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-720.webp new file mode 100644 index 00000000..c36e33ad Binary files /dev/null and b/public/blog/banners/optimized/run-agent-network-without-cloud-dependency-720.webp differ diff --git a/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-1200.webp b/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-1200.webp new file mode 100644 index 00000000..5692ef0e Binary files /dev/null and b/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-1200.webp differ diff --git a/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-720.webp b/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-720.webp new file mode 100644 index 00000000..e9847661 Binary files /dev/null and b/public/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-720.webp differ diff --git a/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-1200.webp b/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-1200.webp new file mode 100644 index 00000000..ef7211d1 Binary files /dev/null and b/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-1200.webp differ diff --git a/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-720.webp b/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-720.webp new file mode 100644 index 00000000..c4343020 Binary files /dev/null and b/public/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-720.webp differ diff --git a/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-1200.webp b/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-1200.webp new file mode 100644 index 00000000..55017fa2 Binary files /dev/null and b/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-1200.webp differ diff --git a/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-720.webp b/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-720.webp new file mode 100644 index 00000000..23e08b4c Binary files /dev/null and b/public/blog/banners/optimized/secure-ai-agent-communication-zero-trust-720.webp differ diff --git a/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-1200.webp b/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-1200.webp new file mode 100644 index 00000000..e5f3f1b2 Binary files /dev/null and b/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-1200.webp differ diff --git a/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-720.webp b/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-720.webp new file mode 100644 index 00000000..d4c2fbe5 Binary files /dev/null and b/public/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-720.webp differ diff --git a/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-1200.webp b/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-1200.webp new file mode 100644 index 00000000..b41fe569 Binary files /dev/null and b/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-720.webp b/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-720.webp new file mode 100644 index 00000000..24745508 Binary files /dev/null and b/public/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-1200.webp b/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-1200.webp new file mode 100644 index 00000000..c3da7418 Binary files /dev/null and b/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-720.webp b/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-720.webp new file mode 100644 index 00000000..45ee198e Binary files /dev/null and b/public/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-1200.webp b/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-1200.webp new file mode 100644 index 00000000..bf8f74c3 Binary files /dev/null and b/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-1200.webp differ diff --git a/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-720.webp b/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-720.webp new file mode 100644 index 00000000..890659fb Binary files /dev/null and b/public/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-720.webp differ diff --git a/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-1200.webp b/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-1200.webp new file mode 100644 index 00000000..e58dc9fb Binary files /dev/null and b/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-1200.webp differ diff --git a/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-720.webp b/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-720.webp new file mode 100644 index 00000000..08d6712e Binary files /dev/null and b/public/blog/banners/optimized/secure-research-collaboration-share-models-not-data-720.webp differ diff --git a/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-1200.webp b/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-1200.webp new file mode 100644 index 00000000..646a524e Binary files /dev/null and b/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-1200.webp differ diff --git a/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-720.webp b/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-720.webp new file mode 100644 index 00000000..e9f58195 Binary files /dev/null and b/public/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-720.webp differ diff --git a/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-1200.webp b/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-1200.webp new file mode 100644 index 00000000..f5db3444 Binary files /dev/null and b/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-1200.webp differ diff --git a/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-720.webp b/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-720.webp new file mode 100644 index 00000000..83200f44 Binary files /dev/null and b/public/blog/banners/optimized/smart-home-without-cloud-local-device-communication-720.webp differ diff --git a/public/blog/banners/optimized/sociology-of-machines-626-agents-1200.webp b/public/blog/banners/optimized/sociology-of-machines-626-agents-1200.webp new file mode 100644 index 00000000..8c3436ee Binary files /dev/null and b/public/blog/banners/optimized/sociology-of-machines-626-agents-1200.webp differ diff --git a/public/blog/banners/optimized/sociology-of-machines-626-agents-720.webp b/public/blog/banners/optimized/sociology-of-machines-626-agents-720.webp new file mode 100644 index 00000000..667fb5d0 Binary files /dev/null and b/public/blog/banners/optimized/sociology-of-machines-626-agents-720.webp differ diff --git a/public/blog/banners/optimized/trust-model-agents-invisible-by-default-1200.webp b/public/blog/banners/optimized/trust-model-agents-invisible-by-default-1200.webp new file mode 100644 index 00000000..347e242f Binary files /dev/null and b/public/blog/banners/optimized/trust-model-agents-invisible-by-default-1200.webp differ diff --git a/public/blog/banners/optimized/trust-model-agents-invisible-by-default-720.webp b/public/blog/banners/optimized/trust-model-agents-invisible-by-default-720.webp new file mode 100644 index 00000000..d57f2152 Binary files /dev/null and b/public/blog/banners/optimized/trust-model-agents-invisible-by-default-720.webp differ diff --git a/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-1200.webp b/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-1200.webp new file mode 100644 index 00000000..75f5268a Binary files /dev/null and b/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-1200.webp differ diff --git a/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-720.webp b/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-720.webp new file mode 100644 index 00000000..909d0ebf Binary files /dev/null and b/public/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-720.webp differ diff --git a/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-1200.webp b/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-1200.webp new file mode 100644 index 00000000..0ee1fc14 Binary files /dev/null and b/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-1200.webp differ diff --git a/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-720.webp b/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-720.webp new file mode 100644 index 00000000..6b0da606 Binary files /dev/null and b/public/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-720.webp differ diff --git a/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-1200.webp b/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-1200.webp new file mode 100644 index 00000000..0d58b675 Binary files /dev/null and b/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-1200.webp differ diff --git a/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-720.webp b/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-720.webp new file mode 100644 index 00000000..2b45f899 Binary files /dev/null and b/public/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-720.webp differ diff --git a/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-1200.webp b/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-1200.webp new file mode 100644 index 00000000..b6b22314 Binary files /dev/null and b/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-1200.webp differ diff --git a/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-720.webp b/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-720.webp new file mode 100644 index 00000000..f3c9dac0 Binary files /dev/null and b/public/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-720.webp differ diff --git a/public/blog/banners/optimized/why-ai-agents-need-network-stack-1200.webp b/public/blog/banners/optimized/why-ai-agents-need-network-stack-1200.webp new file mode 100644 index 00000000..659e95ef Binary files /dev/null and b/public/blog/banners/optimized/why-ai-agents-need-network-stack-1200.webp differ diff --git a/public/blog/banners/optimized/why-ai-agents-need-network-stack-720.webp b/public/blog/banners/optimized/why-ai-agents-need-network-stack-720.webp new file mode 100644 index 00000000..29a5e366 Binary files /dev/null and b/public/blog/banners/optimized/why-ai-agents-need-network-stack-720.webp differ diff --git a/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-1200.webp b/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-1200.webp new file mode 100644 index 00000000..be03bf20 Binary files /dev/null and b/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-1200.webp differ diff --git a/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-720.webp b/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-720.webp new file mode 100644 index 00000000..3a01e2a7 Binary files /dev/null and b/public/blog/banners/optimized/why-autonomous-agents-need-private-discovery-720.webp differ diff --git a/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-1200.webp b/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-1200.webp new file mode 100644 index 00000000..41ae6f7c Binary files /dev/null and b/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-1200.webp differ diff --git a/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-720.webp b/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-720.webp new file mode 100644 index 00000000..e6775aa5 Binary files /dev/null and b/public/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-720.webp differ diff --git a/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-1200.webp b/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-1200.webp new file mode 100644 index 00000000..d0e7d9c0 Binary files /dev/null and b/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-1200.webp differ diff --git a/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-720.webp b/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-720.webp new file mode 100644 index 00000000..34598211 Binary files /dev/null and b/public/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-720.webp differ diff --git a/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-1200.webp b/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-1200.webp new file mode 100644 index 00000000..5d146774 Binary files /dev/null and b/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-1200.webp differ diff --git a/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-720.webp b/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-720.webp new file mode 100644 index 00000000..ae5ee041 Binary files /dev/null and b/public/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-720.webp differ diff --git a/public/blog/media/0180cd6af491e98c-1200.webp b/public/blog/media/0180cd6af491e98c-1200.webp new file mode 100644 index 00000000..b5ad444b Binary files /dev/null and b/public/blog/media/0180cd6af491e98c-1200.webp differ diff --git a/public/blog/media/0180cd6af491e98c-720.webp b/public/blog/media/0180cd6af491e98c-720.webp new file mode 100644 index 00000000..1c34e66d Binary files /dev/null and b/public/blog/media/0180cd6af491e98c-720.webp differ diff --git a/public/blog/media/03c47f058a8b2b9a-1200.webp b/public/blog/media/03c47f058a8b2b9a-1200.webp new file mode 100644 index 00000000..4921939e Binary files /dev/null and b/public/blog/media/03c47f058a8b2b9a-1200.webp differ diff --git a/public/blog/media/03c47f058a8b2b9a-720.webp b/public/blog/media/03c47f058a8b2b9a-720.webp new file mode 100644 index 00000000..a5e9eae6 Binary files /dev/null and b/public/blog/media/03c47f058a8b2b9a-720.webp differ diff --git a/public/blog/media/06c3a2578f8c8a26-1073.webp b/public/blog/media/06c3a2578f8c8a26-1073.webp new file mode 100644 index 00000000..06972067 Binary files /dev/null and b/public/blog/media/06c3a2578f8c8a26-1073.webp differ diff --git a/public/blog/media/06c3a2578f8c8a26-720.webp b/public/blog/media/06c3a2578f8c8a26-720.webp new file mode 100644 index 00000000..c4805b4b Binary files /dev/null and b/public/blog/media/06c3a2578f8c8a26-720.webp differ diff --git a/public/blog/media/07cb14354d9f4b2e-1073.webp b/public/blog/media/07cb14354d9f4b2e-1073.webp new file mode 100644 index 00000000..8360f5cc Binary files /dev/null and b/public/blog/media/07cb14354d9f4b2e-1073.webp differ diff --git a/public/blog/media/07cb14354d9f4b2e-720.webp b/public/blog/media/07cb14354d9f4b2e-720.webp new file mode 100644 index 00000000..00329915 Binary files /dev/null and b/public/blog/media/07cb14354d9f4b2e-720.webp differ diff --git a/public/blog/media/08c7ed899d5d3d0d-1200.webp b/public/blog/media/08c7ed899d5d3d0d-1200.webp new file mode 100644 index 00000000..faf4b2f4 Binary files /dev/null and b/public/blog/media/08c7ed899d5d3d0d-1200.webp differ diff --git a/public/blog/media/08c7ed899d5d3d0d-720.webp b/public/blog/media/08c7ed899d5d3d0d-720.webp new file mode 100644 index 00000000..91ee62a9 Binary files /dev/null and b/public/blog/media/08c7ed899d5d3d0d-720.webp differ diff --git a/public/blog/media/0939810b0b2ffeec-1200.webp b/public/blog/media/0939810b0b2ffeec-1200.webp new file mode 100644 index 00000000..297e7b98 Binary files /dev/null and b/public/blog/media/0939810b0b2ffeec-1200.webp differ diff --git a/public/blog/media/0939810b0b2ffeec-720.webp b/public/blog/media/0939810b0b2ffeec-720.webp new file mode 100644 index 00000000..f69d9187 Binary files /dev/null and b/public/blog/media/0939810b0b2ffeec-720.webp differ diff --git a/public/blog/media/0c346e2ced1828e0-1200.webp b/public/blog/media/0c346e2ced1828e0-1200.webp new file mode 100644 index 00000000..15718cc0 Binary files /dev/null and b/public/blog/media/0c346e2ced1828e0-1200.webp differ diff --git a/public/blog/media/0c346e2ced1828e0-720.webp b/public/blog/media/0c346e2ced1828e0-720.webp new file mode 100644 index 00000000..9c24fb01 Binary files /dev/null and b/public/blog/media/0c346e2ced1828e0-720.webp differ diff --git a/public/blog/media/0c5f4200c1abdcef-1200.webp b/public/blog/media/0c5f4200c1abdcef-1200.webp new file mode 100644 index 00000000..9b96d09e Binary files /dev/null and b/public/blog/media/0c5f4200c1abdcef-1200.webp differ diff --git a/public/blog/media/0c5f4200c1abdcef-720.webp b/public/blog/media/0c5f4200c1abdcef-720.webp new file mode 100644 index 00000000..e215ea2c Binary files /dev/null and b/public/blog/media/0c5f4200c1abdcef-720.webp differ diff --git a/public/blog/media/0d5297c41814eec4-1200.webp b/public/blog/media/0d5297c41814eec4-1200.webp new file mode 100644 index 00000000..491ac132 Binary files /dev/null and b/public/blog/media/0d5297c41814eec4-1200.webp differ diff --git a/public/blog/media/0d5297c41814eec4-720.webp b/public/blog/media/0d5297c41814eec4-720.webp new file mode 100644 index 00000000..06728a42 Binary files /dev/null and b/public/blog/media/0d5297c41814eec4-720.webp differ diff --git a/public/blog/media/1156ca7a6e102c84-1073.webp b/public/blog/media/1156ca7a6e102c84-1073.webp new file mode 100644 index 00000000..ba97c987 Binary files /dev/null and b/public/blog/media/1156ca7a6e102c84-1073.webp differ diff --git a/public/blog/media/1156ca7a6e102c84-720.webp b/public/blog/media/1156ca7a6e102c84-720.webp new file mode 100644 index 00000000..b5b21d55 Binary files /dev/null and b/public/blog/media/1156ca7a6e102c84-720.webp differ diff --git a/public/blog/media/11f2771eca0d49b9-1200.webp b/public/blog/media/11f2771eca0d49b9-1200.webp new file mode 100644 index 00000000..042a459c Binary files /dev/null and b/public/blog/media/11f2771eca0d49b9-1200.webp differ diff --git a/public/blog/media/11f2771eca0d49b9-720.webp b/public/blog/media/11f2771eca0d49b9-720.webp new file mode 100644 index 00000000..6d05648a Binary files /dev/null and b/public/blog/media/11f2771eca0d49b9-720.webp differ diff --git a/public/blog/media/12dedacabc7b8d3d-1200.webp b/public/blog/media/12dedacabc7b8d3d-1200.webp new file mode 100644 index 00000000..827e3d06 Binary files /dev/null and b/public/blog/media/12dedacabc7b8d3d-1200.webp differ diff --git a/public/blog/media/12dedacabc7b8d3d-720.webp b/public/blog/media/12dedacabc7b8d3d-720.webp new file mode 100644 index 00000000..4aa216f1 Binary files /dev/null and b/public/blog/media/12dedacabc7b8d3d-720.webp differ diff --git a/public/blog/media/149142bbdf83c402-1200.webp b/public/blog/media/149142bbdf83c402-1200.webp new file mode 100644 index 00000000..6453d2ca Binary files /dev/null and b/public/blog/media/149142bbdf83c402-1200.webp differ diff --git a/public/blog/media/149142bbdf83c402-720.webp b/public/blog/media/149142bbdf83c402-720.webp new file mode 100644 index 00000000..ce5f1670 Binary files /dev/null and b/public/blog/media/149142bbdf83c402-720.webp differ diff --git a/public/blog/media/153e8191485aad3c-1200.webp b/public/blog/media/153e8191485aad3c-1200.webp new file mode 100644 index 00000000..35253e4b Binary files /dev/null and b/public/blog/media/153e8191485aad3c-1200.webp differ diff --git a/public/blog/media/153e8191485aad3c-720.webp b/public/blog/media/153e8191485aad3c-720.webp new file mode 100644 index 00000000..4e7769a8 Binary files /dev/null and b/public/blog/media/153e8191485aad3c-720.webp differ diff --git a/public/blog/media/15b994953a816a4a-720.webp b/public/blog/media/15b994953a816a4a-720.webp new file mode 100644 index 00000000..89de6197 Binary files /dev/null and b/public/blog/media/15b994953a816a4a-720.webp differ diff --git a/public/blog/media/16f837e8a86afac3-1200.webp b/public/blog/media/16f837e8a86afac3-1200.webp new file mode 100644 index 00000000..5fcd549a Binary files /dev/null and b/public/blog/media/16f837e8a86afac3-1200.webp differ diff --git a/public/blog/media/16f837e8a86afac3-720.webp b/public/blog/media/16f837e8a86afac3-720.webp new file mode 100644 index 00000000..e47684f9 Binary files /dev/null and b/public/blog/media/16f837e8a86afac3-720.webp differ diff --git a/public/blog/media/1aaf71752fe41d0b-1200.webp b/public/blog/media/1aaf71752fe41d0b-1200.webp new file mode 100644 index 00000000..0a87f428 Binary files /dev/null and b/public/blog/media/1aaf71752fe41d0b-1200.webp differ diff --git a/public/blog/media/1aaf71752fe41d0b-720.webp b/public/blog/media/1aaf71752fe41d0b-720.webp new file mode 100644 index 00000000..5505edf8 Binary files /dev/null and b/public/blog/media/1aaf71752fe41d0b-720.webp differ diff --git a/public/blog/media/1bb3e7671e0e4fae-1200.webp b/public/blog/media/1bb3e7671e0e4fae-1200.webp new file mode 100644 index 00000000..1d117219 Binary files /dev/null and b/public/blog/media/1bb3e7671e0e4fae-1200.webp differ diff --git a/public/blog/media/1bb3e7671e0e4fae-720.webp b/public/blog/media/1bb3e7671e0e4fae-720.webp new file mode 100644 index 00000000..ff647999 Binary files /dev/null and b/public/blog/media/1bb3e7671e0e4fae-720.webp differ diff --git a/public/blog/media/1d229f576684d955-1200.webp b/public/blog/media/1d229f576684d955-1200.webp new file mode 100644 index 00000000..98ec00d3 Binary files /dev/null and b/public/blog/media/1d229f576684d955-1200.webp differ diff --git a/public/blog/media/1d229f576684d955-720.webp b/public/blog/media/1d229f576684d955-720.webp new file mode 100644 index 00000000..9ba7f181 Binary files /dev/null and b/public/blog/media/1d229f576684d955-720.webp differ diff --git a/public/blog/media/1d6818d4da840374-1200.webp b/public/blog/media/1d6818d4da840374-1200.webp new file mode 100644 index 00000000..91df580a Binary files /dev/null and b/public/blog/media/1d6818d4da840374-1200.webp differ diff --git a/public/blog/media/1d6818d4da840374-720.webp b/public/blog/media/1d6818d4da840374-720.webp new file mode 100644 index 00000000..afe397db Binary files /dev/null and b/public/blog/media/1d6818d4da840374-720.webp differ diff --git a/public/blog/media/1db3e24a11d16302-1073.webp b/public/blog/media/1db3e24a11d16302-1073.webp new file mode 100644 index 00000000..bbd664e5 Binary files /dev/null and b/public/blog/media/1db3e24a11d16302-1073.webp differ diff --git a/public/blog/media/1db3e24a11d16302-720.webp b/public/blog/media/1db3e24a11d16302-720.webp new file mode 100644 index 00000000..1def0511 Binary files /dev/null and b/public/blog/media/1db3e24a11d16302-720.webp differ diff --git a/public/blog/media/23117a1b1bb3484b-1073.webp b/public/blog/media/23117a1b1bb3484b-1073.webp new file mode 100644 index 00000000..d9731893 Binary files /dev/null and b/public/blog/media/23117a1b1bb3484b-1073.webp differ diff --git a/public/blog/media/23117a1b1bb3484b-720.webp b/public/blog/media/23117a1b1bb3484b-720.webp new file mode 100644 index 00000000..ee37f9bb Binary files /dev/null and b/public/blog/media/23117a1b1bb3484b-720.webp differ diff --git a/public/blog/media/2a1c6e3cf069909e-1200.webp b/public/blog/media/2a1c6e3cf069909e-1200.webp new file mode 100644 index 00000000..3dc22682 Binary files /dev/null and b/public/blog/media/2a1c6e3cf069909e-1200.webp differ diff --git a/public/blog/media/2a1c6e3cf069909e-720.webp b/public/blog/media/2a1c6e3cf069909e-720.webp new file mode 100644 index 00000000..ca386204 Binary files /dev/null and b/public/blog/media/2a1c6e3cf069909e-720.webp differ diff --git a/public/blog/media/2b36e2f702085886-1073.webp b/public/blog/media/2b36e2f702085886-1073.webp new file mode 100644 index 00000000..eeb9960b Binary files /dev/null and b/public/blog/media/2b36e2f702085886-1073.webp differ diff --git a/public/blog/media/2b36e2f702085886-720.webp b/public/blog/media/2b36e2f702085886-720.webp new file mode 100644 index 00000000..18e2f716 Binary files /dev/null and b/public/blog/media/2b36e2f702085886-720.webp differ diff --git a/public/blog/media/2bf2a38129e4e968-1200.webp b/public/blog/media/2bf2a38129e4e968-1200.webp new file mode 100644 index 00000000..5a478913 Binary files /dev/null and b/public/blog/media/2bf2a38129e4e968-1200.webp differ diff --git a/public/blog/media/2bf2a38129e4e968-720.webp b/public/blog/media/2bf2a38129e4e968-720.webp new file mode 100644 index 00000000..74013600 Binary files /dev/null and b/public/blog/media/2bf2a38129e4e968-720.webp differ diff --git a/public/blog/media/2cbb355680a586a2-1200.webp b/public/blog/media/2cbb355680a586a2-1200.webp new file mode 100644 index 00000000..56caccf3 Binary files /dev/null and b/public/blog/media/2cbb355680a586a2-1200.webp differ diff --git a/public/blog/media/2cbb355680a586a2-720.webp b/public/blog/media/2cbb355680a586a2-720.webp new file mode 100644 index 00000000..8337f8a1 Binary files /dev/null and b/public/blog/media/2cbb355680a586a2-720.webp differ diff --git a/public/blog/media/2e42c23c03e50b8e-1200.webp b/public/blog/media/2e42c23c03e50b8e-1200.webp new file mode 100644 index 00000000..91b39dbc Binary files /dev/null and b/public/blog/media/2e42c23c03e50b8e-1200.webp differ diff --git a/public/blog/media/2e42c23c03e50b8e-720.webp b/public/blog/media/2e42c23c03e50b8e-720.webp new file mode 100644 index 00000000..559a2de6 Binary files /dev/null and b/public/blog/media/2e42c23c03e50b8e-720.webp differ diff --git a/public/blog/media/30fbbed8a8261e52-1200.webp b/public/blog/media/30fbbed8a8261e52-1200.webp new file mode 100644 index 00000000..5feaaaaf Binary files /dev/null and b/public/blog/media/30fbbed8a8261e52-1200.webp differ diff --git a/public/blog/media/30fbbed8a8261e52-720.webp b/public/blog/media/30fbbed8a8261e52-720.webp new file mode 100644 index 00000000..4ec4d817 Binary files /dev/null and b/public/blog/media/30fbbed8a8261e52-720.webp differ diff --git a/public/blog/media/325d9b48f04c7f03-1200.webp b/public/blog/media/325d9b48f04c7f03-1200.webp new file mode 100644 index 00000000..93044b9f Binary files /dev/null and b/public/blog/media/325d9b48f04c7f03-1200.webp differ diff --git a/public/blog/media/325d9b48f04c7f03-720.webp b/public/blog/media/325d9b48f04c7f03-720.webp new file mode 100644 index 00000000..97e30908 Binary files /dev/null and b/public/blog/media/325d9b48f04c7f03-720.webp differ diff --git a/public/blog/media/33e540bbe9d0a6d3-1200.webp b/public/blog/media/33e540bbe9d0a6d3-1200.webp new file mode 100644 index 00000000..a5ca7dd9 Binary files /dev/null and b/public/blog/media/33e540bbe9d0a6d3-1200.webp differ diff --git a/public/blog/media/33e540bbe9d0a6d3-720.webp b/public/blog/media/33e540bbe9d0a6d3-720.webp new file mode 100644 index 00000000..2eba5c34 Binary files /dev/null and b/public/blog/media/33e540bbe9d0a6d3-720.webp differ diff --git a/public/blog/media/380781113e7198ce-1200.webp b/public/blog/media/380781113e7198ce-1200.webp new file mode 100644 index 00000000..b3d4ff28 Binary files /dev/null and b/public/blog/media/380781113e7198ce-1200.webp differ diff --git a/public/blog/media/380781113e7198ce-720.webp b/public/blog/media/380781113e7198ce-720.webp new file mode 100644 index 00000000..9770c3ce Binary files /dev/null and b/public/blog/media/380781113e7198ce-720.webp differ diff --git a/public/blog/media/3942399844d7aeb6-1200.webp b/public/blog/media/3942399844d7aeb6-1200.webp new file mode 100644 index 00000000..42674928 Binary files /dev/null and b/public/blog/media/3942399844d7aeb6-1200.webp differ diff --git a/public/blog/media/3942399844d7aeb6-720.webp b/public/blog/media/3942399844d7aeb6-720.webp new file mode 100644 index 00000000..8ec07414 Binary files /dev/null and b/public/blog/media/3942399844d7aeb6-720.webp differ diff --git a/public/blog/media/3a4b1f69d2e080da-1200.webp b/public/blog/media/3a4b1f69d2e080da-1200.webp new file mode 100644 index 00000000..bd79445b Binary files /dev/null and b/public/blog/media/3a4b1f69d2e080da-1200.webp differ diff --git a/public/blog/media/3a4b1f69d2e080da-720.webp b/public/blog/media/3a4b1f69d2e080da-720.webp new file mode 100644 index 00000000..64fb12b1 Binary files /dev/null and b/public/blog/media/3a4b1f69d2e080da-720.webp differ diff --git a/public/blog/media/3b63513906a2d714-1200.webp b/public/blog/media/3b63513906a2d714-1200.webp new file mode 100644 index 00000000..d2bf1d94 Binary files /dev/null and b/public/blog/media/3b63513906a2d714-1200.webp differ diff --git a/public/blog/media/3b63513906a2d714-720.webp b/public/blog/media/3b63513906a2d714-720.webp new file mode 100644 index 00000000..b11656b6 Binary files /dev/null and b/public/blog/media/3b63513906a2d714-720.webp differ diff --git a/public/blog/media/3e04e6e77e56cabd-1200.webp b/public/blog/media/3e04e6e77e56cabd-1200.webp new file mode 100644 index 00000000..fc10b046 Binary files /dev/null and b/public/blog/media/3e04e6e77e56cabd-1200.webp differ diff --git a/public/blog/media/3e04e6e77e56cabd-720.webp b/public/blog/media/3e04e6e77e56cabd-720.webp new file mode 100644 index 00000000..c92b9c0f Binary files /dev/null and b/public/blog/media/3e04e6e77e56cabd-720.webp differ diff --git a/public/blog/media/3e251af7051629cf-1200.webp b/public/blog/media/3e251af7051629cf-1200.webp new file mode 100644 index 00000000..e16da890 Binary files /dev/null and b/public/blog/media/3e251af7051629cf-1200.webp differ diff --git a/public/blog/media/3e251af7051629cf-720.webp b/public/blog/media/3e251af7051629cf-720.webp new file mode 100644 index 00000000..22eb55f1 Binary files /dev/null and b/public/blog/media/3e251af7051629cf-720.webp differ diff --git a/public/blog/media/3fec63807f28e80e-1200.webp b/public/blog/media/3fec63807f28e80e-1200.webp new file mode 100644 index 00000000..4821e67e Binary files /dev/null and b/public/blog/media/3fec63807f28e80e-1200.webp differ diff --git a/public/blog/media/3fec63807f28e80e-720.webp b/public/blog/media/3fec63807f28e80e-720.webp new file mode 100644 index 00000000..9352773f Binary files /dev/null and b/public/blog/media/3fec63807f28e80e-720.webp differ diff --git a/public/blog/media/40bbea0c6321220e-1200.webp b/public/blog/media/40bbea0c6321220e-1200.webp new file mode 100644 index 00000000..bd0ac263 Binary files /dev/null and b/public/blog/media/40bbea0c6321220e-1200.webp differ diff --git a/public/blog/media/40bbea0c6321220e-720.webp b/public/blog/media/40bbea0c6321220e-720.webp new file mode 100644 index 00000000..8cb04730 Binary files /dev/null and b/public/blog/media/40bbea0c6321220e-720.webp differ diff --git a/public/blog/media/40ce1f6c8c88ee31-1200.webp b/public/blog/media/40ce1f6c8c88ee31-1200.webp new file mode 100644 index 00000000..d715312b Binary files /dev/null and b/public/blog/media/40ce1f6c8c88ee31-1200.webp differ diff --git a/public/blog/media/40ce1f6c8c88ee31-720.webp b/public/blog/media/40ce1f6c8c88ee31-720.webp new file mode 100644 index 00000000..4f8457a9 Binary files /dev/null and b/public/blog/media/40ce1f6c8c88ee31-720.webp differ diff --git a/public/blog/media/42026e290a464998-1200.webp b/public/blog/media/42026e290a464998-1200.webp new file mode 100644 index 00000000..41c92577 Binary files /dev/null and b/public/blog/media/42026e290a464998-1200.webp differ diff --git a/public/blog/media/42026e290a464998-720.webp b/public/blog/media/42026e290a464998-720.webp new file mode 100644 index 00000000..59f859db Binary files /dev/null and b/public/blog/media/42026e290a464998-720.webp differ diff --git a/public/blog/media/4d318e30ccb04cc6-1200.webp b/public/blog/media/4d318e30ccb04cc6-1200.webp new file mode 100644 index 00000000..2725aec1 Binary files /dev/null and b/public/blog/media/4d318e30ccb04cc6-1200.webp differ diff --git a/public/blog/media/4d318e30ccb04cc6-720.webp b/public/blog/media/4d318e30ccb04cc6-720.webp new file mode 100644 index 00000000..d51665f1 Binary files /dev/null and b/public/blog/media/4d318e30ccb04cc6-720.webp differ diff --git a/public/blog/media/4d3b03b55d3fc542-1200.webp b/public/blog/media/4d3b03b55d3fc542-1200.webp new file mode 100644 index 00000000..89862aec Binary files /dev/null and b/public/blog/media/4d3b03b55d3fc542-1200.webp differ diff --git a/public/blog/media/4d3b03b55d3fc542-720.webp b/public/blog/media/4d3b03b55d3fc542-720.webp new file mode 100644 index 00000000..68005948 Binary files /dev/null and b/public/blog/media/4d3b03b55d3fc542-720.webp differ diff --git a/public/blog/media/53ba5aaa0b2ebaa9-1200.webp b/public/blog/media/53ba5aaa0b2ebaa9-1200.webp new file mode 100644 index 00000000..36277061 Binary files /dev/null and b/public/blog/media/53ba5aaa0b2ebaa9-1200.webp differ diff --git a/public/blog/media/53ba5aaa0b2ebaa9-720.webp b/public/blog/media/53ba5aaa0b2ebaa9-720.webp new file mode 100644 index 00000000..022a3651 Binary files /dev/null and b/public/blog/media/53ba5aaa0b2ebaa9-720.webp differ diff --git a/public/blog/media/55966b59864bbf22-1200.webp b/public/blog/media/55966b59864bbf22-1200.webp new file mode 100644 index 00000000..be103828 Binary files /dev/null and b/public/blog/media/55966b59864bbf22-1200.webp differ diff --git a/public/blog/media/55966b59864bbf22-720.webp b/public/blog/media/55966b59864bbf22-720.webp new file mode 100644 index 00000000..65f513f6 Binary files /dev/null and b/public/blog/media/55966b59864bbf22-720.webp differ diff --git a/public/blog/media/5706a321bc66186e-1200.webp b/public/blog/media/5706a321bc66186e-1200.webp new file mode 100644 index 00000000..3eb8ded6 Binary files /dev/null and b/public/blog/media/5706a321bc66186e-1200.webp differ diff --git a/public/blog/media/5706a321bc66186e-720.webp b/public/blog/media/5706a321bc66186e-720.webp new file mode 100644 index 00000000..861c40e9 Binary files /dev/null and b/public/blog/media/5706a321bc66186e-720.webp differ diff --git a/public/blog/media/5f2f91716ca0652c-1073.webp b/public/blog/media/5f2f91716ca0652c-1073.webp new file mode 100644 index 00000000..43557ff3 Binary files /dev/null and b/public/blog/media/5f2f91716ca0652c-1073.webp differ diff --git a/public/blog/media/5f2f91716ca0652c-720.webp b/public/blog/media/5f2f91716ca0652c-720.webp new file mode 100644 index 00000000..f292dab6 Binary files /dev/null and b/public/blog/media/5f2f91716ca0652c-720.webp differ diff --git a/public/blog/media/61d086545e7c0683-1200.webp b/public/blog/media/61d086545e7c0683-1200.webp new file mode 100644 index 00000000..73b56eea Binary files /dev/null and b/public/blog/media/61d086545e7c0683-1200.webp differ diff --git a/public/blog/media/61d086545e7c0683-720.webp b/public/blog/media/61d086545e7c0683-720.webp new file mode 100644 index 00000000..46785ae0 Binary files /dev/null and b/public/blog/media/61d086545e7c0683-720.webp differ diff --git a/public/blog/media/630a5d24633040a3-1200.webp b/public/blog/media/630a5d24633040a3-1200.webp new file mode 100644 index 00000000..be6605ad Binary files /dev/null and b/public/blog/media/630a5d24633040a3-1200.webp differ diff --git a/public/blog/media/630a5d24633040a3-720.webp b/public/blog/media/630a5d24633040a3-720.webp new file mode 100644 index 00000000..1a6b74c4 Binary files /dev/null and b/public/blog/media/630a5d24633040a3-720.webp differ diff --git a/public/blog/media/65aca64b4ea28a1f-1200.webp b/public/blog/media/65aca64b4ea28a1f-1200.webp new file mode 100644 index 00000000..b4fdf539 Binary files /dev/null and b/public/blog/media/65aca64b4ea28a1f-1200.webp differ diff --git a/public/blog/media/65aca64b4ea28a1f-720.webp b/public/blog/media/65aca64b4ea28a1f-720.webp new file mode 100644 index 00000000..6f7f3e47 Binary files /dev/null and b/public/blog/media/65aca64b4ea28a1f-720.webp differ diff --git a/public/blog/media/678ad364a0911dfe-1200.webp b/public/blog/media/678ad364a0911dfe-1200.webp new file mode 100644 index 00000000..dd50d755 Binary files /dev/null and b/public/blog/media/678ad364a0911dfe-1200.webp differ diff --git a/public/blog/media/678ad364a0911dfe-720.webp b/public/blog/media/678ad364a0911dfe-720.webp new file mode 100644 index 00000000..b079ea32 Binary files /dev/null and b/public/blog/media/678ad364a0911dfe-720.webp differ diff --git a/public/blog/media/6e312fd23512c097-1200.webp b/public/blog/media/6e312fd23512c097-1200.webp new file mode 100644 index 00000000..e2dfa53a Binary files /dev/null and b/public/blog/media/6e312fd23512c097-1200.webp differ diff --git a/public/blog/media/6e312fd23512c097-720.webp b/public/blog/media/6e312fd23512c097-720.webp new file mode 100644 index 00000000..94306f6d Binary files /dev/null and b/public/blog/media/6e312fd23512c097-720.webp differ diff --git a/public/blog/media/6ef44a61e043306e-1200.webp b/public/blog/media/6ef44a61e043306e-1200.webp new file mode 100644 index 00000000..8ca6279c Binary files /dev/null and b/public/blog/media/6ef44a61e043306e-1200.webp differ diff --git a/public/blog/media/6ef44a61e043306e-720.webp b/public/blog/media/6ef44a61e043306e-720.webp new file mode 100644 index 00000000..286e32a5 Binary files /dev/null and b/public/blog/media/6ef44a61e043306e-720.webp differ diff --git a/public/blog/media/6f47f46c79c06d0d-1200.webp b/public/blog/media/6f47f46c79c06d0d-1200.webp new file mode 100644 index 00000000..83266d6e Binary files /dev/null and b/public/blog/media/6f47f46c79c06d0d-1200.webp differ diff --git a/public/blog/media/6f47f46c79c06d0d-720.webp b/public/blog/media/6f47f46c79c06d0d-720.webp new file mode 100644 index 00000000..6a818da9 Binary files /dev/null and b/public/blog/media/6f47f46c79c06d0d-720.webp differ diff --git a/public/blog/media/72142021fb900f9d-1200.webp b/public/blog/media/72142021fb900f9d-1200.webp new file mode 100644 index 00000000..1022a013 Binary files /dev/null and b/public/blog/media/72142021fb900f9d-1200.webp differ diff --git a/public/blog/media/72142021fb900f9d-720.webp b/public/blog/media/72142021fb900f9d-720.webp new file mode 100644 index 00000000..436c755b Binary files /dev/null and b/public/blog/media/72142021fb900f9d-720.webp differ diff --git a/public/blog/media/75af61ad154e6b56-1073.webp b/public/blog/media/75af61ad154e6b56-1073.webp new file mode 100644 index 00000000..3ebe99d0 Binary files /dev/null and b/public/blog/media/75af61ad154e6b56-1073.webp differ diff --git a/public/blog/media/75af61ad154e6b56-720.webp b/public/blog/media/75af61ad154e6b56-720.webp new file mode 100644 index 00000000..be33f890 Binary files /dev/null and b/public/blog/media/75af61ad154e6b56-720.webp differ diff --git a/public/blog/media/78fe64d3edf26b17-1073.webp b/public/blog/media/78fe64d3edf26b17-1073.webp new file mode 100644 index 00000000..5a502306 Binary files /dev/null and b/public/blog/media/78fe64d3edf26b17-1073.webp differ diff --git a/public/blog/media/78fe64d3edf26b17-720.webp b/public/blog/media/78fe64d3edf26b17-720.webp new file mode 100644 index 00000000..71dcbada Binary files /dev/null and b/public/blog/media/78fe64d3edf26b17-720.webp differ diff --git a/public/blog/media/7a826932a9fd0b64-1073.webp b/public/blog/media/7a826932a9fd0b64-1073.webp new file mode 100644 index 00000000..1ae72064 Binary files /dev/null and b/public/blog/media/7a826932a9fd0b64-1073.webp differ diff --git a/public/blog/media/7a826932a9fd0b64-720.webp b/public/blog/media/7a826932a9fd0b64-720.webp new file mode 100644 index 00000000..acdc873f Binary files /dev/null and b/public/blog/media/7a826932a9fd0b64-720.webp differ diff --git a/public/blog/media/83426afdcda850af-1200.webp b/public/blog/media/83426afdcda850af-1200.webp new file mode 100644 index 00000000..a796a76a Binary files /dev/null and b/public/blog/media/83426afdcda850af-1200.webp differ diff --git a/public/blog/media/83426afdcda850af-720.webp b/public/blog/media/83426afdcda850af-720.webp new file mode 100644 index 00000000..1f326a3a Binary files /dev/null and b/public/blog/media/83426afdcda850af-720.webp differ diff --git a/public/blog/media/83ad11d0c0dfc9e4-1200.webp b/public/blog/media/83ad11d0c0dfc9e4-1200.webp new file mode 100644 index 00000000..e16fa9cc Binary files /dev/null and b/public/blog/media/83ad11d0c0dfc9e4-1200.webp differ diff --git a/public/blog/media/83ad11d0c0dfc9e4-720.webp b/public/blog/media/83ad11d0c0dfc9e4-720.webp new file mode 100644 index 00000000..a96aecf3 Binary files /dev/null and b/public/blog/media/83ad11d0c0dfc9e4-720.webp differ diff --git a/public/blog/media/83facb32c7a2286c-1073.webp b/public/blog/media/83facb32c7a2286c-1073.webp new file mode 100644 index 00000000..cf04b31d Binary files /dev/null and b/public/blog/media/83facb32c7a2286c-1073.webp differ diff --git a/public/blog/media/83facb32c7a2286c-720.webp b/public/blog/media/83facb32c7a2286c-720.webp new file mode 100644 index 00000000..7449ddb0 Binary files /dev/null and b/public/blog/media/83facb32c7a2286c-720.webp differ diff --git a/public/blog/media/873dbb02beb43e30-1073.webp b/public/blog/media/873dbb02beb43e30-1073.webp new file mode 100644 index 00000000..42d71db3 Binary files /dev/null and b/public/blog/media/873dbb02beb43e30-1073.webp differ diff --git a/public/blog/media/873dbb02beb43e30-720.webp b/public/blog/media/873dbb02beb43e30-720.webp new file mode 100644 index 00000000..0616eeb4 Binary files /dev/null and b/public/blog/media/873dbb02beb43e30-720.webp differ diff --git a/public/blog/media/8a0ae6aff7ae9a27-1200.webp b/public/blog/media/8a0ae6aff7ae9a27-1200.webp new file mode 100644 index 00000000..cf49fc23 Binary files /dev/null and b/public/blog/media/8a0ae6aff7ae9a27-1200.webp differ diff --git a/public/blog/media/8a0ae6aff7ae9a27-720.webp b/public/blog/media/8a0ae6aff7ae9a27-720.webp new file mode 100644 index 00000000..218c530c Binary files /dev/null and b/public/blog/media/8a0ae6aff7ae9a27-720.webp differ diff --git a/public/blog/media/8a134899b9ddc3f1-1200.webp b/public/blog/media/8a134899b9ddc3f1-1200.webp new file mode 100644 index 00000000..ae6147c5 Binary files /dev/null and b/public/blog/media/8a134899b9ddc3f1-1200.webp differ diff --git a/public/blog/media/8a134899b9ddc3f1-720.webp b/public/blog/media/8a134899b9ddc3f1-720.webp new file mode 100644 index 00000000..692e5a5f Binary files /dev/null and b/public/blog/media/8a134899b9ddc3f1-720.webp differ diff --git a/public/blog/media/8f61d277dc9a213c-1200.webp b/public/blog/media/8f61d277dc9a213c-1200.webp new file mode 100644 index 00000000..70123e69 Binary files /dev/null and b/public/blog/media/8f61d277dc9a213c-1200.webp differ diff --git a/public/blog/media/8f61d277dc9a213c-720.webp b/public/blog/media/8f61d277dc9a213c-720.webp new file mode 100644 index 00000000..da866a06 Binary files /dev/null and b/public/blog/media/8f61d277dc9a213c-720.webp differ diff --git a/public/blog/media/901907c01a1dd56f-1200.webp b/public/blog/media/901907c01a1dd56f-1200.webp new file mode 100644 index 00000000..1b7e3a02 Binary files /dev/null and b/public/blog/media/901907c01a1dd56f-1200.webp differ diff --git a/public/blog/media/901907c01a1dd56f-720.webp b/public/blog/media/901907c01a1dd56f-720.webp new file mode 100644 index 00000000..946d6734 Binary files /dev/null and b/public/blog/media/901907c01a1dd56f-720.webp differ diff --git a/public/blog/media/91a41cbbe038f45e-1200.webp b/public/blog/media/91a41cbbe038f45e-1200.webp new file mode 100644 index 00000000..3e01045e Binary files /dev/null and b/public/blog/media/91a41cbbe038f45e-1200.webp differ diff --git a/public/blog/media/91a41cbbe038f45e-720.webp b/public/blog/media/91a41cbbe038f45e-720.webp new file mode 100644 index 00000000..99fa48f5 Binary files /dev/null and b/public/blog/media/91a41cbbe038f45e-720.webp differ diff --git a/public/blog/media/9251d2a8512361ac-1200.webp b/public/blog/media/9251d2a8512361ac-1200.webp new file mode 100644 index 00000000..5923e765 Binary files /dev/null and b/public/blog/media/9251d2a8512361ac-1200.webp differ diff --git a/public/blog/media/9251d2a8512361ac-720.webp b/public/blog/media/9251d2a8512361ac-720.webp new file mode 100644 index 00000000..ec75b783 Binary files /dev/null and b/public/blog/media/9251d2a8512361ac-720.webp differ diff --git a/public/blog/media/97f79eba57ff5e75-1200.webp b/public/blog/media/97f79eba57ff5e75-1200.webp new file mode 100644 index 00000000..72f5f6a3 Binary files /dev/null and b/public/blog/media/97f79eba57ff5e75-1200.webp differ diff --git a/public/blog/media/97f79eba57ff5e75-720.webp b/public/blog/media/97f79eba57ff5e75-720.webp new file mode 100644 index 00000000..148b5727 Binary files /dev/null and b/public/blog/media/97f79eba57ff5e75-720.webp differ diff --git a/public/blog/media/9a2cecf4c212a102-1080.webp b/public/blog/media/9a2cecf4c212a102-1080.webp new file mode 100644 index 00000000..7843c339 Binary files /dev/null and b/public/blog/media/9a2cecf4c212a102-1080.webp differ diff --git a/public/blog/media/9a2cecf4c212a102-720.webp b/public/blog/media/9a2cecf4c212a102-720.webp new file mode 100644 index 00000000..307db58d Binary files /dev/null and b/public/blog/media/9a2cecf4c212a102-720.webp differ diff --git a/public/blog/media/9a81fa6e52df4665-1200.webp b/public/blog/media/9a81fa6e52df4665-1200.webp new file mode 100644 index 00000000..f8e79d05 Binary files /dev/null and b/public/blog/media/9a81fa6e52df4665-1200.webp differ diff --git a/public/blog/media/9a81fa6e52df4665-720.webp b/public/blog/media/9a81fa6e52df4665-720.webp new file mode 100644 index 00000000..0297842d Binary files /dev/null and b/public/blog/media/9a81fa6e52df4665-720.webp differ diff --git a/public/blog/media/9b1bf3149d7e1e80-1200.webp b/public/blog/media/9b1bf3149d7e1e80-1200.webp new file mode 100644 index 00000000..05224f5e Binary files /dev/null and b/public/blog/media/9b1bf3149d7e1e80-1200.webp differ diff --git a/public/blog/media/9b1bf3149d7e1e80-720.webp b/public/blog/media/9b1bf3149d7e1e80-720.webp new file mode 100644 index 00000000..0a3b619e Binary files /dev/null and b/public/blog/media/9b1bf3149d7e1e80-720.webp differ diff --git a/public/blog/media/9b7fa5637ce368e1-1200.webp b/public/blog/media/9b7fa5637ce368e1-1200.webp new file mode 100644 index 00000000..12863102 Binary files /dev/null and b/public/blog/media/9b7fa5637ce368e1-1200.webp differ diff --git a/public/blog/media/9b7fa5637ce368e1-720.webp b/public/blog/media/9b7fa5637ce368e1-720.webp new file mode 100644 index 00000000..8cad1061 Binary files /dev/null and b/public/blog/media/9b7fa5637ce368e1-720.webp differ diff --git a/public/blog/media/9d19911733209182-1200.webp b/public/blog/media/9d19911733209182-1200.webp new file mode 100644 index 00000000..22804092 Binary files /dev/null and b/public/blog/media/9d19911733209182-1200.webp differ diff --git a/public/blog/media/9d19911733209182-720.webp b/public/blog/media/9d19911733209182-720.webp new file mode 100644 index 00000000..73a28c3f Binary files /dev/null and b/public/blog/media/9d19911733209182-720.webp differ diff --git a/public/blog/media/9dfbf22635e0bf8d-1200.webp b/public/blog/media/9dfbf22635e0bf8d-1200.webp new file mode 100644 index 00000000..ff8815ad Binary files /dev/null and b/public/blog/media/9dfbf22635e0bf8d-1200.webp differ diff --git a/public/blog/media/9dfbf22635e0bf8d-720.webp b/public/blog/media/9dfbf22635e0bf8d-720.webp new file mode 100644 index 00000000..4ea5b42a Binary files /dev/null and b/public/blog/media/9dfbf22635e0bf8d-720.webp differ diff --git a/public/blog/media/a0d1b772e9324c5a-1200.webp b/public/blog/media/a0d1b772e9324c5a-1200.webp new file mode 100644 index 00000000..8b050433 Binary files /dev/null and b/public/blog/media/a0d1b772e9324c5a-1200.webp differ diff --git a/public/blog/media/a0d1b772e9324c5a-720.webp b/public/blog/media/a0d1b772e9324c5a-720.webp new file mode 100644 index 00000000..9c767fb9 Binary files /dev/null and b/public/blog/media/a0d1b772e9324c5a-720.webp differ diff --git a/public/blog/media/a3d4c115bf344ff1-1200.webp b/public/blog/media/a3d4c115bf344ff1-1200.webp new file mode 100644 index 00000000..14a569b7 Binary files /dev/null and b/public/blog/media/a3d4c115bf344ff1-1200.webp differ diff --git a/public/blog/media/a3d4c115bf344ff1-720.webp b/public/blog/media/a3d4c115bf344ff1-720.webp new file mode 100644 index 00000000..00b6b3eb Binary files /dev/null and b/public/blog/media/a3d4c115bf344ff1-720.webp differ diff --git a/public/blog/media/a4943505ef9eda37-1073.webp b/public/blog/media/a4943505ef9eda37-1073.webp new file mode 100644 index 00000000..15f4cd97 Binary files /dev/null and b/public/blog/media/a4943505ef9eda37-1073.webp differ diff --git a/public/blog/media/a4943505ef9eda37-720.webp b/public/blog/media/a4943505ef9eda37-720.webp new file mode 100644 index 00000000..995e0bda Binary files /dev/null and b/public/blog/media/a4943505ef9eda37-720.webp differ diff --git a/public/blog/media/a66d9f1031c70288-1073.webp b/public/blog/media/a66d9f1031c70288-1073.webp new file mode 100644 index 00000000..0af6f9ae Binary files /dev/null and b/public/blog/media/a66d9f1031c70288-1073.webp differ diff --git a/public/blog/media/a66d9f1031c70288-720.webp b/public/blog/media/a66d9f1031c70288-720.webp new file mode 100644 index 00000000..cafed80e Binary files /dev/null and b/public/blog/media/a66d9f1031c70288-720.webp differ diff --git a/public/blog/media/a691cdcae512ce41-1200.webp b/public/blog/media/a691cdcae512ce41-1200.webp new file mode 100644 index 00000000..fd1baaa0 Binary files /dev/null and b/public/blog/media/a691cdcae512ce41-1200.webp differ diff --git a/public/blog/media/a691cdcae512ce41-720.webp b/public/blog/media/a691cdcae512ce41-720.webp new file mode 100644 index 00000000..41af430e Binary files /dev/null and b/public/blog/media/a691cdcae512ce41-720.webp differ diff --git a/public/blog/media/a6e56c36069592e3-1080.webp b/public/blog/media/a6e56c36069592e3-1080.webp new file mode 100644 index 00000000..3959128b Binary files /dev/null and b/public/blog/media/a6e56c36069592e3-1080.webp differ diff --git a/public/blog/media/a6e56c36069592e3-720.webp b/public/blog/media/a6e56c36069592e3-720.webp new file mode 100644 index 00000000..c1318853 Binary files /dev/null and b/public/blog/media/a6e56c36069592e3-720.webp differ diff --git a/public/blog/media/a88faa99b86c89b3-1200.webp b/public/blog/media/a88faa99b86c89b3-1200.webp new file mode 100644 index 00000000..b713e644 Binary files /dev/null and b/public/blog/media/a88faa99b86c89b3-1200.webp differ diff --git a/public/blog/media/a88faa99b86c89b3-720.webp b/public/blog/media/a88faa99b86c89b3-720.webp new file mode 100644 index 00000000..17e1bfe8 Binary files /dev/null and b/public/blog/media/a88faa99b86c89b3-720.webp differ diff --git a/public/blog/media/a8f2319ac1f24c3e-1073.webp b/public/blog/media/a8f2319ac1f24c3e-1073.webp new file mode 100644 index 00000000..bcc7b205 Binary files /dev/null and b/public/blog/media/a8f2319ac1f24c3e-1073.webp differ diff --git a/public/blog/media/a8f2319ac1f24c3e-720.webp b/public/blog/media/a8f2319ac1f24c3e-720.webp new file mode 100644 index 00000000..e43efd7d Binary files /dev/null and b/public/blog/media/a8f2319ac1f24c3e-720.webp differ diff --git a/public/blog/media/aa00cb4e02bdd925-1080.webp b/public/blog/media/aa00cb4e02bdd925-1080.webp new file mode 100644 index 00000000..9bcb2cdb Binary files /dev/null and b/public/blog/media/aa00cb4e02bdd925-1080.webp differ diff --git a/public/blog/media/aa00cb4e02bdd925-720.webp b/public/blog/media/aa00cb4e02bdd925-720.webp new file mode 100644 index 00000000..57e4d733 Binary files /dev/null and b/public/blog/media/aa00cb4e02bdd925-720.webp differ diff --git a/public/blog/media/ae49b8701642e7d0-1200.webp b/public/blog/media/ae49b8701642e7d0-1200.webp new file mode 100644 index 00000000..101794c5 Binary files /dev/null and b/public/blog/media/ae49b8701642e7d0-1200.webp differ diff --git a/public/blog/media/ae49b8701642e7d0-720.webp b/public/blog/media/ae49b8701642e7d0-720.webp new file mode 100644 index 00000000..7b95a514 Binary files /dev/null and b/public/blog/media/ae49b8701642e7d0-720.webp differ diff --git a/public/blog/media/afa0ccf0df1bf736-1200.webp b/public/blog/media/afa0ccf0df1bf736-1200.webp new file mode 100644 index 00000000..0c8b0505 Binary files /dev/null and b/public/blog/media/afa0ccf0df1bf736-1200.webp differ diff --git a/public/blog/media/afa0ccf0df1bf736-720.webp b/public/blog/media/afa0ccf0df1bf736-720.webp new file mode 100644 index 00000000..593f4e72 Binary files /dev/null and b/public/blog/media/afa0ccf0df1bf736-720.webp differ diff --git a/public/blog/media/afe8de2ccd8ea3e8-1200.webp b/public/blog/media/afe8de2ccd8ea3e8-1200.webp new file mode 100644 index 00000000..1dcdf02e Binary files /dev/null and b/public/blog/media/afe8de2ccd8ea3e8-1200.webp differ diff --git a/public/blog/media/afe8de2ccd8ea3e8-720.webp b/public/blog/media/afe8de2ccd8ea3e8-720.webp new file mode 100644 index 00000000..cf0daf83 Binary files /dev/null and b/public/blog/media/afe8de2ccd8ea3e8-720.webp differ diff --git a/public/blog/media/b035de76bee4748a-1080.webp b/public/blog/media/b035de76bee4748a-1080.webp new file mode 100644 index 00000000..b48c432d Binary files /dev/null and b/public/blog/media/b035de76bee4748a-1080.webp differ diff --git a/public/blog/media/b035de76bee4748a-720.webp b/public/blog/media/b035de76bee4748a-720.webp new file mode 100644 index 00000000..864cc7b7 Binary files /dev/null and b/public/blog/media/b035de76bee4748a-720.webp differ diff --git a/public/blog/media/b286b4f574ab1374-1200.webp b/public/blog/media/b286b4f574ab1374-1200.webp new file mode 100644 index 00000000..0ab399f7 Binary files /dev/null and b/public/blog/media/b286b4f574ab1374-1200.webp differ diff --git a/public/blog/media/b286b4f574ab1374-720.webp b/public/blog/media/b286b4f574ab1374-720.webp new file mode 100644 index 00000000..e4865c10 Binary files /dev/null and b/public/blog/media/b286b4f574ab1374-720.webp differ diff --git a/public/blog/media/b4a1d322372fe2a1-1200.webp b/public/blog/media/b4a1d322372fe2a1-1200.webp new file mode 100644 index 00000000..4508ffe9 Binary files /dev/null and b/public/blog/media/b4a1d322372fe2a1-1200.webp differ diff --git a/public/blog/media/b4a1d322372fe2a1-720.webp b/public/blog/media/b4a1d322372fe2a1-720.webp new file mode 100644 index 00000000..601f7445 Binary files /dev/null and b/public/blog/media/b4a1d322372fe2a1-720.webp differ diff --git a/public/blog/media/b4aa1a988fc6bc8b-1200.webp b/public/blog/media/b4aa1a988fc6bc8b-1200.webp new file mode 100644 index 00000000..21aa08fc Binary files /dev/null and b/public/blog/media/b4aa1a988fc6bc8b-1200.webp differ diff --git a/public/blog/media/b4aa1a988fc6bc8b-720.webp b/public/blog/media/b4aa1a988fc6bc8b-720.webp new file mode 100644 index 00000000..69d21292 Binary files /dev/null and b/public/blog/media/b4aa1a988fc6bc8b-720.webp differ diff --git a/public/blog/media/b59026c306ca02a3-1200.webp b/public/blog/media/b59026c306ca02a3-1200.webp new file mode 100644 index 00000000..728d95fd Binary files /dev/null and b/public/blog/media/b59026c306ca02a3-1200.webp differ diff --git a/public/blog/media/b59026c306ca02a3-720.webp b/public/blog/media/b59026c306ca02a3-720.webp new file mode 100644 index 00000000..1693f806 Binary files /dev/null and b/public/blog/media/b59026c306ca02a3-720.webp differ diff --git a/public/blog/media/b8cf8571b5ac2c95-1200.webp b/public/blog/media/b8cf8571b5ac2c95-1200.webp new file mode 100644 index 00000000..e7ed6c2b Binary files /dev/null and b/public/blog/media/b8cf8571b5ac2c95-1200.webp differ diff --git a/public/blog/media/b8cf8571b5ac2c95-720.webp b/public/blog/media/b8cf8571b5ac2c95-720.webp new file mode 100644 index 00000000..6896af4f Binary files /dev/null and b/public/blog/media/b8cf8571b5ac2c95-720.webp differ diff --git a/public/blog/media/b996c1e998194635-1200.webp b/public/blog/media/b996c1e998194635-1200.webp new file mode 100644 index 00000000..abb92003 Binary files /dev/null and b/public/blog/media/b996c1e998194635-1200.webp differ diff --git a/public/blog/media/b996c1e998194635-720.webp b/public/blog/media/b996c1e998194635-720.webp new file mode 100644 index 00000000..d6820b5c Binary files /dev/null and b/public/blog/media/b996c1e998194635-720.webp differ diff --git a/public/blog/media/bad389d76b6bb7d3-1073.webp b/public/blog/media/bad389d76b6bb7d3-1073.webp new file mode 100644 index 00000000..af718306 Binary files /dev/null and b/public/blog/media/bad389d76b6bb7d3-1073.webp differ diff --git a/public/blog/media/bad389d76b6bb7d3-720.webp b/public/blog/media/bad389d76b6bb7d3-720.webp new file mode 100644 index 00000000..9a47c122 Binary files /dev/null and b/public/blog/media/bad389d76b6bb7d3-720.webp differ diff --git a/public/blog/media/bb035eeeeec02b3d-1200.webp b/public/blog/media/bb035eeeeec02b3d-1200.webp new file mode 100644 index 00000000..a972f42a Binary files /dev/null and b/public/blog/media/bb035eeeeec02b3d-1200.webp differ diff --git a/public/blog/media/bb035eeeeec02b3d-720.webp b/public/blog/media/bb035eeeeec02b3d-720.webp new file mode 100644 index 00000000..342d1945 Binary files /dev/null and b/public/blog/media/bb035eeeeec02b3d-720.webp differ diff --git a/public/blog/media/bd72d7a147f271d0-1073.webp b/public/blog/media/bd72d7a147f271d0-1073.webp new file mode 100644 index 00000000..a6fb854b Binary files /dev/null and b/public/blog/media/bd72d7a147f271d0-1073.webp differ diff --git a/public/blog/media/bd72d7a147f271d0-720.webp b/public/blog/media/bd72d7a147f271d0-720.webp new file mode 100644 index 00000000..ecbb6e75 Binary files /dev/null and b/public/blog/media/bd72d7a147f271d0-720.webp differ diff --git a/public/blog/media/c095d1340ccfe6a6-1200.webp b/public/blog/media/c095d1340ccfe6a6-1200.webp new file mode 100644 index 00000000..0683b0b9 Binary files /dev/null and b/public/blog/media/c095d1340ccfe6a6-1200.webp differ diff --git a/public/blog/media/c095d1340ccfe6a6-720.webp b/public/blog/media/c095d1340ccfe6a6-720.webp new file mode 100644 index 00000000..0066efce Binary files /dev/null and b/public/blog/media/c095d1340ccfe6a6-720.webp differ diff --git a/public/blog/media/c5777d1a8a0558be-1200.webp b/public/blog/media/c5777d1a8a0558be-1200.webp new file mode 100644 index 00000000..0c3a6906 Binary files /dev/null and b/public/blog/media/c5777d1a8a0558be-1200.webp differ diff --git a/public/blog/media/c5777d1a8a0558be-720.webp b/public/blog/media/c5777d1a8a0558be-720.webp new file mode 100644 index 00000000..78eee4b2 Binary files /dev/null and b/public/blog/media/c5777d1a8a0558be-720.webp differ diff --git a/public/blog/media/ca8f7fb2cddf4021-1200.webp b/public/blog/media/ca8f7fb2cddf4021-1200.webp new file mode 100644 index 00000000..b805abfa Binary files /dev/null and b/public/blog/media/ca8f7fb2cddf4021-1200.webp differ diff --git a/public/blog/media/ca8f7fb2cddf4021-720.webp b/public/blog/media/ca8f7fb2cddf4021-720.webp new file mode 100644 index 00000000..2181e25f Binary files /dev/null and b/public/blog/media/ca8f7fb2cddf4021-720.webp differ diff --git a/public/blog/media/caff50e5c834fac5-1200.webp b/public/blog/media/caff50e5c834fac5-1200.webp new file mode 100644 index 00000000..1828fbf0 Binary files /dev/null and b/public/blog/media/caff50e5c834fac5-1200.webp differ diff --git a/public/blog/media/caff50e5c834fac5-720.webp b/public/blog/media/caff50e5c834fac5-720.webp new file mode 100644 index 00000000..91cd8d30 Binary files /dev/null and b/public/blog/media/caff50e5c834fac5-720.webp differ diff --git a/public/blog/media/cc549a53f6aa624e-1200.webp b/public/blog/media/cc549a53f6aa624e-1200.webp new file mode 100644 index 00000000..06523903 Binary files /dev/null and b/public/blog/media/cc549a53f6aa624e-1200.webp differ diff --git a/public/blog/media/cc549a53f6aa624e-720.webp b/public/blog/media/cc549a53f6aa624e-720.webp new file mode 100644 index 00000000..a466bb5b Binary files /dev/null and b/public/blog/media/cc549a53f6aa624e-720.webp differ diff --git a/public/blog/media/cfc2683388aa24a3-1200.webp b/public/blog/media/cfc2683388aa24a3-1200.webp new file mode 100644 index 00000000..6f56d3c0 Binary files /dev/null and b/public/blog/media/cfc2683388aa24a3-1200.webp differ diff --git a/public/blog/media/cfc2683388aa24a3-720.webp b/public/blog/media/cfc2683388aa24a3-720.webp new file mode 100644 index 00000000..15d008f8 Binary files /dev/null and b/public/blog/media/cfc2683388aa24a3-720.webp differ diff --git a/public/blog/media/cff5e8614470344b-1080.webp b/public/blog/media/cff5e8614470344b-1080.webp new file mode 100644 index 00000000..d9eafad5 Binary files /dev/null and b/public/blog/media/cff5e8614470344b-1080.webp differ diff --git a/public/blog/media/cff5e8614470344b-720.webp b/public/blog/media/cff5e8614470344b-720.webp new file mode 100644 index 00000000..f24db4ca Binary files /dev/null and b/public/blog/media/cff5e8614470344b-720.webp differ diff --git a/public/blog/media/d0a55b18806cdc9a-1200.webp b/public/blog/media/d0a55b18806cdc9a-1200.webp new file mode 100644 index 00000000..f3d797fc Binary files /dev/null and b/public/blog/media/d0a55b18806cdc9a-1200.webp differ diff --git a/public/blog/media/d0a55b18806cdc9a-720.webp b/public/blog/media/d0a55b18806cdc9a-720.webp new file mode 100644 index 00000000..8edefda7 Binary files /dev/null and b/public/blog/media/d0a55b18806cdc9a-720.webp differ diff --git a/public/blog/media/d9cda989a04373e6-1200.webp b/public/blog/media/d9cda989a04373e6-1200.webp new file mode 100644 index 00000000..95ca6d90 Binary files /dev/null and b/public/blog/media/d9cda989a04373e6-1200.webp differ diff --git a/public/blog/media/d9cda989a04373e6-720.webp b/public/blog/media/d9cda989a04373e6-720.webp new file mode 100644 index 00000000..24df5ac9 Binary files /dev/null and b/public/blog/media/d9cda989a04373e6-720.webp differ diff --git a/public/blog/media/dd11d1f1e085d055-1200.webp b/public/blog/media/dd11d1f1e085d055-1200.webp new file mode 100644 index 00000000..cb3c010d Binary files /dev/null and b/public/blog/media/dd11d1f1e085d055-1200.webp differ diff --git a/public/blog/media/dd11d1f1e085d055-720.webp b/public/blog/media/dd11d1f1e085d055-720.webp new file mode 100644 index 00000000..148a9f71 Binary files /dev/null and b/public/blog/media/dd11d1f1e085d055-720.webp differ diff --git a/public/blog/media/ddc3ca490ce610d7-1073.webp b/public/blog/media/ddc3ca490ce610d7-1073.webp new file mode 100644 index 00000000..4b4732bf Binary files /dev/null and b/public/blog/media/ddc3ca490ce610d7-1073.webp differ diff --git a/public/blog/media/ddc3ca490ce610d7-720.webp b/public/blog/media/ddc3ca490ce610d7-720.webp new file mode 100644 index 00000000..b1070532 Binary files /dev/null and b/public/blog/media/ddc3ca490ce610d7-720.webp differ diff --git a/public/blog/media/df9194a6240ebd66-1107.webp b/public/blog/media/df9194a6240ebd66-1107.webp new file mode 100644 index 00000000..e1e44adf Binary files /dev/null and b/public/blog/media/df9194a6240ebd66-1107.webp differ diff --git a/public/blog/media/df9194a6240ebd66-720.webp b/public/blog/media/df9194a6240ebd66-720.webp new file mode 100644 index 00000000..28d469a2 Binary files /dev/null and b/public/blog/media/df9194a6240ebd66-720.webp differ diff --git a/public/blog/media/e3d0ffacd2884d3f-1080.webp b/public/blog/media/e3d0ffacd2884d3f-1080.webp new file mode 100644 index 00000000..7e040c54 Binary files /dev/null and b/public/blog/media/e3d0ffacd2884d3f-1080.webp differ diff --git a/public/blog/media/e3d0ffacd2884d3f-720.webp b/public/blog/media/e3d0ffacd2884d3f-720.webp new file mode 100644 index 00000000..71589cd4 Binary files /dev/null and b/public/blog/media/e3d0ffacd2884d3f-720.webp differ diff --git a/public/blog/media/e493afa2bd8df524-1073.webp b/public/blog/media/e493afa2bd8df524-1073.webp new file mode 100644 index 00000000..a33fdcdd Binary files /dev/null and b/public/blog/media/e493afa2bd8df524-1073.webp differ diff --git a/public/blog/media/e493afa2bd8df524-720.webp b/public/blog/media/e493afa2bd8df524-720.webp new file mode 100644 index 00000000..35419dd2 Binary files /dev/null and b/public/blog/media/e493afa2bd8df524-720.webp differ diff --git a/public/blog/media/e5dab42cfb615e5e-1080.webp b/public/blog/media/e5dab42cfb615e5e-1080.webp new file mode 100644 index 00000000..13e93fef Binary files /dev/null and b/public/blog/media/e5dab42cfb615e5e-1080.webp differ diff --git a/public/blog/media/e5dab42cfb615e5e-720.webp b/public/blog/media/e5dab42cfb615e5e-720.webp new file mode 100644 index 00000000..ca546330 Binary files /dev/null and b/public/blog/media/e5dab42cfb615e5e-720.webp differ diff --git a/public/blog/media/eb249514a3aa42f7-1200.webp b/public/blog/media/eb249514a3aa42f7-1200.webp new file mode 100644 index 00000000..0a6f59a8 Binary files /dev/null and b/public/blog/media/eb249514a3aa42f7-1200.webp differ diff --git a/public/blog/media/eb249514a3aa42f7-720.webp b/public/blog/media/eb249514a3aa42f7-720.webp new file mode 100644 index 00000000..f780b996 Binary files /dev/null and b/public/blog/media/eb249514a3aa42f7-720.webp differ diff --git a/public/blog/media/eb6fa95bd21f65a2-1080.webp b/public/blog/media/eb6fa95bd21f65a2-1080.webp new file mode 100644 index 00000000..70b5df6d Binary files /dev/null and b/public/blog/media/eb6fa95bd21f65a2-1080.webp differ diff --git a/public/blog/media/eb6fa95bd21f65a2-720.webp b/public/blog/media/eb6fa95bd21f65a2-720.webp new file mode 100644 index 00000000..2364d271 Binary files /dev/null and b/public/blog/media/eb6fa95bd21f65a2-720.webp differ diff --git a/public/blog/media/ebda91bce44067fa-1200.webp b/public/blog/media/ebda91bce44067fa-1200.webp new file mode 100644 index 00000000..14c59604 Binary files /dev/null and b/public/blog/media/ebda91bce44067fa-1200.webp differ diff --git a/public/blog/media/ebda91bce44067fa-720.webp b/public/blog/media/ebda91bce44067fa-720.webp new file mode 100644 index 00000000..b7c84df5 Binary files /dev/null and b/public/blog/media/ebda91bce44067fa-720.webp differ diff --git a/public/blog/media/ecc1c9003c24d2bd-1080.webp b/public/blog/media/ecc1c9003c24d2bd-1080.webp new file mode 100644 index 00000000..d80cf8f6 Binary files /dev/null and b/public/blog/media/ecc1c9003c24d2bd-1080.webp differ diff --git a/public/blog/media/ecc1c9003c24d2bd-720.webp b/public/blog/media/ecc1c9003c24d2bd-720.webp new file mode 100644 index 00000000..cc37c95a Binary files /dev/null and b/public/blog/media/ecc1c9003c24d2bd-720.webp differ diff --git a/public/blog/media/f4aacc5842729e9a-1200.webp b/public/blog/media/f4aacc5842729e9a-1200.webp new file mode 100644 index 00000000..1641a60e Binary files /dev/null and b/public/blog/media/f4aacc5842729e9a-1200.webp differ diff --git a/public/blog/media/f4aacc5842729e9a-720.webp b/public/blog/media/f4aacc5842729e9a-720.webp new file mode 100644 index 00000000..a6b23f88 Binary files /dev/null and b/public/blog/media/f4aacc5842729e9a-720.webp differ diff --git a/public/blog/media/f676332c99e02232-1200.webp b/public/blog/media/f676332c99e02232-1200.webp new file mode 100644 index 00000000..3174b99c Binary files /dev/null and b/public/blog/media/f676332c99e02232-1200.webp differ diff --git a/public/blog/media/f676332c99e02232-720.webp b/public/blog/media/f676332c99e02232-720.webp new file mode 100644 index 00000000..5f88defa Binary files /dev/null and b/public/blog/media/f676332c99e02232-720.webp differ diff --git a/public/blog/media/f762cfe9974db714-1200.webp b/public/blog/media/f762cfe9974db714-1200.webp new file mode 100644 index 00000000..0516090d Binary files /dev/null and b/public/blog/media/f762cfe9974db714-1200.webp differ diff --git a/public/blog/media/f762cfe9974db714-720.webp b/public/blog/media/f762cfe9974db714-720.webp new file mode 100644 index 00000000..e9a7d62c Binary files /dev/null and b/public/blog/media/f762cfe9974db714-720.webp differ diff --git a/public/blog/media/fcc135546e5fd5b2-1200.webp b/public/blog/media/fcc135546e5fd5b2-1200.webp new file mode 100644 index 00000000..13c17432 Binary files /dev/null and b/public/blog/media/fcc135546e5fd5b2-1200.webp differ diff --git a/public/blog/media/fcc135546e5fd5b2-720.webp b/public/blog/media/fcc135546e5fd5b2-720.webp new file mode 100644 index 00000000..d0ec02ff Binary files /dev/null and b/public/blog/media/fcc135546e5fd5b2-720.webp differ diff --git a/public/blog/media/fda95a81df2c5e7e-1200.webp b/public/blog/media/fda95a81df2c5e7e-1200.webp new file mode 100644 index 00000000..150c2fb6 Binary files /dev/null and b/public/blog/media/fda95a81df2c5e7e-1200.webp differ diff --git a/public/blog/media/fda95a81df2c5e7e-720.webp b/public/blog/media/fda95a81df2c5e7e-720.webp new file mode 100644 index 00000000..10aa1de7 Binary files /dev/null and b/public/blog/media/fda95a81df2c5e7e-720.webp differ diff --git a/public/brand/apps/optimized/aegis.webp b/public/brand/apps/optimized/aegis.webp new file mode 100644 index 00000000..77c1c804 Binary files /dev/null and b/public/brand/apps/optimized/aegis.webp differ diff --git a/public/brand/apps/optimized/bowmark.webp b/public/brand/apps/optimized/bowmark.webp new file mode 100644 index 00000000..d88d3e47 Binary files /dev/null and b/public/brand/apps/optimized/bowmark.webp differ diff --git a/public/brand/apps/optimized/docker.webp b/public/brand/apps/optimized/docker.webp new file mode 100644 index 00000000..17e5f366 Binary files /dev/null and b/public/brand/apps/optimized/docker.webp differ diff --git a/public/brand/apps/optimized/duckdb.webp b/public/brand/apps/optimized/duckdb.webp new file mode 100644 index 00000000..e0e9fdc4 Binary files /dev/null and b/public/brand/apps/optimized/duckdb.webp differ diff --git a/public/brand/apps/optimized/miren.webp b/public/brand/apps/optimized/miren.webp new file mode 100644 index 00000000..a35ffcc3 Binary files /dev/null and b/public/brand/apps/optimized/miren.webp differ diff --git a/public/brand/apps/optimized/postgres.webp b/public/brand/apps/optimized/postgres.webp new file mode 100644 index 00000000..93955363 Binary files /dev/null and b/public/brand/apps/optimized/postgres.webp differ diff --git a/public/brand/apps/optimized/redis.webp b/public/brand/apps/optimized/redis.webp new file mode 100644 index 00000000..04266ecd Binary files /dev/null and b/public/brand/apps/optimized/redis.webp differ diff --git a/public/brand/apps/optimized/sixtyfour.webp b/public/brand/apps/optimized/sixtyfour.webp new file mode 100644 index 00000000..69694956 Binary files /dev/null and b/public/brand/apps/optimized/sixtyfour.webp differ diff --git a/public/brand/apps/optimized/slipstream.webp b/public/brand/apps/optimized/slipstream.webp new file mode 100644 index 00000000..78a4c215 Binary files /dev/null and b/public/brand/apps/optimized/slipstream.webp differ diff --git a/public/brand/apps/optimized/smolmachines.webp b/public/brand/apps/optimized/smolmachines.webp new file mode 100644 index 00000000..4b402493 Binary files /dev/null and b/public/brand/apps/optimized/smolmachines.webp differ diff --git a/public/brand/apps/optimized/telepat.webp b/public/brand/apps/optimized/telepat.webp new file mode 100644 index 00000000..1f8d864c Binary files /dev/null and b/public/brand/apps/optimized/telepat.webp differ diff --git a/public/brand/index.html b/public/brand/index.html index 4c1b4550..7c2dd78f 100644 --- a/public/brand/index.html +++ b/public/brand/index.html @@ -3,9 +3,18 @@ -Pilot Protocol — Brand Kit v1.0 - +Pilot Protocol Brand Guidelines, Logos and Media Kit + + + + + + + + + + + + + @@ -68,7 +158,7 @@ const TWITTER_PIXEL_ID = var bannerHTML = ' @@ -153,7 +198,7 @@ const socials = [ margin-bottom: 64px; } - .foot-grid h4 { + .foot-grid .foot-heading { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; @@ -162,13 +207,22 @@ const socials = [ margin: 0 0 16px; font-weight: 500; } - .foot-grid a { + .foot-grid a, + .foot-grid button { display: block; + width: 100%; padding: 6px 0; + border: 0; + background: transparent; color: var(--ink); + font-family: inherit; font-size: 15px; + line-height: inherit; + text-align: left; + cursor: pointer; } - .foot-grid a:hover { color: var(--accent-text); } + .foot-grid a:hover, + .foot-grid button:hover { color: var(--accent-text); } .foot-brand { display: flex; align-items: center; @@ -181,7 +235,7 @@ const socials = [ display: block; object-fit: contain; } - .foot-brand h4 { margin: 0; } + .foot-brand .foot-heading { margin: 0; } .foot-about p { color: var(--ink-dim); @@ -189,7 +243,7 @@ const socials = [ line-height: 1.55; max-width: 34ch; } - .foot-about > h4 { margin: 0 0 16px; } + .foot-about > .foot-heading { margin: 0 0 16px; } .foot-social { display: flex; @@ -269,6 +323,64 @@ const socials = [ align-items: center; flex-wrap: wrap; } + + /* A dense, low-emphasis capability directory at the absolute bottom of the + footer. It follows the large-company footer pattern without competing with + the primary navigation or the main footer calls to action. */ + .foot-solutions { + margin-top: 34px; + padding-top: 24px; + border-top: 1px solid color-mix(in srgb, var(--line) 72%, transparent); + } + .foot-solutions-intro { + display: flex; + align-items: center; + justify-content: space-between; + gap: 16px; + margin-bottom: 18px; + color: color-mix(in srgb, var(--ink-dim) 58%, transparent); + font-family: var(--mono); + font-size: 9px; + font-weight: 500; + line-height: 1.2; + letter-spacing: .12em; + text-transform: uppercase; + } + .foot-solutions-intro span:last-child { opacity: .62; } + .foot-solutions-grid { + display: grid; + grid-template-columns: repeat(4, minmax(0, 1fr)); + gap: 32px; + } + .foot-solutions-group p { + margin: 0 0 9px; + color: color-mix(in srgb, var(--ink-dim) 58%, transparent); + font-family: var(--mono); + font-size: 9px; + line-height: 1.2; + letter-spacing: .1em; + text-transform: uppercase; + } + .foot-solutions-group > div { + display: flex; + flex-wrap: wrap; + gap: 3px 0; + } + .foot-solutions-group a { + display: inline-flex; + align-items: center; + color: color-mix(in srgb, var(--ink-dim) 64%, transparent); + font-size: 11px; + line-height: 1.45; + text-decoration: none; + transition: color .15s ease; + } + .foot-solutions-group a:not(:last-child)::after { + content: '·'; + margin: 0 8px; + color: color-mix(in srgb, var(--ink-faint) 68%, transparent); + } + .foot-solutions-group a:hover { color: var(--ink); } .foot-plain { color: var(--ink-dim); text-decoration: none; @@ -281,9 +393,13 @@ const socials = [ } @media (max-width: 700px) { .foot-grid { grid-template-columns: 1fr 1fr; gap: 24px; } + .foot-solutions-grid { grid-template-columns: 1fr 1fr; gap: 22px 28px; } } @media (max-width: 480px) { .foot-grid { grid-template-columns: 1fr 1fr; gap: 24px; } .site-footer { padding: 56px 0 32px; } + .foot-solutions-intro span:last-child { display: none; } + .foot-solutions-grid { grid-template-columns: 1fr; gap: 18px; } + .foot-solutions-group a { font-size: 10.5px; } } diff --git a/src/components/Nav.astro b/src/components/Nav.astro index 2dd7804c..beeddcc0 100644 --- a/src/components/Nav.astro +++ b/src/components/Nav.astro @@ -1,8 +1,12 @@ --- +import Breadcrumbs, { type BreadcrumbItem } from './Breadcrumbs.astro'; + interface Props { active?: 'home' | 'docs' | 'blog' | 'news' | 'roadmap' | 'governance' | 'contact' | 'plans' | 'for' | 'tech' | 'apps' | 'trust'; + breadcrumbs?: BreadcrumbItem[] | false; + breadcrumbLabel?: string; } -const { active } = Astro.props; +const { active, breadcrumbs, breadcrumbLabel } = Astro.props; const navGroups = [ { @@ -51,6 +55,7 @@ const navGroups = [ desc: 'Architecture, field notes, evaluator material, and a machine-readable version of the site.', activeFor: ['blog'], links: [ + { href: '/learn/', kicker: 'Learn', label: 'Learning center', desc: 'Foundations, transport, and security' }, { href: '/blog/', kicker: 'Journal', label: 'Field notes', desc: 'Technical guides and architecture' }, { href: '/docs/research', kicker: 'Research', label: 'Technical papers', desc: 'Specifications and evaluations' }, { href: '/pilot-native-use-cases.pdf', kicker: 'Use cases', label: 'Deployment patterns', desc: 'What the combined Pilot surface enables' }, @@ -65,7 +70,7 @@ const navGroups = [ desc: 'Learn about the company, follow our progress, or speak directly with the team.', activeFor: ['news', 'roadmap', 'contact'], links: [ - { href: '/learn/what-is-pilot-protocol', kicker: 'About', label: 'About Pilot', desc: 'What we are building and why' }, + { href: '/about', kicker: 'About', label: 'About Pilot', desc: 'Company, people, and publishing standards' }, { href: '/roadmap', kicker: 'Direction', label: 'Product roadmap', desc: 'What we are strengthening next' }, { href: '/news/', kicker: 'Newsroom', label: 'Company news', desc: 'Announcements and company updates' }, { href: '/contact', kicker: 'Contact', label: 'Talk to the team', desc: 'Enterprise, partnerships, and press' }, @@ -78,10 +83,10 @@ const navGroups = [ +{Astro.url.pathname !== '/' && breadcrumbs !== false && ( + +)} diff --git a/src/components/SolutionInfographic.astro b/src/components/SolutionInfographic.astro new file mode 100644 index 00000000..dd81119f --- /dev/null +++ b/src/components/SolutionInfographic.astro @@ -0,0 +1,94 @@ +--- +import type { SolutionStory } from '../data/solutionStories'; + +interface Props { + story: SolutionStory; + mode?: 'hero' | 'full'; +} + +const { story, mode = 'full' } = Astro.props; +const { infographic } = story; +--- + +{mode === 'hero' ? ( + +) : ( +
+
+
+
+
+ {infographic.eyebrow} +

{infographic.title}

+
+

{infographic.summary}

+
+ +
+
    + {infographic.stages.map((stage, index) => ( +
  1. +
    + {String(index + 1).padStart(2, '0')} + {stage.label} +
    +

    {stage.title}

    +

    {stage.body}

    +
      + {stage.items.map((item) =>
    • {item}
    • )} +
    + {index < infographic.stages.length - 1 && } +
  2. + ))} +
+ + +
+ +
+ Pilot product surface + Explicit boundary + Generated output +
+
+
+
+)} diff --git a/src/components/SolutionProblem.astro b/src/components/SolutionProblem.astro new file mode 100644 index 00000000..71ebaf04 --- /dev/null +++ b/src/components/SolutionProblem.astro @@ -0,0 +1,28 @@ +--- +import type { SolutionProfile } from '../data/solutions'; + +interface Props { solution: SolutionProfile } +const { solution } = Astro.props; +--- + +
+
+
+
The operating problem
+

{solution.problemTitle}

+

{solution.problemBody}

+
+ +
+
diff --git a/src/components/SolutionProof.astro b/src/components/SolutionProof.astro new file mode 100644 index 00000000..297e0241 --- /dev/null +++ b/src/components/SolutionProof.astro @@ -0,0 +1,28 @@ +--- +import type { SolutionProfile } from '../data/solutions'; + +interface Props { solution: SolutionProfile } +const { solution } = Astro.props; +--- + +
+
+
+
+
Technical basis
+

Specific product surfaces.
Inspectable in the docs.

+
+
+ Product review + Pilot release 1.13.9 + + Inspect documentation +
+
+
    + {solution.proof.map((item, index) => ( +
  • {String(index + 1).padStart(2, '0')}{item}
  • + ))} +
+
+
diff --git a/src/components/SolutionRelated.astro b/src/components/SolutionRelated.astro new file mode 100644 index 00000000..1cc9eff6 --- /dev/null +++ b/src/components/SolutionRelated.astro @@ -0,0 +1,32 @@ +--- +import { solutionsBySlug, type SolutionProfile } from '../data/solutions'; +import { solutionStories, type SolutionStory } from '../data/solutionStories'; + +interface Props { solution: SolutionProfile; story: SolutionStory } +const { solution, story } = Astro.props; +const relatedSolutions = solution.related + .map((slug) => ({ solution: solutionsBySlug.get(slug), story: solutionStories[slug] })) + .filter((item): item is { solution: SolutionProfile; story: SolutionStory } => Boolean(item.solution && item.story)); +--- + + diff --git a/src/components/SolutionWorkflow.astro b/src/components/SolutionWorkflow.astro new file mode 100644 index 00000000..468012cf --- /dev/null +++ b/src/components/SolutionWorkflow.astro @@ -0,0 +1,25 @@ +--- +import type { SolutionProfile } from '../data/solutions'; +import type { SolutionStory } from '../data/solutionStories'; + +interface Props { solution: SolutionProfile; story: SolutionStory } +const { solution, story } = Astro.props; +--- + +
+
+
+
How the workflow resolves
+

{story.workflowHeading.lead}
{story.workflowHeading.emphasis}

+

{story.workflowHeading.body}

+
+
    + {solution.steps.map((step, index) => ( +
  1. + {String(index + 1).padStart(2, '0')} +

    {step.title}

    {step.body}

    +
  2. + ))} +
+
+
diff --git a/src/components/solution-experiences/ApiExperience.astro b/src/components/solution-experiences/ApiExperience.astro new file mode 100644 index 00000000..8a557cbb --- /dev/null +++ b/src/components/solution-experiences/ApiExperience.astro @@ -0,0 +1,57 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
API → AGENT METHOD11 / 12
+
Distribution for agent-ready services

{story.heroLead}
{story.heroEmphasis}

{story.lede}

+
Method contractcrm.account_enrichLook up a company and return normalized firmographic context.
Inputdomain: string
OutputAccountProfile
+
+
+
manifest.jsonhandler.ts● signed
+
01  {
+02    "id": "com.acme.crm",
+03    "version": "1.2.0",
+04    "methods": [{
+05      "name": "account_enrich",
+06      "description": "Enrich a company",
+07      "input": {
+08        "domain": "string"
+09      },
+10      "grants": ["network:api.acme.com"]
+11    }],
+12    "integrity": "sha256:9ac…"
+13  }
+
Schema validSignature validReady to publish
+
+
+
+ + + +
+
+
Packaging surface

Document the job.
Declare the boundary.

{solution.problemBody}

+
{solution.capabilities.map((capability, index) =>
0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'input → output' : index === 1 ? 'grant[]' : 'catalogue.publish()'}
)}
+
+
+ +
+
+
Publish flow

From endpoint to discoverable capability.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
+ +
+
+ + + +
diff --git a/src/components/solution-experiences/CampaignActions.astro b/src/components/solution-experiences/CampaignActions.astro new file mode 100644 index 00000000..1633c779 --- /dev/null +++ b/src/components/solution-experiences/CampaignActions.astro @@ -0,0 +1,29 @@ +--- +import type { SolutionFunnel } from '../../data/solutionStories'; +import type { SolutionProfile } from '../../data/solutions'; + +interface Props { + solution: SolutionProfile; + funnel: SolutionFunnel; + location: string; +} + +const { solution, funnel, location } = Astro.props; +--- + + diff --git a/src/components/solution-experiences/CapabilityExperience.astro b/src/components/solution-experiences/CapabilityExperience.astro new file mode 100644 index 00000000..0ebc2a33 --- /dev/null +++ b/src/components/solution-experiences/CapabilityExperience.astro @@ -0,0 +1,56 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+ Capability directory · live +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
+ +
+
Pilot capabilities⌘ K
+ +
+ {solution.capabilities.map((capability, index) => ( +
{index === 0 ? '↗' : index === 1 ? '⌁' : '◇'}
{capability.label}

{capability.title}

{capability.body}

Install
+ ))} +
+
Signed catalogueTyped methodsRemote services
+
+
+
+ +
+
+
Composition canvas

One outcome.
Several bounded specialists.

{solution.problemBody}

+
    + {solution.steps.map((step, index) => ( +
  1. {String(index + 1).padStart(2, '0')}
    {index === 0 ? 'Intent' : index === 1 ? 'Inspection' : index === 2 ? 'Invocation' : 'Composition'}

    {step.title}

    {step.body}

  2. + ))} +
+
+
+ +
+
+
Research signal{solution.signal.value}
+

{solution.signal.body}

+ {solution.signal.source} ↗ +
+
+ + + + +
diff --git a/src/components/solution-experiences/CommerceExperience.astro b/src/components/solution-experiences/CommerceExperience.astro new file mode 100644 index 00000000..7ee9be8e --- /dev/null +++ b/src/components/solution-experiences/CommerceExperience.astro @@ -0,0 +1,55 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
PILOT / WALLETSETTLED
+
+ PAYMENT CONFIRMED +

42.00 USDC

+

Compute reservation · job #8F42

+
Buyer
agent-research
Counterparty
compute-east
Mandate
compute / max 50
Network
Base
Transaction
0x71…9ac2
+
Identity verifiedLimit enforced
+
+ +
+ Bounded agent commerce / 10 +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
No invisible authorityNo unbounded balanceNo anonymous counterparty
+
+
+
+ +
+
+
Spending mandate

Authority is a data structure.
Make it narrow.

{solution.problemBody}

+
+
Allowed purposeIsolated compute
Per-transaction limit≤ 50 USDC
Approved recipients2 service agents
Human reviewAbove 35 USDC
Expires24 hours
Mandate #M-1842Active
+
+
+
{solution.capabilities.map((capability, index) =>
Control 0{index + 1}{capability.label}

{capability.title}

{capability.body}

)}
+
+ +
+
+
Transaction sequence

Request. Check. Settle. Release.

+
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '→' : '✓'}
  2. )}
+ +
+
+ + + + +
diff --git a/src/components/solution-experiences/CommunicationsExperience.astro b/src/components/solution-experiences/CommunicationsExperience.astro new file mode 100644 index 00000000..de61345f --- /dev/null +++ b/src/components/solution-experiences/CommunicationsExperience.astro @@ -0,0 +1,64 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
+
Agent inbox3 active
+
DM
Delivery updateEmail · 10:14
1
+
SK
Supplier callbackVoice · live
+
AL
Address confirmedSMS · 09:42
+
+
+
+
9:41● ● ●
+
SKSupplier lineConnected · 01:42
+
+
Agent

Can we move order 1842 to the afternoon window?

Supplier

Confirmed for 14:30. I’ll send the update by email.

+
+
+
Context packetCase #1842Email ✓SMS ✓Voice ✓Human review ready →
+
+ +
+ Conversation operations / 08 +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ + {solution.audience} +
+
+
+ + + +
+
+
Conversation continuity

One case.
Every channel attached.

{solution.problemBody}

+
+ {solution.capabilities.map((capability, index) => ( +
{index === 0 ? '@' : index === 1 ? '◖' : '↔'}
{capability.label}

{capability.title}

{capability.body}

+ ))} +
+
+
+ +
+
+
Handoff timeline

The context travels with the conversation.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
+ +
+
+ + + +
diff --git a/src/components/solution-experiences/ComputeExperience.astro b/src/components/solution-experiences/ComputeExperience.astro new file mode 100644 index 00000000..73c72fe1 --- /dev/null +++ b/src/components/solution-experiences/ComputeExperience.astro @@ -0,0 +1,60 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+ pilot run / isolated-compute +

> {story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ + {solution.audience} +
+ +
+
job/8f42c1isolated
+
+

01$ pilot app call smol.run

+

02creating microVM........ done

+

03mount /workspace.......... read-only

+

04network egress........... denied

+

05execute analysis.py...... running

+
RESULT3 files · 1 chart · exit 0cpu 1.2s · memory 84MB · artifacts retained 24h
+
+
Boundary: hardware-isolated microVMAudit: enabled
+
+
+
+ +
+
+
Containment model

Disposable by design.
Useful by contract.

{solution.problemBody}

+
+
Host
Supervisor
microVM
generated jobbounded input / output
+
+
+ {solution.capabilities.map((capability, index) =>
0{index + 1}{capability.label}

{capability.title}

{capability.body}

)} +
+
+
+ +
+
+
Job lifecycle

The host receives artifacts, not assumptions.

+
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '↓' : '✓'}
  2. )}
+ +
+
+ + + + +
diff --git a/src/components/solution-experiences/DataExperience.astro b/src/components/solution-experiences/DataExperience.astro new file mode 100644 index 00000000..57a9d027 --- /dev/null +++ b/src/components/solution-experiences/DataExperience.astro @@ -0,0 +1,70 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +const feeds = [ + ['Scientific', 'Crossref · arXiv', 'live'], + ['Markets', 'SEC · FRED', 'live'], + ['Geographic', 'Overture · OSM', 'live'], + ['Security', 'CVE · NVD', 'live'], + ['Reference', 'Wikidata', 'live'], +]; +--- + +
+
+
+
+
12 live sources connected
+ Structured research / 12 +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
+ +
+
Source observatoryUpdated 14:32 UTC
+
+
+ papersmarketsgeosecurity + P +
+
{feeds.map(([name, source, status]) =>
{name}{source}{status}
)}
+
5 source classesStructured outputsProvenance retained
+
+
+
+ +
+
+
+
Research brief / generatedQuestion Q-1842
+

Where are grid-storage projects accelerating, and what changed this quarter?

+

A structured answer joins current project filings, geographic records, market indicators, and recent papers while preserving the limits of each source.

+
Live facts
18 cited records
Interpretation
Separated
Coverage gaps
2 flagged
+
Evidence packet attached →
+
+
Output, not a data dump

Current evidence.
Visible provenance.

{solution.problemBody}

+
+
+ +
+
+
Specialist surfaces

Route each question
to the source that owns it.

+
{solution.capabilities.map((capability, index) =>
Source class 0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'DISCOVER' : index === 1 ? 'QUERY' : 'COMPOSE'}
)}
+
+
+ + + +
+
Research assembly

The brief shows its work.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
+
+ + + +
diff --git a/src/components/solution-experiences/IntegrationExperience.astro b/src/components/solution-experiences/IntegrationExperience.astro new file mode 100644 index 00000000..e607f354 --- /dev/null +++ b/src/components/solution-experiences/IntegrationExperience.astro @@ -0,0 +1,65 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +const inputs = ['PostgreSQL', 'Internal HTTP', 'UDP service', 'Webhook']; +--- + +
+
+
+
Integration field noteExisting system → agent edge02 / 12
+
+

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+
+ +
+
+ Systems you keep + {inputs.map((input, index) =>
{String(index + 1).padStart(2, '0')}{input}
)} +
+
+ Smallest viable seam +
Pilot agent edgeSDK · socket · gateway · webhook
+
+
+ Agent-facing result +
Reachable capabilityinventory.lookuptrusted · typed · observable
+
+
+
+
+ + + +
+
+
Four ways in

Change the boundary.
Keep the contract.

+
+ {solution.capabilities.map((capability, index) => ( +
0{index + 1} / {capability.label}

{capability.title}

{capability.body}

+ ))} + +
+
+
+ +
+
+
{solution.signal.value}

{solution.signal.body}

{solution.signal.source} ↗
+
+ Integration runbook +

One seam at a time.

+
    {solution.steps.map((step, index) =>
  1. {index + 1}

    {step.title}

    {step.body}

  2. )}
+
+
+
+ + + +
diff --git a/src/components/solution-experiences/NetworkExperience.astro b/src/components/solution-experiences/NetworkExperience.astro new file mode 100644 index 00000000..bbf2e746 --- /dev/null +++ b/src/components/solution-experiences/NetworkExperience.astro @@ -0,0 +1,78 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
Network 01{solution.eyebrow}
+

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
+ +
+
pilot://production4 peers reachable
+
+ + +
Localagent-ops10.AC.20.01
+
Cloudagent-researchdirect · 34ms
+
Partneragent-supplyrelay · encrypted
+
Edgeagent-fielddirect · 18ms
+
Pidentity + trust
+
+
Mutual trust requiredApplication traffic remains encrypted
+
+
+
+ +
+
+
+ Architecture / 02 +

The network details disappear.
The trust decision does not.

+

{solution.problemBody}

+
+
    + {solution.capabilities.map((capability, index) => ( +
  1. + {String(index + 1).padStart(2, '0')} +
    {capability.label}

    {capability.title}

    {capability.body}

    + +
  2. + ))} +
+
+
+ +
+
+ +
+
Connection trace

Unknown endpoint → verified peer

+
    + {solution.steps.map((step, index) => ( +
  1. {String(index + 1).padStart(2, '0')}

    {step.title}

    {step.body}

  2. + ))} +
+
+
+
+ + + + +
diff --git a/src/components/solution-experiences/SalesExperience.astro b/src/components/solution-experiences/SalesExperience.astro new file mode 100644 index 00000000..8ab1cceb --- /dev/null +++ b/src/components/solution-experiences/SalesExperience.astro @@ -0,0 +1,50 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
Revenue workflow / Account room 09

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+
+ + +
+
+ + + +
+
+
Account production line

Every stage returns
a usable sales object.

{solution.problemBody}

+
    {solution.steps.map((step, index) =>
  1. 0{index + 1}
    {index < 3 ? 'Complete' : 'Seller review'}

    {step.title}

    {step.body}

    {index < solution.steps.length - 1 ? '→' : '✓'}
  2. )}
+
+
+ +
+
+
Composable stack

Specialists contribute.
The brief stays coherent.

{solution.capabilities.map((capability, index) =>
{index + 1}{capability.label}

{capability.title}

{capability.body}

)}
+ +
+
+ + + +
diff --git a/src/components/solution-experiences/SearchExperience.astro b/src/components/solution-experiences/SearchExperience.astro new file mode 100644 index 00000000..7fa3c697 --- /dev/null +++ b/src/components/solution-experiences/SearchExperience.astro @@ -0,0 +1,60 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+
Cosift field guideNo. 05
+ Grounded private research +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
+ +
+
What changed in the enterprise policy?
+
Research answer4 sources · 0.91 grounding
+

The policy now requires human approval before external transfers.

+

The August revision adds a review checkpoint for transfers outside approved counterparties and records the reviewer identity in the audit export.1 Existing internal transfers retain the prior threshold.2

+
    +
  1. 01
    Enterprise policy · Aug 2026§4.2 External counterparties
    92%
  2. +
  3. 02
    Transfer controls handbookThreshold and exception matrix
    87%
  4. +
  5. 03
    Audit export referenceReviewer attribution fields
    81%
  6. +
+
Answer generated from the approved indexView retrieval trace ↗
+
+
+
+ +
+
+
Retrieval is an engineering system

Measure the path
from corpus to claim.

{solution.problemBody}

+
+
StageWhat Pilot contributesInspectable output
+ {solution.capabilities.map((capability, index) => ( +
0{index + 1} · {capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'Source inventory' : index === 1 ? 'Ranked passages' : 'Cited answer'}
+ ))} +
+
+
+ +
+
+
Evaluation loop

Fluency is not the acceptance test.

{story.workflowHeading.body}

+
    {solution.steps.map((step, index) =>
  1. {String(index + 1).padStart(2, '0')}

    {step.title}

    {step.body}

  2. )}
+ +
+
+ + + + +
diff --git a/src/components/solution-experiences/SecurityExperience.astro b/src/components/solution-experiences/SecurityExperience.astro new file mode 100644 index 00000000..11368841 --- /dev/null +++ b/src/components/solution-experiences/SecurityExperience.astro @@ -0,0 +1,64 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +const permissions = [ + ['Package signature', 'verified', 'allow'], + ['Binary hash', 'pinned', 'allow'], + ['Filesystem', '/workspace only', 'limit'], + ['Outbound network', 'deny by default', 'deny'], +]; +--- + +
+
+
+ +
+
Execution authority reviewDecision required
+
+
+ Agent application / privileged action +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+ +
+
+
Execution decisionAllowed with limits
+

wallet.pay

+

Authority is derived from a verified package and an explicit local grant—not from the model request alone.

+
{permissions.map(([key, value, tone]) =>
{key}
{value}
)}
+
Audit event #P-1842Policy v4.2
+
+
+
+
+
+ + + +
+
+
Control surface

Four checks between intent
and execution.

{solution.problemBody}

+
+ {solution.capabilities.map((capability, index) => ( +
Control 0{index + 1}
{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'VERIFY' : index === 1 ? 'SCOPE' : 'INSPECT'}
+ ))} +
+
+
+ +
+
+ +
Audit sequence

The trail survives the call.

    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
+
+
+ + + +
diff --git a/src/components/solution-experiences/WebExperience.astro b/src/components/solution-experiences/WebExperience.astro new file mode 100644 index 00000000..ea4b91d2 --- /dev/null +++ b/src/components/solution-experiences/WebExperience.astro @@ -0,0 +1,61 @@ +--- +import SolutionFunnel from '../SolutionFunnel.astro'; +import SolutionProof from '../SolutionProof.astro'; +import SolutionRelated from '../SolutionRelated.astro'; +import CampaignActions from './CampaignActions.astro'; +import type { SolutionExperienceProps } from './types'; + +const { solution, story, funnel, turnstileSiteKey = '' } = Astro.props as SolutionExperienceProps; +--- + +
+
+
+
+ Web task router / 06 +

{story.heroLead}
{story.heroEmphasis}

+

{story.lede}

+
+ +
+
https://supplier.example/portal/orders/1842
+
Live browserClean extractionSite guidanceTask #1842 · running
+
+ +
+
SUPPLIER PORTALOrdersInventoryAccount
+
ORDER #1842

Confirm revised delivery

Dock availability changed. Select a new appointment window.

Aug 14 · 09:00Aug 14 · 14:30 ✓Aug 15 · 11:00
+
+
10:14:02 page ready10:14:04 option selected10:14:04 approval requested
+
+
+
+
+ +
+
+
Choose by page behavior

Three surfaces.
One task contract.

{solution.problemBody}

+
+ {solution.capabilities.map((capability, index) => ( +
Route 0{index + 1}{capability.label}

{capability.title}

{capability.body}

{index === 0 ? 'Dynamic' : index === 1 ? 'Readable' : 'Repeatable'}
+ ))} +
+
+
+ + + +
+
+
Task trace

From intent to observable result.

{story.workflowHeading.body}

+
    {solution.steps.map((step, index) =>
  1. 0{index + 1}

    {step.title}

    {step.body}

  2. )}
+ +
+
+ + + +
diff --git a/src/components/solution-experiences/types.ts b/src/components/solution-experiences/types.ts new file mode 100644 index 00000000..e39376de --- /dev/null +++ b/src/components/solution-experiences/types.ts @@ -0,0 +1,9 @@ +import type { SolutionFunnel, SolutionStory } from '../../data/solutionStories'; +import type { SolutionProfile } from '../../data/solutions'; + +export interface SolutionExperienceProps { + solution: SolutionProfile; + story: SolutionStory; + funnel: SolutionFunnel; + turnstileSiteKey?: string; +} diff --git a/src/data/app-methods.json b/src/data/app-methods.json index f9bc77cf..973c59f3 100644 --- a/src/data/app-methods.json +++ b/src/data/app-methods.json @@ -1424,39 +1424,39 @@ "io.pilot.slipstream": [ { "name": "slipstream.leaderboard", - "summary": null + "summary": "Read Slipstream's ranked view of Polymarket participants for market research." }, { "name": "slipstream.signals", - "summary": null + "summary": "Read the current derived market signals published by Slipstream." }, { "name": "slipstream.tape", - "summary": null + "summary": "Read the recent market-activity tape used for monitoring and analysis." }, { "name": "slipstream.markets", - "summary": null + "summary": "Retrieve the market records and context available through Slipstream." }, { "name": "slipstream.wallet", - "summary": null + "summary": "Inspect the wallet-level market context exposed by the service." }, { "name": "slipstream.skilled", - "summary": null + "summary": "Inspect Slipstream's view of skilled market participants." }, { "name": "slipstream.opportunities", - "summary": null + "summary": "Read the service's current opportunity view for further research." }, { "name": "slipstream.stats", - "summary": null + "summary": "Read service and dataset statistics exposed by Slipstream." }, { "name": "slipstream.help", - "summary": null + "summary": "Discover the current Slipstream methods and their runtime parameters." } ], "io.pilot.aegis": [ diff --git a/src/data/app-overrides.json b/src/data/app-overrides.json index d7e55ecf..00b743c5 100644 --- a/src/data/app-overrides.json +++ b/src/data/app-overrides.json @@ -490,11 +490,10 @@ "io.pilot.plainweb": { "name": "Plainweb", "tagline": "Any web page as clean Markdown — no HTML, no JS, one call", - "description": "Plainweb is a Pilot-owned URL→Markdown service: give it any web page and get back clean, accurate Markdown — no HTML, no JavaScript, just plain text structured as Markdown.\n\nWhat an agent gets:\n- **One call** — `plainweb.fetch(url)` fetches the page and returns it as Markdown (GFM tables, fenced code with language, task lists). The target URL goes straight in the path.\n- **Accurate extraction** — a cost-aware static→headless-Chrome fetch ladder (most pages never launch Chrome), go-readability primary (preserves code blocks and tables) with go-trafilatura fallback, converted via html-to-markdown v2.\n- **Scheme-less OK** — bare hosts like `example.com` are sanitized to `https://`.\n\nGood to know:\n- **Free and open — no API key required.** Public endpoints are open to every caller.\n- **Rate limit:** anonymous callers get **1000 requests/second** (burst 2000); a master key only elevates a caller past that limit.\n- The reply is `text/markdown`, returned by the adapter as `{ \"content_type\", \"content\" }` (the Markdown is in `content`).\n- In-house Pilot Protocol tool, deployed on Cloud Run.", + "description": "Plainweb is a Pilot-owned URL→Markdown service: give it any web page and get back clean, accurate Markdown — no HTML, no JavaScript, just plain text structured as Markdown.\n\nWhat an agent gets:\n- **One call** — `plainweb.fetch(url)` fetches the page and returns it as Markdown (GFM tables, fenced code with language, task lists). The target URL goes straight in the path.\n- **Accurate extraction** — a cost-aware static→headless-Chrome fetch ladder (most pages never launch Chrome), go-readability primary (preserves code blocks and tables) with go-trafilatura fallback, converted via html-to-markdown v2.\n- **Scheme-less OK** — bare hosts like `example.com` are sanitized to `https://`.\n\nGood to know:\n- **Free to call — no API key required.** Public endpoints are available to every caller.\n- **Rate limit:** anonymous callers get **1000 requests/second** (burst 2000); a master key only elevates a caller past that limit.\n- The reply is `text/markdown`, returned by the adapter as `{ \"content_type\", \"content\" }` (the Markdown is in `content`).\n- In-house Pilot Protocol tool, deployed on Cloud Run.", "vendor": "Pilot Protocol", "vendorUrl": "https://pilotprotocol.network", "license": "Proprietary", - "sourceUrl": "https://github.com/pilot-protocol/plainweb", "homepage": "https://pilotprotocol.network", "version": "1.0.0", "categoriesRaw": [ @@ -699,6 +698,9 @@ "protection": null, "publishedAt": "2026-06-08T08:00:26Z", "grants": [], + "platforms": [ + "darwin-arm64" + ], "inCatalogue": true }, "io.pilot.postgres": { @@ -751,7 +753,7 @@ "io.pilot.slipstream": { "name": "Slipstream", "tagline": "Polymarket smart-money leaderboard, signals, and tape", - "description": "SLIPSTREAM — Polymarket smart-money leaderboard, signals, tape & opportunities (Ed25519-signed API).", + "description": "# Slipstream — market intelligence for agents\n\nSlipstream gives an agent a focused, read-oriented view of Polymarket activity through nine discoverable Pilot methods. It brings leaderboards, market signals, transaction tape, market records, wallet context, skilled participants, opportunities, service statistics, and method help into the same request-and-response interface used by other Pilot apps.\n\n## What an agent can inspect\n\n- `slipstream.leaderboard` surfaces ranked market participants.\n- `slipstream.signals` and `slipstream.opportunities` expose the service's derived market-intelligence views.\n- `slipstream.tape` provides the activity stream, while `slipstream.markets` provides market context.\n- `slipstream.wallet` and `slipstream.skilled` support participant-level research.\n- `slipstream.stats` describes service-level statistics, and `slipstream.help` is the runtime discovery entry point.\n\nThe API responses are Ed25519-signed so a caller can verify their origin before using the result downstream. As published in the current catalog, Slipstream exposes research and monitoring methods; it does **not** list an order-placement or trade-execution method. That boundary matters for operators: an agent can use the app as one input to an analysis workflow, but execution policy, spending authority, human approval, and independent verification remain outside this app.\n\nFor production use, inspect `slipstream.help` at runtime before relying on a field or parameter, retain the signed response with the surrounding decision record, and treat market signals as time-sensitive evidence rather than guaranteed outcomes.", "vendor": "Pilot Protocol", "vendorUrl": "https://pilotprotocol.network", "license": "MIT", diff --git a/src/data/apps.ts b/src/data/apps.ts index f243d2f3..cfe2387e 100644 --- a/src/data/apps.ts +++ b/src/data/apps.ts @@ -2832,7 +2832,7 @@ export const apps: App[] = [ "id": "io.pilot.plainweb", "name": "Plainweb", "tagline": "Any web page as clean Markdown — no HTML, no JS, one call", - "description": "Plainweb is a Pilot-owned URL→Markdown service: give it any web page and get back clean, accurate Markdown — no HTML, no JavaScript, just plain text structured as Markdown.\n\nWhat an agent gets:\n- **One call** — `plainweb.fetch(url)` fetches the page and returns it as Markdown (GFM tables, fenced code with language, task lists). The target URL goes straight in the path.\n- **Accurate extraction** — a cost-aware static→headless-Chrome fetch ladder (most pages never launch Chrome), go-readability primary (preserves code blocks and tables) with go-trafilatura fallback, converted via html-to-markdown v2.\n- **Scheme-less OK** — bare hosts like `example.com` are sanitized to `https://`.\n\nGood to know:\n- **Free and open — no API key required.** Public endpoints are open to every caller.\n- **Rate limit:** anonymous callers get **1000 requests/second** (burst 2000); a master key only elevates a caller past that limit.\n- The reply is `text/markdown`, returned by the adapter as `{ \"content_type\", \"content\" }` (the Markdown is in `content`).\n- In-house Pilot Protocol tool, deployed on Cloud Run.", + "description": "Plainweb is a Pilot-owned URL→Markdown service: give it any web page and get back clean, accurate Markdown — no HTML, no JavaScript, just plain text structured as Markdown.\n\nWhat an agent gets:\n- **One call** — `plainweb.fetch(url)` fetches the page and returns it as Markdown (GFM tables, fenced code with language, task lists). The target URL goes straight in the path.\n- **Accurate extraction** — a cost-aware static→headless-Chrome fetch ladder (most pages never launch Chrome), go-readability primary (preserves code blocks and tables) with go-trafilatura fallback, converted via html-to-markdown v2.\n- **Scheme-less OK** — bare hosts like `example.com` are sanitized to `https://`.\n\nGood to know:\n- **Free to call — no API key required.** Public endpoints are available to every caller.\n- **Rate limit:** anonymous callers get **1000 requests/second** (burst 2000); a master key only elevates a caller past that limit.\n- The reply is `text/markdown`, returned by the adapter as `{ \"content_type\", \"content\" }` (the Markdown is in `content`).\n- In-house Pilot Protocol tool, deployed on Cloud Run.", "categories": [ "web" ], @@ -2853,7 +2853,7 @@ export const apps: App[] = [ "vendor": "Pilot Protocol", "vendorUrl": "https://pilotprotocol.network", "license": "Proprietary", - "sourceUrl": "https://github.com/pilot-protocol/plainweb", + "sourceUrl": null, "homepage": "https://pilotprotocol.network", "methods": [ { @@ -3997,7 +3997,7 @@ export const apps: App[] = [ "id": "io.pilot.slipstream", "name": "Slipstream", "tagline": "Polymarket smart-money leaderboard, signals, and tape", - "description": "SLIPSTREAM — Polymarket smart-money leaderboard, signals, tape & opportunities (Ed25519-signed API).", + "description": "# Slipstream — market intelligence for agents\n\nSlipstream gives an agent a focused, read-oriented view of Polymarket activity through nine discoverable Pilot methods. It brings leaderboards, market signals, transaction tape, market records, wallet context, skilled participants, opportunities, service statistics, and method help into the same request-and-response interface used by other Pilot apps.\n\n## What an agent can inspect\n\n- `slipstream.leaderboard` surfaces ranked market participants.\n- `slipstream.signals` and `slipstream.opportunities` expose the service's derived market-intelligence views.\n- `slipstream.tape` provides the activity stream, while `slipstream.markets` provides market context.\n- `slipstream.wallet` and `slipstream.skilled` support participant-level research.\n- `slipstream.stats` describes service-level statistics, and `slipstream.help` is the runtime discovery entry point.\n\nThe API responses are Ed25519-signed so a caller can verify their origin before using the result downstream. As published in the current catalog, Slipstream exposes research and monitoring methods; it does **not** list an order-placement or trade-execution method. That boundary matters for operators: an agent can use the app as one input to an analysis workflow, but execution policy, spending authority, human approval, and independent verification remain outside this app.\n\nFor production use, inspect `slipstream.help` at runtime before relying on a field or parameter, retain the signed response with the surrounding decision record, and treat market signals as time-sensitive evidence rather than guaranteed outcomes.", "categories": [ "finance" ], @@ -4017,55 +4017,55 @@ export const apps: App[] = [ "methods": [ { "name": "slipstream.leaderboard", - "summary": null, + "summary": "Read Slipstream's ranked view of Polymarket participants for market research.", "example": null, "gated": null }, { "name": "slipstream.signals", - "summary": null, + "summary": "Read the current derived market signals published by Slipstream.", "example": null, "gated": null }, { "name": "slipstream.tape", - "summary": null, + "summary": "Read the recent market-activity tape used for monitoring and analysis.", "example": null, "gated": null }, { "name": "slipstream.markets", - "summary": null, + "summary": "Retrieve the market records and context available through Slipstream.", "example": null, "gated": null }, { "name": "slipstream.wallet", - "summary": null, + "summary": "Inspect the wallet-level market context exposed by the service.", "example": null, "gated": null }, { "name": "slipstream.skilled", - "summary": null, + "summary": "Inspect Slipstream's view of skilled market participants.", "example": null, "gated": null }, { "name": "slipstream.opportunities", - "summary": null, + "summary": "Read the service's current opportunity view for further research.", "example": null, "gated": null }, { "name": "slipstream.stats", - "summary": null, + "summary": "Read service and dataset statistics exposed by Slipstream.", "example": null, "gated": null }, { "name": "slipstream.help", - "summary": null, + "summary": "Discover the current Slipstream methods and their runtime parameters.", "example": null, "gated": null } @@ -4271,18 +4271,6 @@ export const apps: App[] = [ { "platform": "darwin-arm64", "bytes": 9110758 - }, - { - "platform": "darwin-amd64", - "bytes": 9475188 - }, - { - "platform": "linux-arm64", - "bytes": 9930726 - }, - { - "platform": "linux-amd64", - "bytes": 9930726 } ], "installedBytes": null, diff --git a/src/data/articleImageManifest.json b/src/data/articleImageManifest.json new file mode 100644 index 00000000..350bdcd3 --- /dev/null +++ b/src/data/articleImageManifest.json @@ -0,0 +1,722 @@ +{ + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774647725213_pilotprotocol.jpg": { + "src": "/blog/media/9b1bf3149d7e1e80-1200.webp", + "srcset": "/blog/media/9b1bf3149d7e1e80-720.webp 720w, /blog/media/9b1bf3149d7e1e80-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774647831903_Infographic-comparing-agent-network-architectures.jpeg": { + "src": "/blog/media/1156ca7a6e102c84-1073.webp", + "srcset": "/blog/media/1156ca7a6e102c84-720.webp 720w, /blog/media/1156ca7a6e102c84-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774647855653_Engineer-troubleshooting-multi-agent-network-issues.jpeg": { + "src": "/blog/media/55966b59864bbf22-1200.webp", + "srcset": "/blog/media/55966b59864bbf22-720.webp 720w, /blog/media/55966b59864bbf22-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774647903852_image.jpeg": { + "src": "/blog/media/83ad11d0c0dfc9e4-1200.webp", + "srcset": "/blog/media/83ad11d0c0dfc9e4-720.webp 720w, /blog/media/83ad11d0c0dfc9e4-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774769240715_Engineers-reviewing-modular-network-scripts-together.jpeg": { + "src": "/blog/media/cc549a53f6aa624e-1200.webp", + "srcset": "/blog/media/cc549a53f6aa624e-720.webp 720w, /blog/media/cc549a53f6aa624e-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774769270405_Professional-managing-secure-AI-network-setup.jpeg": { + "src": "/blog/media/33e540bbe9d0a6d3-1200.webp", + "srcset": "/blog/media/33e540bbe9d0a6d3-720.webp 720w, /blog/media/33e540bbe9d0a6d3-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774856468368_Engineer-coding-decentralized-networking-challenges.jpeg": { + "src": "/blog/media/16f837e8a86afac3-1200.webp", + "srcset": "/blog/media/16f837e8a86afac3-720.webp 720w, /blog/media/16f837e8a86afac3-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774856494543_image.jpeg": { + "src": "/blog/media/1aaf71752fe41d0b-1200.webp", + "srcset": "/blog/media/1aaf71752fe41d0b-720.webp 720w, /blog/media/1aaf71752fe41d0b-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774947162085_Infographic-comparing-decentralized-and-centralized-features.jpeg": { + "src": "/blog/media/a8f2319ac1f24c3e-1073.webp", + "srcset": "/blog/media/a8f2319ac1f24c3e-720.webp 720w, /blog/media/a8f2319ac1f24c3e-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774947199227_Engineer-working-on-decentralized-protocol-code.jpeg": { + "src": "/blog/media/3e251af7051629cf-1200.webp", + "srcset": "/blog/media/3e251af7051629cf-720.webp 720w, /blog/media/3e251af7051629cf-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1774947224422_image.jpeg": { + "src": "/blog/media/153e8191485aad3c-1200.webp", + "srcset": "/blog/media/153e8191485aad3c-720.webp 720w, /blog/media/153e8191485aad3c-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775033641223_Developer-reviews-A2A-agent-card-workflow.jpeg": { + "src": "/blog/media/65aca64b4ea28a1f-1200.webp", + "srcset": "/blog/media/65aca64b4ea28a1f-720.webp 720w, /blog/media/65aca64b4ea28a1f-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775033697931_image.jpeg": { + "src": "/blog/media/61d086545e7c0683-1200.webp", + "srcset": "/blog/media/61d086545e7c0683-720.webp 720w, /blog/media/61d086545e7c0683-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775033772250_Infographic-comparing-A2A-MCP-ANP-protocols.jpeg": { + "src": "/blog/media/78fe64d3edf26b17-1073.webp", + "srcset": "/blog/media/78fe64d3edf26b17-720.webp 720w, /blog/media/78fe64d3edf26b17-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775120277851_Network-engineers-assembling-secure-agent-system.jpeg": { + "src": "/blog/media/f4aacc5842729e9a-1200.webp", + "srcset": "/blog/media/f4aacc5842729e9a-720.webp 720w, /blog/media/f4aacc5842729e9a-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775120279973_IT-manager-reviewing-secure-network-diagram.jpeg": { + "src": "/blog/media/53ba5aaa0b2ebaa9-1200.webp", + "srcset": "/blog/media/53ba5aaa0b2ebaa9-720.webp 720w, /blog/media/53ba5aaa0b2ebaa9-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775120553098_Infographic-comparing-A2A-and-ANP-protocols.jpeg": { + "src": "/blog/media/ddc3ca490ce610d7-1073.webp", + "srcset": "/blog/media/ddc3ca490ce610d7-720.webp 720w, /blog/media/ddc3ca490ce610d7-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775212176803_Engineers-discussing-protocol-overlay-diagrams.jpeg": { + "src": "/blog/media/40ce1f6c8c88ee31-1200.webp", + "srcset": "/blog/media/40ce1f6c8c88ee31-720.webp 720w, /blog/media/40ce1f6c8c88ee31-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775212196253_Infographic-of-structured-versus-unstructured-overlays.jpeg": { + "src": "/blog/media/07cb14354d9f4b2e-1073.webp", + "srcset": "/blog/media/07cb14354d9f4b2e-720.webp 720w, /blog/media/07cb14354d9f4b2e-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775212228804_image.jpeg": { + "src": "/blog/media/9dfbf22635e0bf8d-1200.webp", + "srcset": "/blog/media/9dfbf22635e0bf8d-720.webp 720w, /blog/media/9dfbf22635e0bf8d-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775292725539_Decentralized-vs-centralized-network-mechanics-infographic.jpeg": { + "src": "/blog/media/75af61ad154e6b56-1073.webp", + "srcset": "/blog/media/75af61ad154e6b56-720.webp 720w, /blog/media/75af61ad154e6b56-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775292725961_Engineer-studying-gossip-protocol-diagrams.jpeg": { + "src": "/blog/media/c5777d1a8a0558be-1200.webp", + "srcset": "/blog/media/c5777d1a8a0558be-720.webp 720w, /blog/media/c5777d1a8a0558be-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775292732524_IT-expert-wiring-peer-to-peer-AI-setup.jpeg": { + "src": "/blog/media/c095d1340ccfe6a6-1200.webp", + "srcset": "/blog/media/c095d1340ccfe6a6-720.webp 720w, /blog/media/c095d1340ccfe6a6-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775375841687_Infographic-showing-protocol-wrapping-process-and-benefits.jpeg": { + "src": "/blog/media/83facb32c7a2286c-1073.webp", + "srcset": "/blog/media/83facb32c7a2286c-720.webp 720w, /blog/media/83facb32c7a2286c-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775375874879_Engineer-reviewing-protocol-diagram-at-desk.jpeg": { + "src": "/blog/media/901907c01a1dd56f-1200.webp", + "srcset": "/blog/media/901907c01a1dd56f-720.webp 720w, /blog/media/901907c01a1dd56f-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775375877063_Analyst-observing-peer-to-peer-benchmarks.jpeg": { + "src": "/blog/media/b996c1e998194635-1200.webp", + "srcset": "/blog/media/b996c1e998194635-720.webp 720w, /blog/media/b996c1e998194635-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775469216768_Network-engineers-collaborating-on-peer-network.jpeg": { + "src": "/blog/media/b4a1d322372fe2a1-1200.webp", + "srcset": "/blog/media/b4a1d322372fe2a1-720.webp 720w, /blog/media/b4a1d322372fe2a1-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775469259877_IT-professional-managing-encrypted-network-setup.jpeg": { + "src": "/blog/media/6e312fd23512c097-1200.webp", + "srcset": "/blog/media/6e312fd23512c097-720.webp 720w, /blog/media/6e312fd23512c097-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775552478249_Infographic-on-secure-ai-overlay-agent-networking.jpeg": { + "src": "/blog/media/bd72d7a147f271d0-1073.webp", + "srcset": "/blog/media/bd72d7a147f271d0-720.webp 720w, /blog/media/bd72d7a147f271d0-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775552482882_IT-specialist-developing-overlay-network-automation.jpeg": { + "src": "/blog/media/03c47f058a8b2b9a-1200.webp", + "srcset": "/blog/media/03c47f058a8b2b9a-720.webp 720w, /blog/media/03c47f058a8b2b9a-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775552483269_Engineer-compares-kubernetes-cni-overlay-tools.jpeg": { + "src": "/blog/media/b59026c306ca02a3-1200.webp", + "srcset": "/blog/media/b59026c306ca02a3-720.webp 720w, /blog/media/b59026c306ca02a3-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775647767175_Engineer-reviewing-secure-protocol-diagrams.jpeg": { + "src": "/blog/media/8f61d277dc9a213c-1200.webp", + "srcset": "/blog/media/8f61d277dc9a213c-720.webp 720w, /blog/media/8f61d277dc9a213c-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775647781197_Manager-comparing-centralized-and-decentralized-protocols.jpeg": { + "src": "/blog/media/8a134899b9ddc3f1-1200.webp", + "srcset": "/blog/media/8a134899b9ddc3f1-720.webp 720w, /blog/media/8a134899b9ddc3f1-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775647788203_Infographic-showing-secure-protocol-comparison.jpeg": { + "src": "/blog/media/1db3e24a11d16302-1073.webp", + "srcset": "/blog/media/1db3e24a11d16302-720.webp 720w, /blog/media/1db3e24a11d16302-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775814480768_Engineer-monitors-network-traffic-workstation.jpeg": { + "src": "/blog/media/9b7fa5637ce368e1-1200.webp", + "srcset": "/blog/media/9b7fa5637ce368e1-720.webp 720w, /blog/media/9b7fa5637ce368e1-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775814502187_image.jpeg": { + "src": "/blog/media/2cbb355680a586a2-1200.webp", + "srcset": "/blog/media/2cbb355680a586a2-720.webp 720w, /blog/media/2cbb355680a586a2-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775891132944_IT-specialist-examining-agent-network-scaling.jpeg": { + "src": "/blog/media/83426afdcda850af-1200.webp", + "srcset": "/blog/media/83426afdcda850af-720.webp 720w, /blog/media/83426afdcda850af-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775891136652_Engineers-collaborating-on-distributed-AI-workspace.jpeg": { + "src": "/blog/media/4d318e30ccb04cc6-1200.webp", + "srcset": "/blog/media/4d318e30ccb04cc6-720.webp 720w, /blog/media/4d318e30ccb04cc6-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775891310161_Infographic-comparing-agent-network-metrics.jpeg": { + "src": "/blog/media/a4943505ef9eda37-1073.webp", + "srcset": "/blog/media/a4943505ef9eda37-720.webp 720w, /blog/media/a4943505ef9eda37-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775984877944_Professional-setting-up-secure-AI-networking-workflow.jpeg": { + "src": "/blog/media/8a0ae6aff7ae9a27-1200.webp", + "srcset": "/blog/media/8a0ae6aff7ae9a27-720.webp 720w, /blog/media/8a0ae6aff7ae9a27-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775984886984_Engineer-planning-encrypted-agent-network-workflow.jpeg": { + "src": "/blog/media/0180cd6af491e98c-1200.webp", + "srcset": "/blog/media/0180cd6af491e98c-720.webp 720w, /blog/media/0180cd6af491e98c-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1775984924191_Infographic-with-secure-AI-networking-workflow-steps.jpeg": { + "src": "/blog/media/873dbb02beb43e30-1073.webp", + "srcset": "/blog/media/873dbb02beb43e30-720.webp 720w, /blog/media/873dbb02beb43e30-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776075614018_AI-engineer-reviewing-network-diagrams-at-home-desk.jpeg": { + "src": "/blog/media/678ad364a0911dfe-1200.webp", + "srcset": "/blog/media/678ad364a0911dfe-720.webp 720w, /blog/media/678ad364a0911dfe-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776075614031_IT-professional-updating-network-security-dashboard.jpeg": { + "src": "/blog/media/cfc2683388aa24a3-1200.webp", + "srcset": "/blog/media/cfc2683388aa24a3-720.webp 720w, /blog/media/cfc2683388aa24a3-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776164117473_image.jpeg": { + "src": "/blog/media/ca8f7fb2cddf4021-1200.webp", + "srcset": "/blog/media/ca8f7fb2cddf4021-720.webp 720w, /blog/media/ca8f7fb2cddf4021-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776164123073_image.jpeg": { + "src": "/blog/media/1d6818d4da840374-1200.webp", + "srcset": "/blog/media/1d6818d4da840374-720.webp 720w, /blog/media/1d6818d4da840374-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776164299069_Infographic-shows-persistent-addresses-benefits-and-uses.jpeg": { + "src": "/blog/media/7a826932a9fd0b64-1073.webp", + "srcset": "/blog/media/7a826932a9fd0b64-720.webp 720w, /blog/media/7a826932a9fd0b64-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776252676328_Infographic-showing-decentralized-trust-model-categories.jpeg": { + "src": "/blog/media/06c3a2578f8c8a26-1073.webp", + "srcset": "/blog/media/06c3a2578f8c8a26-720.webp 720w, /blog/media/06c3a2578f8c8a26-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776252716798_image.jpeg": { + "src": "/blog/media/0c5f4200c1abdcef-1200.webp", + "srcset": "/blog/media/0c5f4200c1abdcef-720.webp 720w, /blog/media/0c5f4200c1abdcef-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776252717054_image.jpeg": { + "src": "/blog/media/b8cf8571b5ac2c95-1200.webp", + "srcset": "/blog/media/b8cf8571b5ac2c95-720.webp 720w, /blog/media/b8cf8571b5ac2c95-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776341435510_Engineer-configures-blockchain-agent-communication.jpeg": { + "src": "/blog/media/dd11d1f1e085d055-1200.webp", + "srcset": "/blog/media/dd11d1f1e085d055-720.webp 720w, /blog/media/dd11d1f1e085d055-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776341448129_Analyst-monitors-AI-agent-network-in-office.jpeg": { + "src": "/blog/media/5706a321bc66186e-1200.webp", + "srcset": "/blog/media/5706a321bc66186e-720.webp 720w, /blog/media/5706a321bc66186e-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776342455053_Infographic-of-multi-cloud-AI-agent-security-steps.jpeg": { + "src": "/blog/media/e493afa2bd8df524-1073.webp", + "srcset": "/blog/media/e493afa2bd8df524-720.webp 720w, /blog/media/e493afa2bd8df524-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776434492113_Developer-setting-up-agent-network-in-containers.jpeg": { + "src": "/blog/media/11f2771eca0d49b9-1200.webp", + "srcset": "/blog/media/11f2771eca0d49b9-720.webp 720w, /blog/media/11f2771eca0d49b9-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776434531035_Engineering-team-collaborating-on-P2P-project.jpeg": { + "src": "/blog/media/6f47f46c79c06d0d-1200.webp", + "srcset": "/blog/media/6f47f46c79c06d0d-720.webp 720w, /blog/media/6f47f46c79c06d0d-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776446947548_Engineer-working-on-cloud-networking-dashboard.jpeg": { + "src": "/blog/media/9a81fa6e52df4665-1200.webp", + "srcset": "/blog/media/9a81fa6e52df4665-720.webp 720w, /blog/media/9a81fa6e52df4665-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776446982517_Team-planning-multi-cloud-agent-overlays.jpeg": { + "src": "/blog/media/9251d2a8512361ac-1200.webp", + "srcset": "/blog/media/9251d2a8512361ac-720.webp 720w, /blog/media/9251d2a8512361ac-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776447014878_Infographic-summarizing-multi-cloud-agent-networking.jpeg": { + "src": "/blog/media/23117a1b1bb3484b-1073.webp", + "srcset": "/blog/media/23117a1b1bb3484b-720.webp 720w, /blog/media/23117a1b1bb3484b-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776529828578_Infographic-comparing-cloud-and-peer-to-peer-networking.jpeg": { + "src": "/blog/media/2b36e2f702085886-1073.webp", + "srcset": "/blog/media/2b36e2f702085886-720.webp 720w, /blog/media/2b36e2f702085886-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776529849552_Engineer-working-in-sunny-office-on-networking.jpeg": { + "src": "/blog/media/3942399844d7aeb6-1200.webp", + "srcset": "/blog/media/3942399844d7aeb6-720.webp 720w, /blog/media/3942399844d7aeb6-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776529864142_IT-team-collaboratively-solving-networking-problem.jpeg": { + "src": "/blog/media/caff50e5c834fac5-1200.webp", + "srcset": "/blog/media/caff50e5c834fac5-720.webp 720w, /blog/media/caff50e5c834fac5-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776573983359_Team-collaborating-on-AI-agent-platform-comparison.jpeg": { + "src": "/blog/media/eb249514a3aa42f7-1200.webp", + "srcset": "/blog/media/eb249514a3aa42f7-720.webp 720w, /blog/media/eb249514a3aa42f7-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776573988067_pilotprotocol.jpg": { + "src": "/blog/media/fda95a81df2c5e7e-1200.webp", + "srcset": "/blog/media/fda95a81df2c5e7e-720.webp 720w, /blog/media/fda95a81df2c5e7e-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776573992678_gopilot.jpg": { + "src": "/blog/media/afe8de2ccd8ea3e8-1200.webp", + "srcset": "/blog/media/afe8de2ccd8ea3e8-720.webp 720w, /blog/media/afe8de2ccd8ea3e8-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776573999692_openlazarus.jpg": { + "src": "/blog/media/3b63513906a2d714-1200.webp", + "srcset": "/blog/media/3b63513906a2d714-720.webp 720w, /blog/media/3b63513906a2d714-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776603764191_Architect-reviews-secure-agent-protocol-diagrams.jpeg": { + "src": "/blog/media/4d3b03b55d3fc542-1200.webp", + "srcset": "/blog/media/4d3b03b55d3fc542-720.webp 720w, /blog/media/4d3b03b55d3fc542-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776603764428_Team-collaborating-on-agent-network-diagrams.jpeg": { + "src": "/blog/media/08c7ed899d5d3d0d-1200.webp", + "srcset": "/blog/media/08c7ed899d5d3d0d-720.webp 720w, /blog/media/08c7ed899d5d3d0d-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776684818465_Tech-professional-reviews-persistent-network-settings.jpeg": { + "src": "/blog/media/91a41cbbe038f45e-1200.webp", + "srcset": "/blog/media/91a41cbbe038f45e-720.webp 720w, /blog/media/91a41cbbe038f45e-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776684820974_IT-engineer-traces-cables-in-server-rack.jpeg": { + "src": "/blog/media/1d229f576684d955-1200.webp", + "srcset": "/blog/media/1d229f576684d955-720.webp 720w, /blog/media/1d229f576684d955-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776685069021_Infographic-compares-persistent-and-ephemeral-addressing.jpeg": { + "src": "/blog/media/a66d9f1031c70288-1073.webp", + "srcset": "/blog/media/a66d9f1031c70288-720.webp 720w, /blog/media/a66d9f1031c70288-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776935316759_Engineer-coding-AI-agent-discovery-logic.jpeg": { + "src": "/blog/media/a3d4c115bf344ff1-1200.webp", + "srcset": "/blog/media/a3d4c115bf344ff1-720.webp 720w, /blog/media/a3d4c115bf344ff1-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776935325450_IT-specialist-reviewing-agent-network-query-logs.jpeg": { + "src": "/blog/media/3fec63807f28e80e-1200.webp", + "srcset": "/blog/media/3fec63807f28e80e-720.webp 720w, /blog/media/3fec63807f28e80e-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776935780495_Infographic-outlining-agent-discovery-process-stages.jpeg": { + "src": "/blog/media/bad389d76b6bb7d3-1073.webp", + "srcset": "/blog/media/bad389d76b6bb7d3-720.webp 720w, /blog/media/bad389d76b6bb7d3-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997198575_pilotprotocol.jpg": { + "src": "/blog/media/97f79eba57ff5e75-1200.webp", + "srcset": "/blog/media/97f79eba57ff5e75-720.webp 720w, /blog/media/97f79eba57ff5e75-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997202584_gitlab.jpg": { + "src": "/blog/media/b286b4f574ab1374-1200.webp", + "srcset": "/blog/media/b286b4f574ab1374-720.webp 720w, /blog/media/b286b4f574ab1374-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997209091_bitbucket.jpg": { + "src": "/blog/media/f762cfe9974db714-1200.webp", + "srcset": "/blog/media/f762cfe9974db714-720.webp 720w, /blog/media/f762cfe9974db714-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997217455_codeberg.jpg": { + "src": "/blog/media/2a1c6e3cf069909e-1200.webp", + "srcset": "/blog/media/2a1c6e3cf069909e-720.webp 720w, /blog/media/2a1c6e3cf069909e-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997221309_about.jpg": { + "src": "/blog/media/d0a55b18806cdc9a-1200.webp", + "srcset": "/blog/media/d0a55b18806cdc9a-720.webp 720w, /blog/media/d0a55b18806cdc9a-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1776997270701_sourceforge.jpeg": { + "src": "/blog/media/fcc135546e5fd5b2-1200.webp", + "srcset": "/blog/media/fcc135546e5fd5b2-720.webp 720w, /blog/media/fcc135546e5fd5b2-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082231041_Team-reviewing-AI-agent-alternatives-around-sunlit-office-table.jpeg": { + "src": "/blog/media/40bbea0c6321220e-1200.webp", + "srcset": "/blog/media/40bbea0c6321220e-720.webp 720w, /blog/media/40bbea0c6321220e-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082233954_pilotprotocol.jpg": { + "src": "/blog/media/0d5297c41814eec4-1200.webp", + "srcset": "/blog/media/0d5297c41814eec4-720.webp 720w, /blog/media/0d5297c41814eec4-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082238005_a2a-protocol.jpg": { + "src": "/blog/media/a691cdcae512ce41-1200.webp", + "srcset": "/blog/media/a691cdcae512ce41-720.webp 720w, /blog/media/a691cdcae512ce41-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082252895_agentcommunicationprotocol.jpeg": { + "src": "/blog/media/df9194a6240ebd66-1107.webp", + "srcset": "/blog/media/df9194a6240ebd66-720.webp 720w, /blog/media/df9194a6240ebd66-1107.webp 1107w", + "width": 1107, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082256350_hooble.jpg": { + "src": "/blog/media/0939810b0b2ffeec-1200.webp", + "srcset": "/blog/media/0939810b0b2ffeec-720.webp 720w, /blog/media/0939810b0b2ffeec-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082260209_openagents.jpg": { + "src": "/blog/media/1bb3e7671e0e4fae-1200.webp", + "srcset": "/blog/media/1bb3e7671e0e4fae-720.webp 720w, /blog/media/1bb3e7671e0e4fae-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777082264924_agentdm.jpg": { + "src": "/blog/media/380781113e7198ce-1200.webp", + "srcset": "/blog/media/380781113e7198ce-720.webp 720w, /blog/media/380781113e7198ce-1200.webp 1200w", + "width": 1200, + "height": 675 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777259492611_Infographic-outlining-overlay-networking-key-features.jpeg": { + "src": "/blog/media/5f2f91716ca0652c-1073.webp", + "srcset": "/blog/media/5f2f91716ca0652c-720.webp 720w, /blog/media/5f2f91716ca0652c-1073.webp 1073w", + "width": 1073, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777259536908_Engineer-sketching-overlay-network-on-paper.jpeg": { + "src": "/blog/media/2e42c23c03e50b8e-1200.webp", + "srcset": "/blog/media/2e42c23c03e50b8e-720.webp 720w, /blog/media/2e42c23c03e50b8e-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777259614447_Engineers-discussing-network-routing-at-whiteboard.jpeg": { + "src": "/blog/media/0c346e2ced1828e0-1200.webp", + "srcset": "/blog/media/0c346e2ced1828e0-720.webp 720w, /blog/media/0c346e2ced1828e0-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777413448494_Technician-maintaining-servers-and-network-cluster.jpeg": { + "src": "/blog/media/f676332c99e02232-1200.webp", + "srcset": "/blog/media/f676332c99e02232-720.webp 720w, /blog/media/f676332c99e02232-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777413470848_Team-collaborating-on-distributed-system-diagram.jpeg": { + "src": "/blog/media/30fbbed8a8261e52-1200.webp", + "srcset": "/blog/media/30fbbed8a8261e52-720.webp 720w, /blog/media/30fbbed8a8261e52-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777439165426_Architect-reviewing-blockchain-validation-flowcharts.jpeg": { + "src": "/blog/media/15b994953a816a4a-720.webp", + "srcset": "/blog/media/15b994953a816a4a-720.webp 720w", + "width": 720, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777439165473_Developers-collaborating-on-decentralized-protocol-design.jpeg": { + "src": "/blog/media/12dedacabc7b8d3d-1200.webp", + "srcset": "/blog/media/12dedacabc7b8d3d-720.webp 720w, /blog/media/12dedacabc7b8d3d-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777439467967_Comparison-infographic-traditional-versus-trustless-protocols.jpeg": { + "src": "/blog/media/9a2cecf4c212a102-1080.webp", + "srcset": "/blog/media/9a2cecf4c212a102-720.webp 720w, /blog/media/9a2cecf4c212a102-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777529517524_Network-admin-reviewing-IPv6-address-map-in-office.jpeg": { + "src": "/blog/media/3e04e6e77e56cabd-1200.webp", + "srcset": "/blog/media/3e04e6e77e56cabd-720.webp 720w, /blog/media/3e04e6e77e56cabd-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777529546442_Woman-working-on-decentralized-AI-network-at-home-table.jpeg": { + "src": "/blog/media/6ef44a61e043306e-1200.webp", + "srcset": "/blog/media/6ef44a61e043306e-720.webp 720w, /blog/media/6ef44a61e043306e-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777529956963_Infographic-comparing-traditional-vs-crypto-derived-address-assignment.jpeg": { + "src": "/blog/media/a6e56c36069592e3-1080.webp", + "srcset": "/blog/media/a6e56c36069592e3-720.webp 720w, /blog/media/a6e56c36069592e3-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777628828255_Developer-runs-peer-to-peer-agent-software.jpeg": { + "src": "/blog/media/b4aa1a988fc6bc8b-1200.webp", + "srcset": "/blog/media/b4aa1a988fc6bc8b-720.webp 720w, /blog/media/b4aa1a988fc6bc8b-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777628840849_Engineer-watching-AI-network-connections-on-monitor.jpeg": { + "src": "/blog/media/a0d1b772e9324c5a-1200.webp", + "srcset": "/blog/media/a0d1b772e9324c5a-720.webp 720w, /blog/media/a0d1b772e9324c5a-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777629212337_Infographic-comparing-P2P-and-client-server-models.jpeg": { + "src": "/blog/media/aa00cb4e02bdd925-1080.webp", + "srcset": "/blog/media/aa00cb4e02bdd925-720.webp 720w, /blog/media/aa00cb4e02bdd925-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777700172237_Developer-coding-cryptography-benchmark.jpeg": { + "src": "/blog/media/d9cda989a04373e6-1200.webp", + "srcset": "/blog/media/d9cda989a04373e6-720.webp 720w, /blog/media/d9cda989a04373e6-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777700186853_Engineer-sketching-encryption-protocol-diagram.jpeg": { + "src": "/blog/media/149142bbdf83c402-1200.webp", + "srcset": "/blog/media/149142bbdf83c402-720.webp 720w, /blog/media/149142bbdf83c402-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777700606533_Infographic-comparing-encryption-protocols-for-AI.jpeg": { + "src": "/blog/media/e5dab42cfb615e5e-1080.webp", + "srcset": "/blog/media/e5dab42cfb615e5e-720.webp 720w, /blog/media/e5dab42cfb615e5e-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777786714016_Woman-reviewing-AI-agent-network-trust-diagram.jpeg": { + "src": "/blog/media/2bf2a38129e4e968-1200.webp", + "srcset": "/blog/media/2bf2a38129e4e968-720.webp 720w, /blog/media/2bf2a38129e4e968-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777786775321_Team-discussing-decentralized-agent-trust-vulnerabilities.jpeg": { + "src": "/blog/media/9d19911733209182-1200.webp", + "srcset": "/blog/media/9d19911733209182-720.webp 720w, /blog/media/9d19911733209182-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777787125199_Comparison-of-reputation-and-blockchain-trust-models.jpeg": { + "src": "/blog/media/eb6fa95bd21f65a2-1080.webp", + "srcset": "/blog/media/eb6fa95bd21f65a2-720.webp 720w, /blog/media/eb6fa95bd21f65a2-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777871168203_Engineer-reviewing-network-system-diagram-at-desk.jpeg": { + "src": "/blog/media/325d9b48f04c7f03-1200.webp", + "srcset": "/blog/media/325d9b48f04c7f03-720.webp 720w, /blog/media/325d9b48f04c7f03-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777871169861_Security-team-discussing-layered-defense-at-meeting-table.jpeg": { + "src": "/blog/media/a88faa99b86c89b3-1200.webp", + "srcset": "/blog/media/a88faa99b86c89b3-720.webp 720w, /blog/media/a88faa99b86c89b3-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777871820224_Hierarchy-pyramid-security-layers-in-multi-agent-systems.jpeg": { + "src": "/blog/media/cff5e8614470344b-1080.webp", + "srcset": "/blog/media/cff5e8614470344b-720.webp 720w, /blog/media/cff5e8614470344b-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777973797189_Developers-discuss-secure-group-messaging.jpeg": { + "src": "/blog/media/ae49b8701642e7d0-1200.webp", + "srcset": "/blog/media/ae49b8701642e7d0-720.webp 720w, /blog/media/ae49b8701642e7d0-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1777973934794_image.jpeg": { + "src": "/blog/media/42026e290a464998-1200.webp", + "srcset": "/blog/media/42026e290a464998-720.webp 720w, /blog/media/42026e290a464998-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778076415496_IT-manager-reviewing-protocol-integration-diagram.jpeg": { + "src": "/blog/media/ebda91bce44067fa-1200.webp", + "srcset": "/blog/media/ebda91bce44067fa-720.webp 720w, /blog/media/ebda91bce44067fa-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778076544186_image.jpeg": { + "src": "/blog/media/3a4b1f69d2e080da-1200.webp", + "srcset": "/blog/media/3a4b1f69d2e080da-720.webp 720w, /blog/media/3a4b1f69d2e080da-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778077093971_Infographic-comparing-integration-patterns-and-security.jpeg": { + "src": "/blog/media/ecc1c9003c24d2bd-1080.webp", + "srcset": "/blog/media/ecc1c9003c24d2bd-720.webp 720w, /blog/media/ecc1c9003c24d2bd-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778130268804_Engineer-working-with-decentralized-AI-encryption.jpeg": { + "src": "/blog/media/630a5d24633040a3-1200.webp", + "srcset": "/blog/media/630a5d24633040a3-720.webp 720w, /blog/media/630a5d24633040a3-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778130400656_image.jpeg": { + "src": "/blog/media/bb035eeeeec02b3d-1200.webp", + "srcset": "/blog/media/bb035eeeeec02b3d-720.webp 720w, /blog/media/bb035eeeeec02b3d-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778130755782_Infographic-of-encrypted-AI-data-exchange-steps.jpeg": { + "src": "/blog/media/e3d0ffacd2884d3f-1080.webp", + "srcset": "/blog/media/e3d0ffacd2884d3f-720.webp 720w, /blog/media/e3d0ffacd2884d3f-1080.webp 1080w", + "width": 1080, + "height": 720 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778218558578_IT-architect-working-on-secure-multi-cloud-AI-integration.jpeg": { + "src": "/blog/media/72142021fb900f9d-1200.webp", + "srcset": "/blog/media/72142021fb900f9d-720.webp 720w, /blog/media/72142021fb900f9d-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778218558592_Security-analyst-reviewing-access-control-policy.jpeg": { + "src": "/blog/media/afa0ccf0df1bf736-1200.webp", + "srcset": "/blog/media/afa0ccf0df1bf736-720.webp 720w, /blog/media/afa0ccf0df1bf736-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "https://csuxjmfbwmkxiegfpljm.supabase.co/storage/v1/object/public/blog-images/organization-24002/1778219062728_Infographic-comparing-traditional-and-advanced-secure-data-exchange.jpeg": { + "src": "/blog/media/b035de76bee4748a-1080.webp", + "srcset": "/blog/media/b035de76bee4748a-720.webp 720w, /blog/media/b035de76bee4748a-1080.webp 1080w", + "width": 1080, + "height": 720 + } +} diff --git a/src/data/bannerImageManifest.json b/src/data/bannerImageManifest.json new file mode 100644 index 00000000..415b7992 --- /dev/null +++ b/src/data/bannerImageManifest.json @@ -0,0 +1,608 @@ +{ + "/blog/banners/a2a-agent-cards-over-pilot-tunnels.webp": { + "src": "/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-1200.webp", + "srcset": "/blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-720.webp 720w, /blog/banners/optimized/a2a-agent-cards-over-pilot-tunnels-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/advanced-network-automation-tips-secure-ai-systems.jpg": { + "src": "/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-720.webp 720w, /blog/banners/optimized/advanced-network-automation-tips-secure-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/agent-communication-security-best-practices.jpg": { + "src": "/blog/banners/optimized/agent-communication-security-best-practices-1200.webp", + "srcset": "/blog/banners/optimized/agent-communication-security-best-practices-720.webp 720w, /blog/banners/optimized/agent-communication-security-best-practices-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "/blog/banners/ai-agent-discovery-process-p2p-networks.jpg": { + "src": "/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-1200.webp", + "srcset": "/blog/banners/optimized/ai-agent-discovery-process-p2p-networks-720.webp 720w, /blog/banners/optimized/ai-agent-discovery-process-p2p-networks-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/ai-agent-network-examples-secure-scalable-connectivity.jpg": { + "src": "/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-1200.webp", + "srcset": "/blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-720.webp 720w, /blog/banners/optimized/ai-agent-network-examples-secure-scalable-connectivity-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/ai-networking-best-practices-secure-scalable-systems.jpg": { + "src": "/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-1200.webp", + "srcset": "/blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-720.webp 720w, /blog/banners/optimized/ai-networking-best-practices-secure-scalable-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/ai-networking-challenges-decentralized-systems.jpg": { + "src": "/blog/banners/optimized/ai-networking-challenges-decentralized-systems-1200.webp", + "srcset": "/blog/banners/optimized/ai-networking-challenges-decentralized-systems-720.webp 720w, /blog/banners/optimized/ai-networking-challenges-decentralized-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/ai-networking-terminology-a2a-mcp-anp-protocols.jpg": { + "src": "/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-1200.webp", + "srcset": "/blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-720.webp 720w, /blog/banners/optimized/ai-networking-terminology-a2a-mcp-anp-protocols-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "/blog/banners/autonomous-agent-networking-distributed-ai.jpg": { + "src": "/blog/banners/optimized/autonomous-agent-networking-distributed-ai-1200.webp", + "srcset": "/blog/banners/optimized/autonomous-agent-networking-distributed-ai-720.webp 720w, /blog/banners/optimized/autonomous-agent-networking-distributed-ai-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/benchmarking-http-vs-udp-overlay.webp": { + "src": "/blog/banners/optimized/benchmarking-http-vs-udp-overlay-1200.webp", + "srcset": "/blog/banners/optimized/benchmarking-http-vs-udp-overlay-720.webp 720w, /blog/banners/optimized/benchmarking-http-vs-udp-overlay-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/boarding-pilotagent-org-alternatives-3.jpg": { + "src": "/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-1200.webp", + "srcset": "/blog/banners/optimized/boarding-pilotagent-org-alternatives-3-720.webp 720w, /blog/banners/optimized/boarding-pilotagent-org-alternatives-3-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/build-agent-swarm-self-organizes.webp": { + "src": "/blog/banners/optimized/build-agent-swarm-self-organizes-1200.webp", + "srcset": "/blog/banners/optimized/build-agent-swarm-self-organizes-720.webp 720w, /blog/banners/optimized/build-agent-swarm-self-organizes-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/build-ai-agent-marketplace-discovery-reputation.webp": { + "src": "/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-1200.webp", + "srcset": "/blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-720.webp 720w, /blog/banners/optimized/build-ai-agent-marketplace-discovery-reputation-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/build-multi-agent-network-five-minutes.webp": { + "src": "/blog/banners/optimized/build-multi-agent-network-five-minutes-1200.webp", + "srcset": "/blog/banners/optimized/build-multi-agent-network-five-minutes-720.webp 720w, /blog/banners/optimized/build-multi-agent-network-five-minutes-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/build-openclaw-agent-self-organizes-pilot.webp": { + "src": "/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-1200.webp", + "srcset": "/blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-720.webp 720w, /blog/banners/optimized/build-openclaw-agent-self-organizes-pilot-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/building-custom-pilot-skills-openclaw.webp": { + "src": "/blog/banners/optimized/building-custom-pilot-skills-openclaw-1200.webp", + "srcset": "/blog/banners/optimized/building-custom-pilot-skills-openclaw-720.webp 720w, /blog/banners/optimized/building-custom-pilot-skills-openclaw-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/chain-ai-models-across-machines.webp": { + "src": "/blog/banners/optimized/chain-ai-models-across-machines-1200.webp", + "srcset": "/blog/banners/optimized/chain-ai-models-across-machines-720.webp 720w, /blog/banners/optimized/chain-ai-models-across-machines-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/claude-agent-teams-over-pilot.webp": { + "src": "/blog/banners/optimized/claude-agent-teams-over-pilot-1200.webp", + "srcset": "/blog/banners/optimized/claude-agent-teams-over-pilot-720.webp 720w, /blog/banners/optimized/claude-agent-teams-over-pilot-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/clawhub-to-live-network-openclaw-discovery.webp": { + "src": "/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-1200.webp", + "srcset": "/blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-720.webp 720w, /blog/banners/optimized/clawhub-to-live-network-openclaw-discovery-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/cloud-networking-secure-peer-to-peer-distributed-ai.jpg": { + "src": "/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-1200.webp", + "srcset": "/blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-720.webp 720w, /blog/banners/optimized/cloud-networking-secure-peer-to-peer-distributed-ai-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/connect-agents-across-aws-gcp-azure-without-vpn.webp": { + "src": "/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-1200.webp", + "srcset": "/blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-720.webp 720w, /blog/banners/optimized/connect-agents-across-aws-gcp-azure-without-vpn-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/connect-ai-agents-behind-nat-without-vpn.webp": { + "src": "/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-1200.webp", + "srcset": "/blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-720.webp 720w, /blog/banners/optimized/connect-ai-agents-behind-nat-without-vpn-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/connecting-mcp-servers-across-agents.webp": { + "src": "/blog/banners/optimized/connecting-mcp-servers-across-agents-1200.webp", + "srcset": "/blog/banners/optimized/connecting-mcp-servers-across-agents-720.webp 720w, /blog/banners/optimized/connecting-mcp-servers-across-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/contributing-codebase-tour.webp": { + "src": "/blog/banners/optimized/contributing-codebase-tour-1200.webp", + "srcset": "/blog/banners/optimized/contributing-codebase-tour-720.webp 720w, /blog/banners/optimized/contributing-codebase-tour-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/cross-company-agent-collaboration-without-shared-infrastructure.webp": { + "src": "/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-1200.webp", + "srcset": "/blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-720.webp 720w, /blog/banners/optimized/cross-company-agent-collaboration-without-shared-infrastructure-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/decentralized-communication-protocols-ai-developers.jpg": { + "src": "/blog/banners/optimized/decentralized-communication-protocols-ai-developers-1200.webp", + "srcset": "/blog/banners/optimized/decentralized-communication-protocols-ai-developers-720.webp 720w, /blog/banners/optimized/decentralized-communication-protocols-ai-developers-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/decentralized-networking-p2p-solutions-ai-architectures.jpg": { + "src": "/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-1200.webp", + "srcset": "/blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-720.webp 720w, /blog/banners/optimized/decentralized-networking-p2p-solutions-ai-architectures-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/decentralized-task-marketplace-agents.webp": { + "src": "/blog/banners/optimized/decentralized-task-marketplace-agents-1200.webp", + "srcset": "/blog/banners/optimized/decentralized-task-marketplace-agents-720.webp 720w, /blog/banners/optimized/decentralized-task-marketplace-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/direct-communication-protocols-ai-agents-guide.jpg": { + "src": "/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-1200.webp", + "srcset": "/blog/banners/optimized/direct-communication-protocols-ai-agents-guide-720.webp 720w, /blog/banners/optimized/direct-communication-protocols-ai-agents-guide-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/distributed-monitoring-without-prometheus.webp": { + "src": "/blog/banners/optimized/distributed-monitoring-without-prometheus-1200.webp", + "srcset": "/blog/banners/optimized/distributed-monitoring-without-prometheus-720.webp 720w, /blog/banners/optimized/distributed-monitoring-without-prometheus-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/distributed-rag-without-central-knowledge-base.webp": { + "src": "/blog/banners/optimized/distributed-rag-without-central-knowledge-base-1200.webp", + "srcset": "/blog/banners/optimized/distributed-rag-without-central-knowledge-base-720.webp 720w, /blog/banners/optimized/distributed-rag-without-central-knowledge-base-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/emergent-trust-networks-agents-choose-peers.webp": { + "src": "/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-1200.webp", + "srcset": "/blog/banners/optimized/emergent-trust-networks-agents-choose-peers-720.webp 720w, /blog/banners/optimized/emergent-trust-networks-agents-choose-peers-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/encrypted-data-exchange-for-decentralized-ai-systems.jpg": { + "src": "/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-720.webp 720w, /blog/banners/optimized/encrypted-data-exchange-for-decentralized-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/encrypted-tunnel-advantages-peer-to-peer-ai-networks.jpg": { + "src": "/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-1200.webp", + "srcset": "/blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-720.webp 720w, /blog/banners/optimized/encrypted-tunnel-advantages-peer-to-peer-ai-networks-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/encryption-protocols-for-secure-ai-systems-a-practical-guide.jpg": { + "src": "/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-1200.webp", + "srcset": "/blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-720.webp 720w, /blog/banners/optimized/encryption-protocols-for-secure-ai-systems-a-practical-guide-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/enterprise-identity-integration-pilot-protocol.webp": { + "src": "/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-1200.webp", + "srcset": "/blog/banners/optimized/enterprise-identity-integration-pilot-protocol-720.webp 720w, /blog/banners/optimized/enterprise-identity-integration-pilot-protocol-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/enterprise-phase-3-rbac-policies-audit-fleet.webp": { + "src": "/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-1200.webp", + "srcset": "/blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-720.webp 720w, /blog/banners/optimized/enterprise-phase-3-rbac-policies-audit-fleet-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/enterprise-private-networks-roadmap.webp": { + "src": "/blog/banners/optimized/enterprise-private-networks-roadmap-1200.webp", + "srcset": "/blog/banners/optimized/enterprise-private-networks-roadmap-720.webp 720w, /blog/banners/optimized/enterprise-private-networks-roadmap-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/enterprise-production-complete-identity-directory-audit-export.webp": { + "src": "/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-1200.webp", + "srcset": "/blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-720.webp 720w, /blog/banners/optimized/enterprise-production-complete-identity-directory-audit-export-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/federated-learning-p2p-communication.webp": { + "src": "/blog/banners/optimized/federated-learning-p2p-communication-1200.webp", + "srcset": "/blog/banners/optimized/federated-learning-p2p-communication-720.webp 720w, /blog/banners/optimized/federated-learning-p2p-communication-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/github-com-alternatives-6.jpg": { + "src": "/blog/banners/optimized/github-com-alternatives-6-1200.webp", + "srcset": "/blog/banners/optimized/github-com-alternatives-6-720.webp 720w, /blog/banners/optimized/github-com-alternatives-6-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/hipaa-compliant-agent-communication.webp": { + "src": "/blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp", + "srcset": "/blog/banners/optimized/hipaa-compliant-agent-communication-720.webp 720w, /blog/banners/optimized/hipaa-compliant-agent-communication-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/how-626-agents-autonomously-adopted-pilot.webp": { + "src": "/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-1200.webp", + "srcset": "/blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-720.webp 720w, /blog/banners/optimized/how-626-agents-autonomously-adopted-pilot-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/how-ai-agents-discover-each-other.webp": { + "src": "/blog/banners/optimized/how-ai-agents-discover-each-other-1200.webp", + "srcset": "/blog/banners/optimized/how-ai-agents-discover-each-other-720.webp 720w, /blog/banners/optimized/how-ai-agents-discover-each-other-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/how-mutual-trust-secures-decentralized-ai-agent-networks.jpg": { + "src": "/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-1200.webp", + "srcset": "/blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-720.webp 720w, /blog/banners/optimized/how-mutual-trust-secures-decentralized-ai-agent-networks-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/how-pilot-protocol-works.webp": { + "src": "/blog/banners/optimized/how-pilot-protocol-works-1200.webp", + "srcset": "/blog/banners/optimized/how-pilot-protocol-works-720.webp 720w, /blog/banners/optimized/how-pilot-protocol-works-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/http-services-over-encrypted-overlay.webp": { + "src": "/blog/banners/optimized/http-services-over-encrypted-overlay-1200.webp", + "srcset": "/blog/banners/optimized/http-services-over-encrypted-overlay-720.webp 720w, /blog/banners/optimized/http-services-over-encrypted-overlay-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/legacy-protocol-integration-for-secure-distributed-ai.jpg": { + "src": "/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-1200.webp", + "srcset": "/blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-720.webp 720w, /blog/banners/optimized/legacy-protocol-integration-for-secure-distributed-ai-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/lightweight-swarm-communication-drones-robots.webp": { + "src": "/blog/banners/optimized/lightweight-swarm-communication-drones-robots-1200.webp", + "srcset": "/blog/banners/optimized/lightweight-swarm-communication-drones-robots-720.webp 720w, /blog/banners/optimized/lightweight-swarm-communication-drones-robots-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/mcp-plus-pilot-tools-and-network.webp": { + "src": "/blog/banners/optimized/mcp-plus-pilot-tools-and-network-1200.webp", + "srcset": "/blog/banners/optimized/mcp-plus-pilot-tools-and-network-720.webp 720w, /blog/banners/optimized/mcp-plus-pilot-tools-and-network-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/move-beyond-rest-persistent-connections-for-agents.webp": { + "src": "/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-1200.webp", + "srcset": "/blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-720.webp 720w, /blog/banners/optimized/move-beyond-rest-persistent-connections-for-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/multi-agent-pipelines-openclaw-encrypted-tunnels.webp": { + "src": "/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-1200.webp", + "srcset": "/blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-720.webp 720w, /blog/banners/optimized/multi-agent-pipelines-openclaw-encrypted-tunnels-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/multi-agent-system-networking-guide-ai-developers.jpg": { + "src": "/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-1200.webp", + "srcset": "/blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-720.webp 720w, /blog/banners/optimized/multi-agent-system-networking-guide-ai-developers-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/multi-cloud-networking-decentralized-ai-systems.jpg": { + "src": "/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-720.webp 720w, /blog/banners/optimized/multi-cloud-networking-decentralized-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/nat-traversal-ai-agents-deep-dive.webp": { + "src": "/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-1200.webp", + "srcset": "/blog/banners/optimized/nat-traversal-ai-agents-deep-dive-720.webp 720w, /blog/banners/optimized/nat-traversal-ai-agents-deep-dive-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/network-security-for-multi-agent-systems-key-strategies.jpg": { + "src": "/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-1200.webp", + "srcset": "/blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-720.webp 720w, /blog/banners/optimized/network-security-for-multi-agent-systems-key-strategies-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/network-tunnels-ai-secure-communication-autonomous-agents.jpg": { + "src": "/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-1200.webp", + "srcset": "/blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-720.webp 720w, /blog/banners/optimized/network-tunnels-ai-secure-communication-autonomous-agents-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/openanp-ai-alternatives-6.jpg": { + "src": "/blog/banners/optimized/openanp-ai-alternatives-6-1200.webp", + "srcset": "/blog/banners/optimized/openanp-ai-alternatives-6-720.webp 720w, /blog/banners/optimized/openanp-ai-alternatives-6-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/openclaw-agents-behind-nat-zero-config.webp": { + "src": "/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-1200.webp", + "srcset": "/blog/banners/optimized/openclaw-agents-behind-nat-zero-config-720.webp 720w, /blog/banners/optimized/openclaw-agents-behind-nat-zero-config-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/openclaw-meets-pilot-agent-networking-one-command.webp": { + "src": "/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-1200.webp", + "srcset": "/blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-720.webp 720w, /blog/banners/optimized/openclaw-meets-pilot-agent-networking-one-command-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/openclaw-task-delegation-polo-reputation.webp": { + "src": "/blog/banners/optimized/openclaw-task-delegation-polo-reputation-1200.webp", + "srcset": "/blog/banners/optimized/openclaw-task-delegation-polo-reputation-720.webp 720w, /blog/banners/optimized/openclaw-task-delegation-polo-reputation-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/overlay-networking-automation-secure-ai-agent-solutions.jpg": { + "src": "/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-1200.webp", + "srcset": "/blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-720.webp 720w, /blog/banners/optimized/overlay-networking-automation-secure-ai-agent-solutions-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/overlay-networking-secure-ai-agent-communication-explained.jpg": { + "src": "/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-1200.webp", + "srcset": "/blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-720.webp 720w, /blog/banners/optimized/overlay-networking-secure-ai-agent-communication-explained-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/peer-to-peer-agent-communication-no-server.webp": { + "src": "/blog/banners/optimized/peer-to-peer-agent-communication-no-server-1200.webp", + "srcset": "/blog/banners/optimized/peer-to-peer-agent-communication-no-server-720.webp 720w, /blog/banners/optimized/peer-to-peer-agent-communication-no-server-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/peer-to-peer-file-transfer-agents.webp": { + "src": "/blog/banners/optimized/peer-to-peer-file-transfer-agents-1200.webp", + "srcset": "/blog/banners/optimized/peer-to-peer-file-transfer-agents-720.webp 720w, /blog/banners/optimized/peer-to-peer-file-transfer-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/peer-to-peer-networking-examples-ai-engineers.jpg": { + "src": "/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-1200.webp", + "srcset": "/blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-720.webp 720w, /blog/banners/optimized/peer-to-peer-networking-examples-ai-engineers-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/persistent-address-strategies-for-distributed-ai-systems.jpg": { + "src": "/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-720.webp 720w, /blog/banners/optimized/persistent-address-strategies-for-distributed-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/persistent-addresses-distributed-autonomous-systems.jpg": { + "src": "/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-1200.webp", + "srcset": "/blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-720.webp 720w, /blog/banners/optimized/persistent-addresses-distributed-autonomous-systems-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "/blog/banners/persistent-network-addressing-secure-ai-systems.jpg": { + "src": "/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/persistent-network-addressing-secure-ai-systems-720.webp 720w, /blog/banners/optimized/persistent-network-addressing-secure-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/pilot-console-manage-agent-networks.webp": { + "src": "/blog/banners/optimized/pilot-console-manage-agent-networks-1200.webp", + "srcset": "/blog/banners/optimized/pilot-console-manage-agent-networks-720.webp 720w, /blog/banners/optimized/pilot-console-manage-agent-networks-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/pilot-vs-tcp-grpc-nats-comparison.webp": { + "src": "/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-1200.webp", + "srcset": "/blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-720.webp 720w, /blog/banners/optimized/pilot-vs-tcp-grpc-nats-comparison-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/polo-score-reputation-without-blockchain.webp": { + "src": "/blog/banners/optimized/polo-score-reputation-without-blockchain-1200.webp", + "srcset": "/blog/banners/optimized/polo-score-reputation-without-blockchain-720.webp 720w, /blog/banners/optimized/polo-score-reputation-without-blockchain-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/preferential-attachment-ai-networks-trust-graph.webp": { + "src": "/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-1200.webp", + "srcset": "/blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-720.webp 720w, /blog/banners/optimized/preferential-attachment-ai-networks-trust-graph-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/private-agent-network-company.webp": { + "src": "/blog/banners/optimized/private-agent-network-company-1200.webp", + "srcset": "/blog/banners/optimized/private-agent-network-company-720.webp 720w, /blog/banners/optimized/private-agent-network-company-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/private-networks-now-in-testing.webp": { + "src": "/blog/banners/optimized/private-networks-now-in-testing-1200.webp", + "srcset": "/blog/banners/optimized/private-networks-now-in-testing-720.webp 720w, /blog/banners/optimized/private-networks-now-in-testing-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/protocol-wrapping-secure-peer-to-peer-ai-systems.jpg": { + "src": "/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-720.webp 720w, /blog/banners/optimized/protocol-wrapping-secure-peer-to-peer-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/python-sdk-pilot-protocol.webp": { + "src": "/blog/banners/optimized/python-sdk-pilot-protocol-1200.webp", + "srcset": "/blog/banners/optimized/python-sdk-pilot-protocol-720.webp 720w, /blog/banners/optimized/python-sdk-pilot-protocol-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/replace-message-broker-twelve-lines-go.webp": { + "src": "/blog/banners/optimized/replace-message-broker-twelve-lines-go-1200.webp", + "srcset": "/blog/banners/optimized/replace-message-broker-twelve-lines-go-720.webp 720w, /blog/banners/optimized/replace-message-broker-twelve-lines-go-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/replace-webhooks-with-persistent-agent-tunnels.webp": { + "src": "/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-1200.webp", + "srcset": "/blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-720.webp 720w, /blog/banners/optimized/replace-webhooks-with-persistent-agent-tunnels-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/run-agent-network-without-cloud-dependency.webp": { + "src": "/blog/banners/optimized/run-agent-network-without-cloud-dependency-1200.webp", + "srcset": "/blog/banners/optimized/run-agent-network-without-cloud-dependency-720.webp 720w, /blog/banners/optimized/run-agent-network-without-cloud-dependency-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/scaling-openclaw-fleets-thousands-agents.webp": { + "src": "/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-1200.webp", + "srcset": "/blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-720.webp 720w, /blog/banners/optimized/scaling-openclaw-fleets-thousands-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/scriptorium-replace-agentic-active-research-ready-intelligence.png": { + "src": "/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-1200.webp", + "srcset": "/blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-720.webp 720w, /blog/banners/optimized/scriptorium-replace-agentic-active-research-ready-intelligence-1200.webp 1200w", + "width": 1200, + "height": 655 + }, + "/blog/banners/secure-ai-agent-communication-zero-trust.webp": { + "src": "/blog/banners/optimized/secure-ai-agent-communication-zero-trust-1200.webp", + "srcset": "/blog/banners/optimized/secure-ai-agent-communication-zero-trust-720.webp 720w, /blog/banners/optimized/secure-ai-agent-communication-zero-trust-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/secure-ai-agent-networking-workflow-step-by-step.jpg": { + "src": "/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-1200.webp", + "srcset": "/blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-720.webp 720w, /blog/banners/optimized/secure-ai-agent-networking-workflow-step-by-step-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/secure-communication-protocols-distributed-ai-systems.jpg": { + "src": "/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-720.webp 720w, /blog/banners/optimized/secure-communication-protocols-distributed-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/secure-data-exchange-for-multi-cloud-ai-systems.jpg": { + "src": "/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-720.webp 720w, /blog/banners/optimized/secure-data-exchange-for-multi-cloud-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/secure-network-infrastructure-ai-agents-practical-guide.jpg": { + "src": "/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-1200.webp", + "srcset": "/blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-720.webp 720w, /blog/banners/optimized/secure-network-infrastructure-ai-agents-practical-guide-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/secure-research-collaboration-share-models-not-data.webp": { + "src": "/blog/banners/optimized/secure-research-collaboration-share-models-not-data-1200.webp", + "srcset": "/blog/banners/optimized/secure-research-collaboration-share-models-not-data-720.webp 720w, /blog/banners/optimized/secure-research-collaboration-share-models-not-data-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/securing-ai-agent-networks-multi-cloud-environments.jpg": { + "src": "/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-1200.webp", + "srcset": "/blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-720.webp 720w, /blog/banners/optimized/securing-ai-agent-networks-multi-cloud-environments-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/smart-home-without-cloud-local-device-communication.webp": { + "src": "/blog/banners/optimized/smart-home-without-cloud-local-device-communication-1200.webp", + "srcset": "/blog/banners/optimized/smart-home-without-cloud-local-device-communication-720.webp 720w, /blog/banners/optimized/smart-home-without-cloud-local-device-communication-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/sociology-of-machines-626-agents.webp": { + "src": "/blog/banners/optimized/sociology-of-machines-626-agents-1200.webp", + "srcset": "/blog/banners/optimized/sociology-of-machines-626-agents-720.webp 720w, /blog/banners/optimized/sociology-of-machines-626-agents-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/trust-model-agents-invisible-by-default.webp": { + "src": "/blog/banners/optimized/trust-model-agents-invisible-by-default-1200.webp", + "srcset": "/blog/banners/optimized/trust-model-agents-invisible-by-default-720.webp 720w, /blog/banners/optimized/trust-model-agents-invisible-by-default-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/trust-network-protocols-secure-decentralized-systems.jpg": { + "src": "/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-1200.webp", + "srcset": "/blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-720.webp 720w, /blog/banners/optimized/trust-network-protocols-secure-decentralized-systems-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "/blog/banners/trustless-protocols-that-secure-decentralized-ai-systems.jpg": { + "src": "/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-1200.webp", + "srcset": "/blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-720.webp 720w, /blog/banners/optimized/trustless-protocols-that-secure-decentralized-ai-systems-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/virtual-network-addresses-for-secure-decentralized-ai.jpg": { + "src": "/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-1200.webp", + "srcset": "/blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-720.webp 720w, /blog/banners/optimized/virtual-network-addresses-for-secure-decentralized-ai-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/what-is-protocol-overlay-fundamentals-practical.jpg": { + "src": "/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-1200.webp", + "srcset": "/blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-720.webp 720w, /blog/banners/optimized/what-is-protocol-overlay-fundamentals-practical-1200.webp 1200w", + "width": 1200, + "height": 686 + }, + "/blog/banners/why-ai-agents-need-network-stack.webp": { + "src": "/blog/banners/optimized/why-ai-agents-need-network-stack-1200.webp", + "srcset": "/blog/banners/optimized/why-ai-agents-need-network-stack-720.webp 720w, /blog/banners/optimized/why-ai-agents-need-network-stack-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/why-autonomous-agents-need-private-discovery.webp": { + "src": "/blog/banners/optimized/why-autonomous-agents-need-private-discovery-1200.webp", + "srcset": "/blog/banners/optimized/why-autonomous-agents-need-private-discovery-720.webp 720w, /blog/banners/optimized/why-autonomous-agents-need-private-discovery-1200.webp 1200w", + "width": 1200, + "height": 630 + }, + "/blog/banners/why-direct-p2p-connections-power-secure-ai-networking.jpg": { + "src": "/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-1200.webp", + "srcset": "/blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-720.webp 720w, /blog/banners/optimized/why-direct-p2p-connections-power-secure-ai-networking-1200.webp 1200w", + "width": 1200, + "height": 669 + }, + "/blog/banners/why-secure-direct-p2p-connections-matter-for-ai-agents.jpg": { + "src": "/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-1200.webp", + "srcset": "/blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-720.webp 720w, /blog/banners/optimized/why-secure-direct-p2p-connections-matter-for-ai-agents-1200.webp 1200w", + "width": 1200, + "height": 670 + }, + "/blog/banners/zero-dependency-encryption-x25519-aes-gcm.webp": { + "src": "/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-1200.webp", + "srcset": "/blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-720.webp 720w, /blog/banners/optimized/zero-dependency-encryption-x25519-aes-gcm-1200.webp 1200w", + "width": 1200, + "height": 630 + } +} diff --git a/src/data/blogPosts.json b/src/data/blogPosts.json index 37b0a196..d9e1e213 100644 --- a/src/data/blogPosts.json +++ b/src/data/blogPosts.json @@ -241,18 +241,6 @@ "banner": "banners/trustless-protocols-that-secure-decentralized-ai-systems.jpg", "iso_date": "2026-05-02" }, - { - "slug": "why-secure-direct-p2p-connections-matter-for-ai-agents", - "title": "Why secure direct P2P connections matter for AI agents", - "description": "Discover why secure direct connections are vital for AI agents. Learn how to enhance speed, privacy, and resilience in your distributed systems.", - "date": "May 1", - "category": "Blog", - "tags": [ - "blog" - ], - "banner": "banners/why-secure-direct-p2p-connections-matter-for-ai-agents.jpg", - "iso_date": "2026-05-01" - }, { "slug": "persistent-address-strategies-for-distributed-ai-systems", "title": "Persistent address strategies for distributed AI systems", @@ -364,18 +352,6 @@ "banner": "banners/why-ai-agents-need-network-stack.webp", "iso_date": "2026-04-19" }, - { - "slug": "boarding-pilotagent-org-alternatives-3", - "title": "Top 3 boarding.pilotagent.org alternatives 2026", - "description": "Explore 3 boarding.pilotagent.org alternatives for enhanced decentralized networking solutions in 2026.", - "date": "Apr 19", - "category": "Blog", - "tags": [ - "blog" - ], - "banner": "banners/boarding-pilotagent-org-alternatives-3.jpg", - "iso_date": "2026-04-19" - }, { "slug": "cloud-networking-secure-peer-to-peer-distributed-ai", "title": "Cloud networking: Secure peer-to-peer for distributed AI", diff --git a/src/data/learnGuides.ts b/src/data/learnGuides.ts new file mode 100644 index 00000000..f4477c9e --- /dev/null +++ b/src/data/learnGuides.ts @@ -0,0 +1,66 @@ +export interface LearnGuide { + slug: string; + title: string; + description: string; + date: string; + track: 'Foundations' | 'Transport' | 'Security'; +} + +export const learnGuides: LearnGuide[] = [ + { + slug: 'what-is-pilot-protocol', + title: 'What Is Pilot Protocol?', + description: 'A system-level introduction to persistent agent addresses, encrypted peer tunnels, discovery, trust, and installable capabilities.', + date: 'July 30, 2026', + track: 'Foundations', + }, + { + slug: 'what-makes-a-pilot-agent', + title: 'What Makes a Pilot Agent?', + description: 'The identity, daemon, address, trust relationship, and application boundary that turn an existing agent into a network participant.', + date: 'July 22, 2026', + track: 'Foundations', + }, + { + slug: 'ai-in-networking-for-multicloud', + title: 'AI Networking Across Multiple Clouds', + description: 'How agent connectivity changes when workloads span cloud accounts, edge devices, laptops, and organizational boundaries.', + date: 'July 24, 2026', + track: 'Foundations', + }, + { + slug: 'grpc-udp-transport', + title: 'gRPC and UDP Transport Options', + description: 'A precise look at gRPC transport assumptions, UDP overlays, and where each layer belongs in an agent communication stack.', + date: 'July 23, 2026', + track: 'Transport', + }, + { + slug: 'nats-vs-grpc-agent-messaging', + title: 'NATS vs. gRPC for Agent Messaging', + description: 'Compare connectivity models, messaging patterns, deployment requirements, and the role of an overlay beneath either option.', + date: 'July 23, 2026', + track: 'Transport', + }, + { + slug: 'mcp-tunnels-vs-vpn', + title: 'MCP Tunnels vs. VPNs for Agents', + description: 'Separate tool access, network reachability, identity, and authorization so similarly named approaches are evaluated on the right boundary.', + date: 'July 25, 2026', + track: 'Transport', + }, + { + slug: 'how-are-network-agent-tokens-different', + title: 'How Network Agent Tokens Differ', + description: 'Compare an agent cryptographic identity with API keys, bearer tokens, and application-level credentials without collapsing the layers.', + date: 'July 22, 2026', + track: 'Security', + }, + { + slug: 'x25519-encryption', + title: 'How X25519 Secures Agent Communication', + description: 'Understand key agreement, tunnel secrets, authenticated encryption, and the limits of what transport cryptography can authorize.', + date: 'July 24, 2026', + track: 'Security', + }, +]; diff --git a/src/data/solutionStories.ts b/src/data/solutionStories.ts new file mode 100644 index 00000000..27f77c07 --- /dev/null +++ b/src/data/solutionStories.ts @@ -0,0 +1,702 @@ +export type InfographicKind = + | 'topology' + | 'bridge' + | 'constellation' + | 'guardrails' + | 'retrieval' + | 'router' + | 'sandbox' + | 'channels' + | 'pipeline' + | 'transaction' + | 'distribution' + | 'research'; + +export interface InfographicStage { + label: string; + title: string; + body: string; + items: string[]; +} + +export interface ArtifactRow { + key: string; + value: string; + tone?: 'accent' | 'good' | 'muted'; +} + +export interface SolutionStory { + slug: string; + heroLead: string; + heroEmphasis: string; + lede: string; + capabilityHeading: { lead: string; emphasis: string }; + workflowHeading: { lead: string; emphasis: string; body: string }; + closeHeading: { lead: string; emphasis: string }; + infographic: { + kind: InfographicKind; + eyebrow: string; + title: string; + summary: string; + stages: InfographicStage[]; + artifact: { + label: string; + title: string; + status: string; + summary: string; + rows: ArtifactRow[]; + footer: string; + }; + }; +} + +export type SolutionSection = 'problem' | 'infographic' | 'capabilities' | 'workflow' | 'proof' | 'related' | 'funnel'; + +export interface SolutionFunnel { + eyebrow: string; + title: string; + emphasis: string; + body: string; + choiceLabel: string; + choices: string[]; + contextLabel: string; + contextPlaceholder: string; + submitLabel: string; + deliverables: string[]; + success: string; +} + +export const solutionStories: Record = { + 'private-agent-network': { + slug: 'private-agent-network', + heroLead: 'Agents should know how to reach each other.', + heroEmphasis: 'Not where they happen to run.', + lede: 'Give every agent a durable identity, an approved peer set, and an encrypted route that survives changing IPs, clouds, and network boundaries.', + capabilityHeading: { lead: 'The network details disappear.', emphasis: 'The trust decision does not.' }, + workflowHeading: { + lead: 'From unknown endpoint', + emphasis: 'to verified peer.', + body: 'The application asks for an agent by name. Pilot resolves the identity, verifies the relationship, selects the best available path, and returns an observable connection state.', + }, + closeHeading: { lead: 'Give your agents', emphasis: 'a network they can understand.' }, + infographic: { + kind: 'topology', + eyebrow: 'Connection anatomy', + title: 'A connection is more than an open socket.', + summary: 'It is a named counterparty, an explicit trust relationship, an encrypted route, and a transport the application can use without knowing the underlying topology.', + stages: [ + { label: 'Resolve', title: 'Find agent-research', body: 'A stable hostname resolves to a persistent Pilot identity—not a temporary IP address.', items: ['hostname', '48-bit address', 'Ed25519 key'] }, + { label: 'Authorize', title: 'Confirm mutual trust', body: 'Both peers have approved the relationship before the transport becomes reachable.', items: ['handshake', 'peer key', 'trust state'] }, + { label: 'Route', title: 'Select the live path', body: 'Pilot attempts a direct NAT-traversed path and retains encrypted relay fallback.', items: ['direct', 'NAT traversal', 'relay fallback'] }, + { label: 'Exchange', title: 'Use the right transport', body: 'The application sends a stream, message, file, datagram, or publication.', items: ['stream', 'file', 'pub/sub'] }, + ], + artifact: { + label: 'connection.receipt', + title: 'agent-research ↔ agent-ops', + status: 'Connected', + summary: 'A machine-readable view of who is connected, how they were authenticated, and which path carries the payload.', + rows: [ + { key: 'identity', value: 'ed25519:7c2e…91af', tone: 'accent' }, + { key: 'trust', value: 'mutual · approved', tone: 'good' }, + { key: 'route', value: 'direct · encrypted', tone: 'good' }, + { key: 'transport', value: 'reliable stream :443' }, + ], + footer: 'Payload encryption: X25519 + AES-256-GCM', + }, + }, + }, + 'agent-integration': { + slug: 'agent-integration', + heroLead: 'Your systems do not need an AI rewrite.', + heroEmphasis: 'They need an agent edge.', + lede: 'Put a narrow Pilot adapter beside the software you already trust. Agents gain identity and reachability while the database, service, webhook, or legacy protocol keeps its existing contract.', + capabilityHeading: { lead: 'Preserve the system.', emphasis: 'Modernize the boundary.' }, + workflowHeading: { + lead: 'One integration seam.', + emphasis: 'Several ways in.', + body: 'Choose an SDK when you own the code, a loopback bridge when you do not, or a webhook when the existing workflow already speaks HTTP. Pilot adds the same peer identity around each option.', + }, + closeHeading: { lead: 'Connect the first system', emphasis: 'without replacing it.' }, + infographic: { + kind: 'bridge', + eyebrow: 'Integration architecture', + title: 'Wrap the interface. Keep the system.', + summary: 'Pilot sits at the narrowest useful seam between an existing application and the agent network, so integration work is reusable instead of repeated per agent.', + stages: [ + { label: 'System', title: 'Existing application', body: 'A database, service, device, or internal tool continues to use its current protocol.', items: ['TCP/UDP', 'HTTP event', 'application SDK'] }, + { label: 'Adapter', title: 'Local Pilot edge', body: 'The gateway, SDK, local socket, or webhook converts reachability into a trusted agent action.', items: ['gateway', 'Unix socket', 'webhook'] }, + { label: 'Network', title: 'Authenticated route', body: 'The request crosses Pilot with a persistent counterparty and encrypted payload path.', items: ['identity', 'trust', 'encryption'] }, + { label: 'Agent', title: 'Remote workflow', body: 'The receiving agent sees a typed event or the original application protocol—not a new infrastructure project.', items: ['event', 'stream', 'response'] }, + ], + artifact: { + label: 'integration.delivery', + title: 'warehouse.inventory.changed', + status: 'Delivered', + summary: 'An existing system event reaches a trusted agent with its source and delivery path intact.', + rows: [ + { key: 'source', value: 'legacy-tcp :5438' }, + { key: 'adapter', value: 'pilot gateway', tone: 'accent' }, + { key: 'recipient', value: 'agent-replenishment' }, + { key: 'delivery', value: 'acknowledged · 42 ms', tone: 'good' }, + ], + footer: 'No change to the warehouse application protocol', + }, + }, + }, + 'agent-capability-store': { + slug: 'agent-capability-store', + heroLead: 'Stop wiring tools one agent at a time.', + heroEmphasis: 'Give capabilities an address.', + lede: 'Let an agent discover the apps and specialists that fit the job, inspect their contract and authority, then compose them into a plan it can explain before execution.', + capabilityHeading: { lead: 'Discovery becomes part of', emphasis: 'the agent’s reasoning loop.' }, + workflowHeading: { + lead: 'Ask for the outcome.', + emphasis: 'Inspect the plan.', + body: 'The useful artifact is not a list of tools. It is a capability plan that names which services will be used, what each contributes, and where authority is required.', + }, + closeHeading: { lead: 'Give the next agent', emphasis: 'a capability map.' }, + infographic: { + kind: 'constellation', + eyebrow: 'Capability planning', + title: 'A request becomes an inspectable toolchain.', + summary: 'Pilot separates discovery, contract inspection, and execution so the agent can select complementary capabilities without hiding the plan from its operator.', + stages: [ + { label: 'Intent', title: '“Research Acme and brief me”', body: 'The task describes the desired artifact instead of prescribing a brittle sequence of tools.', items: ['company brief', 'current sources', 'delivery'] }, + { label: 'Discover', title: 'Find matching capabilities', body: 'The catalogue and service directory return apps and specialists with machine-readable help.', items: ['Sixtyfour', 'Cosift', 'Primitive'] }, + { label: 'Inspect', title: 'Check contracts and grants', body: 'The agent reads typed methods, protection state, required authority, and current service scope.', items: ['methods', 'integrity', 'grants'] }, + { label: 'Compose', title: 'Build the execution plan', body: 'Each capability receives one bounded part of the larger outcome.', items: ['enrich', 'research', 'send'] }, + ], + artifact: { + label: 'capability.plan', + title: 'Acme account brief', + status: 'Ready for approval', + summary: 'The selected capabilities and their roles are visible before any external action occurs.', + rows: [ + { key: '01 · enrich', value: 'io.pilot.sixtyfour', tone: 'accent' }, + { key: '02 · research', value: 'io.pilot.cosift' }, + { key: '03 · deliver', value: 'io.pilot.primitive' }, + { key: 'authority', value: 'email.send · approval required', tone: 'muted' }, + ], + footer: '3 capabilities · 1 explainable plan', + }, + }, + }, + 'secure-agent-runtime': { + slug: 'secure-agent-runtime', + heroLead: 'A tool call is a security decision.', + heroEmphasis: 'Make it inspectable.', + lede: 'Verify what is running, scan what is entering, constrain what the app may touch, and retain evidence of the decision—before an agent tool becomes an invisible authority channel.', + capabilityHeading: { lead: 'Security at every boundary', emphasis: 'the tool crosses.' }, + workflowHeading: { + lead: 'Four gates before', + emphasis: 'one consequential action.', + body: 'The runtime evaluates content, package integrity, declared grants, and the supervised action separately. A clean prompt does not excuse an untrusted binary, and a signed binary does not receive unlimited authority.', + }, + closeHeading: { lead: 'Turn tool access into', emphasis: 'an explicit control surface.' }, + infographic: { + kind: 'guardrails', + eyebrow: 'Execution control path', + title: 'Every tool call passes through visible gates.', + summary: 'Pilot combines package integrity, grant scoping, supervised execution, local content screening, and audit into one decision path without pretending any single control is sufficient.', + stages: [ + { label: 'Content', title: 'Screen the input', body: 'AEGIS checks commands, files, tool results, memory, and skills for injection and impersonation patterns.', items: ['prompt injection', 'obfuscation', 'impersonation'] }, + { label: 'Package', title: 'Verify what will run', body: 'The catalogue signature and pinned binary hash are checked before launch.', items: ['publisher signature', 'SHA-256', 'manifest'] }, + { label: 'Authority', title: 'Apply local grants', body: 'Filesystem, network, signing, process, and audit permissions stay explicit and app-specific.', items: ['files', 'domains', 'proc.exec'] }, + { label: 'Runtime', title: 'Supervise and record', body: 'Pilot launches the process, brokers the call, and retains the policy-relevant execution trail.', items: ['guarded mode', 'IPC', 'audit'] }, + ], + artifact: { + label: 'execution.decision', + title: 'wallet.pay', + status: 'Allowed with limits', + summary: 'The decision explains which artifact ran, which grants were exercised, and which boundary constrained the action.', + rows: [ + { key: 'integrity', value: 'signature + hash verified', tone: 'good' }, + { key: 'content scan', value: 'no high-risk pattern', tone: 'good' }, + { key: 'grant', value: 'wallet.sign · scoped', tone: 'accent' }, + { key: 'limit', value: '≤ 50 USDC / transaction' }, + ], + footer: 'Decision and app call retained in local audit', + }, + }, + }, + 'grounded-agent-search': { + slug: 'grounded-agent-search', + heroLead: 'Answers are cheap.', + heroEmphasis: 'Evidence is the product.', + lede: 'Build a private research surface that shows where an answer came from, how the evidence was retrieved, and whether the final response stays grounded in the sources you control.', + capabilityHeading: { lead: 'Own the corpus.', emphasis: 'Measure the answer.' }, + workflowHeading: { + lead: 'From raw sources', + emphasis: 'to a cited conclusion.', + body: 'Cosift keeps collection, retrieval, generation, and evaluation as separate observable stages. Teams can improve the stage that failed instead of treating search quality as model intuition.', + }, + closeHeading: { lead: 'Make the next answer', emphasis: 'auditable by default.' }, + infographic: { + kind: 'retrieval', + eyebrow: 'Grounded research pipeline', + title: 'The answer keeps its chain of evidence.', + summary: 'Every step—from crawling to ranking to answer evaluation—produces inspectable material that can be tested, tuned, or replaced without discarding the whole system.', + stages: [ + { label: 'Collect', title: 'Crawl approved sources', body: 'Websites and documents enter a self-hosted index under an explicit source boundary.', items: ['URLs', 'documents', 'source metadata'] }, + { label: 'Retrieve', title: 'Find candidate evidence', body: 'BM25, optional dense retrieval, expansion, HyDE, and MMR create the evidence set.', items: ['BM25', 'embeddings', 'MMR'] }, + { label: 'Rank', title: 'Put the best context first', body: 'Hybrid scoring and optional reranking improve the evidence presented to the model.', items: ['hybrid', 'rerank', 'top-k'] }, + { label: 'Answer', title: 'Generate and evaluate', body: 'The response carries citations and can be checked for retrieval and answer quality.', items: ['citations', 'grounding', 'evals'] }, + ], + artifact: { + label: 'research.answer', + title: 'Why did churn rise in Q2?', + status: 'Grounded', + summary: 'Support wait time increased after the April routing change; cancellation language rose most sharply in enterprise accounts.', + rows: [ + { key: '[1]', value: 'Support review · Apr–Jun', tone: 'accent' }, + { key: '[2]', value: 'Routing change log · 04/18' }, + { key: '[3]', value: 'Enterprise churn notes · Q2' }, + { key: 'evaluation', value: '3/3 claims supported', tone: 'good' }, + ], + footer: 'Retrieved passages remain attached to the answer', + }, + }, + }, + 'web-access-for-agents': { + slug: 'web-access-for-agents', + heroLead: 'The web keeps moving.', + heroEmphasis: 'Your agent needs more than one way through it.', + lede: 'Read with clean extraction, navigate with reusable site knowledge, and open a real browser only when the task requires interaction. The agent chooses a surface that matches the job.', + capabilityHeading: { lead: 'Read, navigate, and act', emphasis: 'are different operations.' }, + workflowHeading: { + lead: 'Use the lightest reliable surface', + emphasis: 'for each step.', + body: 'A content question should not launch a browser. A known workflow should not rediscover the site. A genuine interaction can escalate to Chrome with the relevant context already assembled.', + }, + closeHeading: { lead: 'Turn a fragile browser loop', emphasis: 'into a routed web workflow.' }, + infographic: { + kind: 'router', + eyebrow: 'Web task router', + title: 'The task decides how the web is accessed.', + summary: 'Pilot’s web apps are complementary: Plainweb minimizes the reading surface, Bowmark captures task knowledge, and Otto supplies a real browser when state or interaction matters.', + stages: [ + { label: 'Classify', title: 'What must happen?', body: 'The workflow distinguishes content extraction, known navigation, and stateful browser interaction.', items: ['read', 'navigate', 'act'] }, + { label: 'Read', title: 'Extract clean content', body: 'Plainweb returns compact Markdown when the task only needs the page’s information.', items: ['URL', 'Markdown', 'metadata'] }, + { label: 'Navigate', title: 'Load task knowledge', body: 'Bowmark supplies a concise, feedback-improved route through a known site workflow.', items: ['steps', 'selectors', 'feedback'] }, + { label: 'Act', title: 'Escalate to real Chrome', body: 'Otto handles screenshots, visible state, authenticated tabs, and supported interactions.', items: ['Chrome', 'screenshot', 'typed action'] }, + ], + artifact: { + label: 'web.task.result', + title: 'Vendor status check', + status: 'Completed', + summary: 'All five vendor status pages were read; one active incident requires follow-up.', + rows: [ + { key: 'read', value: '4 pages · Plainweb' }, + { key: 'navigate', value: '1 known flow · Bowmark' }, + { key: 'interact', value: 'incident detail · Otto', tone: 'accent' }, + { key: 'evidence', value: '5 URLs + 1 screenshot', tone: 'good' }, + ], + footer: 'Browser interaction used only where page state required it', + }, + }, + }, + 'isolated-agent-compute': { + slug: 'isolated-agent-compute', + heroLead: 'Generated code should run somewhere disposable.', + heroEmphasis: 'Not on the laptop that hired it.', + lede: 'Give coding agents a real execution environment with a visible lifecycle: verify the tool, launch a microVM or container, attach only the data it needs, and return an artifact instead of host access.', + capabilityHeading: { lead: 'Useful execution.', emphasis: 'Disposable authority.' }, + workflowHeading: { + lead: 'The host stays outside', + emphasis: 'the workload boundary.', + body: 'The agent calls a signed app. The app creates the selected isolation substrate, runs the bounded workload, stores deliberate state, and returns logs or artifacts through a typed method.', + }, + closeHeading: { lead: 'Give the coding agent', emphasis: 'a safer place to work.' }, + infographic: { + kind: 'sandbox', + eyebrow: 'Execution boundary', + title: 'The host never becomes the sandbox.', + summary: 'Code, dependencies, data, and artifacts cross explicit interfaces. The agent receives execution capability without inheriting the workstation’s ambient credentials and filesystem.', + stages: [ + { label: 'Request', title: 'Describe the job', body: 'The agent submits code, inputs, limits, and the intended output through a typed app method.', items: ['code', 'inputs', 'timeout'] }, + { label: 'Verify', title: 'Check the execution app', body: 'Pilot validates the signed manifest, binary hash, and local grants before launch.', items: ['signature', 'SHA-256', 'grants'] }, + { label: 'Isolate', title: 'Create the workload boundary', body: 'Smol starts a microVM or Docker starts a container with only the requested resources.', items: ['microVM', 'container', 'resource cap'] }, + { label: 'Return', title: 'Export result, not authority', body: 'Logs, files, and selected data return through the app while the environment can be destroyed.', items: ['stdout', 'artifact', 'destroy'] }, + ], + artifact: { + label: 'compute.job.receipt', + title: 'Analyze customer_export.csv', + status: 'Succeeded', + summary: 'The analysis ran in a disposable microVM and returned a report plus a reproducible command log.', + rows: [ + { key: 'runtime', value: 'smolvm · hardware isolated', tone: 'accent' }, + { key: 'limits', value: '2 vCPU · 2 GB · 90 s' }, + { key: 'network', value: 'disabled', tone: 'good' }, + { key: 'artifact', value: 'churn_segments.parquet' }, + ], + footer: 'Environment destroyed after artifact export', + }, + }, + }, + 'agent-email-phone': { + slug: 'agent-email-phone', + heroLead: 'An agent without a channel cannot finish the job.', + heroEmphasis: 'Give it a real inbox and number.', + lede: 'Let an operational agent continue through the channels people already use—email, SMS, and voice—while preserving the conversation context required for follow-up and human handoff.', + capabilityHeading: { lead: 'One workflow.', emphasis: 'The channel the moment requires.' }, + workflowHeading: { + lead: 'Context travels with', + emphasis: 'the conversation.', + body: 'A customer question can begin in email, become a time-sensitive text, and escalate to a call. Primitive and AgentPhone expose those channel actions as complementary methods rather than isolated automation silos.', + }, + closeHeading: { lead: 'Give the workflow', emphasis: 'a reachable endpoint.' }, + infographic: { + kind: 'channels', + eyebrow: 'Conversation architecture', + title: 'The message changes channel. The case keeps its context.', + summary: 'Knowledge, account context, the generated response, and channel history stay part of one workflow even when the next best action moves from email to SMS or voice.', + stages: [ + { label: 'Context', title: 'Assemble the case', body: 'The agent combines the inbound message with relevant knowledge and system context.', items: ['inbox', 'knowledge', 'customer record'] }, + { label: 'Draft', title: 'Generate the next response', body: 'The workflow prepares a channel-appropriate reply and the evidence behind it.', items: ['answer', 'summary', 'approval'] }, + { label: 'Deliver', title: 'Choose email, SMS, or voice', body: 'Primitive or AgentPhone executes the approved action through a provisioned endpoint.', items: ['email', 'SMS', 'call'] }, + { label: 'Continue', title: 'Retain the thread', body: 'Conversation methods preserve replies, status, and the material needed for follow-up or handoff.', items: ['thread', 'history', 'handoff'] }, + ], + artifact: { + label: 'conversation.handoff', + title: 'Case #1842 · delivery delay', + status: 'Customer updated', + summary: 'The agent replied by email, sent a time-sensitive SMS update, and prepared the unresolved question for a human owner.', + rows: [ + { key: 'email', value: 'reply delivered · 10:14', tone: 'good' }, + { key: 'SMS', value: 'ETA update · 10:16', tone: 'accent' }, + { key: 'voice', value: 'not required', tone: 'muted' }, + { key: 'handoff', value: 'billing exception · assigned' }, + ], + footer: 'Conversation history attached to the case', + }, + }, + }, + 'sales-agent-stack': { + slug: 'sales-agent-stack', + heroLead: 'A sales agent should return an account plan.', + heroEmphasis: 'Not a pile of tabs.', + lede: 'Turn a target account into a decision-ready brief: verified company and people data, current evidence, a reason to engage, and the next approved channel action.', + capabilityHeading: { lead: 'Research that ends with', emphasis: 'a useful next move.' }, + workflowHeading: { + lead: 'From target criteria', + emphasis: 'to an informed conversation.', + body: 'The stack combines structured enrichment, current research, internal context, and communication. Each capability contributes to one artifact the seller can review instead of another disconnected dashboard.', + }, + closeHeading: { lead: 'Make the next account brief', emphasis: 'decision-ready.' }, + infographic: { + kind: 'pipeline', + eyebrow: 'Account intelligence pipeline', + title: 'The deliverable is the brief, not the browsing session.', + summary: 'Pilot composes specialized capabilities into an account artifact that explains why the company fits, what changed recently, who matters, and what action is justified.', + stages: [ + { label: 'Target', title: 'Define the account thesis', body: 'The workflow begins with fit criteria and an explicit question—not a request for generic enrichment.', items: ['segment', 'trigger', 'problem'] }, + { label: 'Enrich', title: 'Resolve company and people', body: 'Sixtyfour and specialist APIs supply structured organization and contact context.', items: ['Sixtyfour', 'Orthogonal', 'contacts'] }, + { label: 'Research', title: 'Find current evidence', body: 'Cosift and the web stack ground the account thesis in recent, attributable material.', items: ['Cosift', 'Plainweb', 'sources'] }, + { label: 'Engage', title: 'Prepare the next action', body: 'Primitive or AgentPhone carries an approved message or call plan into the chosen channel.', items: ['email', 'phone', 'approval'] }, + ], + artifact: { + label: 'account.brief', + title: 'Acme Robotics · expansion signal', + status: 'Seller ready', + summary: 'Acme is adding a second European fulfillment site while hiring for agent infrastructure, creating a timely cross-cloud operations angle.', + rows: [ + { key: 'fit', value: '92 / 100', tone: 'good' }, + { key: 'trigger', value: 'new EU operations site', tone: 'accent' }, + { key: 'people', value: '3 relevant operators' }, + { key: 'next action', value: 'review tailored email draft' }, + ], + footer: '5 current sources · generated 8 minutes ago', + }, + }, + }, + 'agent-commerce': { + slug: 'agent-commerce', + heroLead: 'A shopping agent needs a mandate.', + heroEmphasis: 'Not a blank check.', + lede: 'Bind the counterparty, request, spending boundary, transfer, and verification into one inspectable exchange so an agent can transact without becoming an unrestricted wallet.', + capabilityHeading: { lead: 'Identity before payment.', emphasis: 'Evidence after settlement.' }, + workflowHeading: { + lead: 'From negotiated request', + emphasis: 'to verified exchange.', + body: 'The network identifies the counterparties. The guarded wallet applies its local limits. Payment verification produces the evidence required before the workflow releases data, inventory, or service access.', + }, + closeHeading: { lead: 'Give the transaction', emphasis: 'a boundary and a receipt.' }, + infographic: { + kind: 'transaction', + eyebrow: 'Bounded exchange', + title: 'A payment carries identity, intent, limits, and proof.', + summary: 'Pilot makes the machine-to-machine exchange inspectable from trusted counterparty discovery through settlement verification, without presenting the wallet as a finished enterprise approval system.', + stages: [ + { label: 'Trust', title: 'Resolve the counterparties', body: 'Buyer and seller agents communicate through persistent identities and an approved relationship.', items: ['buyer identity', 'seller identity', 'handshake'] }, + { label: 'Request', title: 'Specify the exchange', body: 'The seller issues an amount, destination, asset, and business reference the workflow can inspect.', items: ['amount', 'asset', 'reference'] }, + { label: 'Bound', title: 'Apply the wallet limit', body: 'The guarded Wallet app checks the requested action against its configured spending boundary.', items: ['grant', 'spend cap', 'network'] }, + { label: 'Verify', title: 'Confirm settlement', body: 'The buyer checks transfer state before the next business action is released.', items: ['transaction', 'confirmation', 'receipt'] }, + ], + artifact: { + label: 'settlement.receipt', + title: 'Dataset licence · August', + status: 'Verified', + summary: 'The buyer agent paid the trusted seller inside its local limit and confirmed settlement before granting dataset access.', + rows: [ + { key: 'counterparty', value: 'agent-data-market · trusted' }, + { key: 'amount', value: '24.00 USDC · Base', tone: 'accent' }, + { key: 'limit', value: '50.00 USDC / transaction', tone: 'good' }, + { key: 'confirmation', value: 'final · block 34,291,104' }, + ], + footer: 'Access released after payment verification', + }, + }, + }, + 'agent-ready-apis': { + slug: 'agent-ready-apis', + heroLead: 'Your API is documented for people.', + heroEmphasis: 'Package the job for agents.', + lede: 'Turn raw endpoints into narrow, typed capabilities an agent can discover, inspect, and invoke—without giving up the API, commercial model, or operations you already own.', + capabilityHeading: { lead: 'Expose the task.', emphasis: 'Keep the platform.' }, + workflowHeading: { + lead: 'From endpoint surface', + emphasis: 'to agent product.', + body: 'A good agent contract does not mirror every REST endpoint. It packages a useful job, declares the authority it needs, and gives discovery systems enough structure to match it to an intent.', + }, + closeHeading: { lead: 'Package one useful job', emphasis: 'for agent distribution.' }, + infographic: { + kind: 'distribution', + eyebrow: 'Agent product layer', + title: 'Keep the API. Publish a task-shaped interface.', + summary: 'The adapter compresses authentication, endpoint selection, parameters, and upstream errors into typed methods that describe the job an agent actually wants done.', + stages: [ + { label: 'Product', title: 'Existing API platform', body: 'The service, billing, reliability model, and upstream endpoints remain under the publisher’s control.', items: ['API', 'billing', 'operations'] }, + { label: 'Contract', title: 'Define task methods', body: 'The adapter exposes narrow actions with typed arguments, results, and declared dependencies.', items: ['method', 'schema', 'grants'] }, + { label: 'Publish', title: 'Sign or host the capability', body: 'Distribute a signed local app or operate a specialist service on the Pilot network.', items: ['catalogue', 'service agent', 'identity'] }, + { label: 'Discover', title: 'Match agents to the job', body: 'Agents inspect the capability through the catalogue or directory before they invoke it.', items: ['search', 'help', 'call'] }, + ], + artifact: { + label: 'agent.manifest', + title: 'company.enrich', + status: 'Published', + summary: 'A task-oriented method gives agents one stable contract while the publisher retains its existing API implementation.', + rows: [ + { key: 'input', value: 'domain: string · required' }, + { key: 'output', value: 'company_profile.v1' }, + { key: 'network grant', value: 'api.publisher.com', tone: 'accent' }, + { key: 'distribution', value: 'signed app catalogue', tone: 'good' }, + ], + footer: 'Upstream credentials remain brokered by the app', + }, + }, + }, + 'live-data-for-agents': { + slug: 'live-data-for-agents', + heroLead: 'Research agents need today’s data.', + heroEmphasis: 'Not yesterday’s weights.', + lede: 'Route a question to current specialist services, keep the source-specific limits visible, join the structured results locally, and return a brief that separates live evidence from model interpretation.', + capabilityHeading: { lead: 'Current observations.', emphasis: 'Structured for composition.' }, + workflowHeading: { + lead: 'From one research question', + emphasis: 'to several live sources.', + body: 'The service directory helps the agent find domain specialists. Local analytical tools join the returned records, while Cosift supplies document context and citations around the quantitative result.', + }, + closeHeading: { lead: 'Put live evidence', emphasis: 'inside the next research brief.' }, + infographic: { + kind: 'research', + eyebrow: 'Live research composition', + title: 'The model interprets. Specialists observe.', + summary: 'Pilot lets a research agent discover current data services, query them through common conventions, and combine the resulting records with local analysis and cited knowledge.', + stages: [ + { label: 'Question', title: 'Define the evidence needed', body: 'The task identifies which claims require current observations instead of model memory.', items: ['scope', 'time window', 'measures'] }, + { label: 'Discover', title: 'Find domain specialists', body: 'The directory surfaces services for public, scientific, geographic, financial, security, and reference data.', items: ['directory', 'help', 'availability'] }, + { label: 'Query', title: 'Collect structured records', body: 'The agent calls one or several specialists and retains source status and upstream limitations.', items: ['JSON', 'timestamp', 'source state'] }, + { label: 'Synthesize', title: 'Join, ground, and explain', body: 'DuckDB or another local store analyzes the records while Cosift grounds the surrounding narrative.', items: ['DuckDB', 'Cosift', 'citations'] }, + ], + artifact: { + label: 'research.brief', + title: 'Regional energy risk · 72 hours', + status: 'Current', + summary: 'Weather, grid, and market specialists indicate elevated peak-load risk in two regions; the brief distinguishes observed data from projected impact.', + rows: [ + { key: 'weather', value: 'updated 4 min ago', tone: 'good' }, + { key: 'grid load', value: 'updated 11 min ago', tone: 'good' }, + { key: 'market signal', value: 'updated 2 min ago', tone: 'accent' }, + { key: 'analysis', value: 'DuckDB join · 18,402 rows' }, + ], + footer: '3 live services · 6 cited documents', + }, + }, + }, +}; + +// Every page has its own information sequence. Shared sections preserve +// semantics and quality while the order follows the mental model of the buyer. +export const solutionSectionOrders: Record = { + 'private-agent-network': ['problem', 'infographic', 'capabilities', 'workflow', 'proof', 'related', 'funnel'], + 'agent-integration': ['infographic', 'problem', 'workflow', 'capabilities', 'funnel', 'proof', 'related'], + 'agent-capability-store': ['capabilities', 'infographic', 'funnel', 'problem', 'workflow', 'related', 'proof'], + 'secure-agent-runtime': ['infographic', 'funnel', 'problem', 'capabilities', 'proof', 'workflow', 'related'], + 'grounded-agent-search': ['infographic', 'problem', 'capabilities', 'funnel', 'workflow', 'proof', 'related'], + 'web-access-for-agents': ['problem', 'capabilities', 'infographic', 'funnel', 'workflow', 'related', 'proof'], + 'isolated-agent-compute': ['infographic', 'capabilities', 'problem', 'workflow', 'funnel', 'proof', 'related'], + 'agent-email-phone': ['funnel', 'problem', 'infographic', 'capabilities', 'workflow', 'proof', 'related'], + 'sales-agent-stack': ['infographic', 'funnel', 'problem', 'capabilities', 'workflow', 'related', 'proof'], + 'agent-commerce': ['infographic', 'funnel', 'capabilities', 'problem', 'workflow', 'proof', 'related'], + 'agent-ready-apis': ['problem', 'funnel', 'infographic', 'capabilities', 'workflow', 'proof', 'related'], + 'live-data-for-agents': ['infographic', 'capabilities', 'funnel', 'problem', 'workflow', 'proof', 'related'], +}; + +export const solutionFunnels: Record = { + 'private-agent-network': { + eyebrow: 'Network design review', + title: 'Get a topology for', + emphasis: 'your first agent network.', + body: 'Tell us where the agents run and which boundary is causing friction. We will map the smallest credible Pilot deployment and the path you should validate first.', + choiceLabel: 'Primary boundary', + choices: ['Across two clouds', 'Across organizations', 'Behind NAT or firewalls', 'Across edge devices', 'Inside one private fleet'], + contextLabel: 'Where do the agents run?', + contextPlaceholder: 'Example: 12 agents across AWS and on-prem, with no inbound ports available…', + submitLabel: 'Request network blueprint', + deliverables: ['Recommended topology', 'Trust and discovery boundary', 'First validation path'], + success: 'Your network-blueprint request is with the founding team.', + }, + 'agent-integration': { + eyebrow: 'Integration pathfinder', + title: 'Find the narrowest', + emphasis: 'integration seam.', + body: 'Share the first system an agent must reach. We will recommend whether to start with an SDK, local socket, compatibility gateway, webhook, or packaged app.', + choiceLabel: 'Existing interface', + choices: ['HTTP API or webhook', 'TCP or UDP application', 'Database', 'Application code we own', 'Device or edge service'], + contextLabel: 'What must the agent do?', + contextPlaceholder: 'Example: receive inventory changes and acknowledge the order in our existing warehouse service…', + submitLabel: 'Get integration path', + deliverables: ['Recommended integration mode', 'Minimal system change', 'Evaluation checklist'], + success: 'We received the system context and will return a scoped integration path.', + }, + 'agent-capability-store': { + eyebrow: 'Capability stack builder', + title: 'Turn one outcome into', + emphasis: 'an agent toolchain.', + body: 'Describe the artifact you want an agent to produce. We will map the complementary Pilot apps and services, including where approval or external credentials enter the flow.', + choiceLabel: 'Desired outcome', + choices: ['Research brief', 'Customer operation', 'Sales workflow', 'Data pipeline', 'Web automation', 'Custom agent capability'], + contextLabel: 'What should the agent deliver?', + contextPlaceholder: 'Example: enrich a target company, research recent changes, then prepare an email for review…', + submitLabel: 'Build my capability map', + deliverables: ['Capability sequence', 'App and service shortlist', 'Authority checkpoints'], + success: 'Your requested capability map has been routed to the team.', + }, + 'secure-agent-runtime': { + eyebrow: 'Tool-risk review', + title: 'Map the authority behind', + emphasis: 'one dangerous tool call.', + body: 'Give us a representative action. We will break down its content, package, grant, execution, and audit boundaries against Pilot’s current security surfaces.', + choiceLabel: 'Highest-risk authority', + choices: ['Execute code or commands', 'Use credentials or signing keys', 'Read or write files', 'Reach external APIs', 'Send money or messages'], + contextLabel: 'Describe the action and data involved', + contextPlaceholder: 'Do not include secrets or customer data. Describe the classes of access only…', + submitLabel: 'Request tool-risk map', + deliverables: ['Threat-boundary diagram', 'Required grants', 'Recommended control points'], + success: 'Your tool-risk review request was sent securely.', + }, + 'grounded-agent-search': { + eyebrow: 'Retrieval evaluation', + title: 'Design a grounded-search test', + emphasis: 'for your own corpus.', + body: 'Share the shape of the knowledge base and one question that matters. We will outline the crawl, retrieval, citation, and evaluation path worth testing.', + choiceLabel: 'Knowledge source', + choices: ['Internal documentation', 'Customer or support content', 'Research library', 'Public websites', 'Mixed structured and unstructured data'], + contextLabel: 'What question must the system answer well?', + contextPlaceholder: 'Example: Which product changes caused the increase in enterprise support escalations last quarter?', + submitLabel: 'Get evaluation plan', + deliverables: ['Source and crawl boundary', 'Retrieval baseline', 'Grounding evaluation plan'], + success: 'Your grounded-search evaluation request is with the team.', + }, + 'web-access-for-agents': { + eyebrow: 'Web workflow router', + title: 'Route one brittle workflow', + emphasis: 'through the right web surface.', + body: 'Give us the site and task. We will separate what should be extracted, what can follow known navigation, and what genuinely requires a live browser.', + choiceLabel: 'Primary web behavior', + choices: ['Read and extract content', 'Navigate a repeated workflow', 'Use an authenticated application', 'Complete a multi-site task', 'Capture visual evidence'], + contextLabel: 'URL and task description', + contextPlaceholder: 'Example: check five vendor status pages, open incident details, and return evidence…', + submitLabel: 'Route my web workflow', + deliverables: ['Plainweb/Bowmark/Otto split', 'Interaction boundary', 'Proposed result artifact'], + success: 'We received the workflow and will return a recommended web route.', + }, + 'isolated-agent-compute': { + eyebrow: 'Sandbox selector', + title: 'Choose the right boundary', + emphasis: 'for generated code.', + body: 'Describe the workload, its data, and any network requirement. We will recommend a microVM, container, or narrower data-app execution path.', + choiceLabel: 'Workload shape', + choices: ['Run generated code', 'Build or test a repository', 'Analyze a dataset', 'Host a long-running tool', 'Execute an untrusted dependency'], + contextLabel: 'What must enter and leave the sandbox?', + contextPlaceholder: 'Example: Python analysis over one CSV, no network, export a Parquet file and logs…', + submitLabel: 'Get sandbox recommendation', + deliverables: ['Isolation substrate', 'Resource and network limits', 'Artifact boundary'], + success: 'Your sandbox recommendation request is queued with the team.', + }, + 'agent-email-phone': { + eyebrow: 'Conversation flow builder', + title: 'Map the case across', + emphasis: 'email, SMS, and voice.', + body: 'Start with a real communication workflow. We will identify the channel transitions, context the agent needs, and the point where a human should take over.', + choiceLabel: 'Starting channel', + choices: ['Inbound email', 'Outbound email', 'SMS alert or follow-up', 'Inbound phone call', 'Outbound phone call', 'Mixed-channel case'], + contextLabel: 'What should happen from first contact to resolution?', + contextPlaceholder: 'Example: reply to a delivery question by email, send urgent ETA changes by SMS, escalate billing exceptions…', + submitLabel: 'Build conversation flow', + deliverables: ['Channel sequence', 'Context and handoff points', 'Suggested Pilot app methods'], + success: 'Your conversation-flow request was sent to the team.', + }, + 'sales-agent-stack': { + eyebrow: 'Sample account brief', + title: 'See the account artifact', + emphasis: 'your sellers would receive.', + body: 'Give us one company domain and the sales question you care about. We will use it to scope a representative account brief and the capability chain behind it.', + choiceLabel: 'Sales objective', + choices: ['Qualify account fit', 'Find a current trigger', 'Map relevant people', 'Prepare an outreach angle', 'Monitor an existing account'], + contextLabel: 'Company domain and question', + contextPlaceholder: 'Example: acme.com — are they expanding infrastructure in Europe, and who owns agent operations?', + submitLabel: 'Request sample brief', + deliverables: ['Account thesis', 'Current-source plan', 'Suggested next action'], + success: 'Your sample-account request is with the team.', + }, + 'agent-commerce': { + eyebrow: 'Payment mandate canvas', + title: 'Define what the agent may buy', + emphasis: 'before it holds a wallet.', + body: 'Describe the exchange and boundary. We will map counterparties, payment request, spend cap, settlement evidence, and the point where human approval belongs.', + choiceLabel: 'Transaction pattern', + choices: ['Buy data or API access', 'Pay for compute', 'Procure inventory', 'Settle a recurring service', 'Agent-to-agent marketplace'], + contextLabel: 'Amount, frequency, and release condition', + contextPlaceholder: 'Example: up to 50 USDC per dataset, maximum twice daily, release access only after verification…', + submitLabel: 'Design payment mandate', + deliverables: ['Counterparty and trust model', 'Spend boundary', 'Verification and release sequence'], + success: 'Your bounded-payment design request was sent to the team.', + }, + 'agent-ready-apis': { + eyebrow: 'Agent method draft', + title: 'Turn one API job into', + emphasis: 'a typed agent method.', + body: 'Share public documentation and the job agents should accomplish. We will sketch the method, inputs, result, grants, and best Pilot distribution model.', + choiceLabel: 'Distribution model', + choices: ['Signed local app', 'Hosted specialist service', 'Not sure yet'], + contextLabel: 'Documentation URL and desired job', + contextPlaceholder: 'Example: docs.example.com — enrich a company from its domain and return a normalized profile…', + submitLabel: 'Draft my agent method', + deliverables: ['Task-shaped method', 'Input/output sketch', 'App or service recommendation'], + success: 'Your agent-method draft request is with the publisher team.', + }, + 'live-data-for-agents': { + eyebrow: 'Live-source planner', + title: 'Map the live evidence behind', + emphasis: 'one research question.', + body: 'Give us a question whose answer changes over time. We will identify candidate specialist services, structured joins, document context, and source-health caveats.', + choiceLabel: 'Research domain', + choices: ['Market and company data', 'Government and public data', 'Science and health', 'Geographic and weather', 'Security intelligence', 'Cross-domain research'], + contextLabel: 'What current question should the agent answer?', + contextPlaceholder: 'Example: which regions face elevated energy risk over the next 72 hours, and what evidence supports it?', + submitLabel: 'Build live-source plan', + deliverables: ['Candidate specialists', 'Join and analysis path', 'Evidence and freshness model'], + success: 'Your live-source planning request was sent to the team.', + }, +}; diff --git a/src/data/solutions.ts b/src/data/solutions.ts new file mode 100644 index 00000000..cd2d9961 --- /dev/null +++ b/src/data/solutions.ts @@ -0,0 +1,482 @@ +export type SolutionGroup = 'Connect' | 'Build' | 'Operate'; + +export interface SolutionCard { + label: string; + title: string; + body: string; +} + +export interface SolutionStep { + title: string; + body: string; +} + +export interface SolutionProfile { + slug: string; + footerLabel: string; + group: SolutionGroup; + hue: number; + eyebrow: string; + metaTitle: string; + description: string; + heroLead: string; + heroEmphasis: string; + lede: string; + audience: string; + primaryCta: { label: string; href: string }; + secondaryCta: { label: string; href: string }; + signal: { + value: string; + body: string; + source: string; + href: string; + }; + problemTitle: string; + problemBody: string; + capabilities: SolutionCard[]; + steps: SolutionStep[]; + proof: string[]; + related: string[]; +} + +export const solutions: SolutionProfile[] = [ + { + slug: 'private-agent-network', + footerLabel: 'Private agent networks', + group: 'Connect', + hue: 125, + eyebrow: 'Agent connectivity', + metaTitle: 'Private Agent Networks Across Boundaries | Pilot Protocol', + description: 'Give AI agents permanent addresses, private discovery, explicit trust, and encrypted direct or relayed paths across machines and networks.', + heroLead: 'Connect agents across', + heroEmphasis: 'every boundary.', + lede: 'Give every agent a stable network identity and a private path to its peers—across laptops, clouds, offices, and organizations—without treating a central message broker as the data plane.', + audience: 'For AI platform teams operating agents across more than one machine, cloud, or organization.', + primaryCta: { label: 'Connect your first agents', href: '/docs/getting-started' }, + secondaryCta: { label: 'See the network architecture', href: '/docs/concepts' }, + signal: { + value: '50%', + body: 'of organizations surveyed said their agents still operate in isolation, while 96% said successful agents depend on seamless integration.', + source: 'MuleSoft Connectivity Benchmark 2026', + href: 'https://www.mulesoft.com/lp/reports/connectivity-benchmark', + }, + problemTitle: 'Agent fleets outgrow local assumptions quickly.', + problemBody: 'An agent that works on one workstation becomes a networking project as soon as a second runtime, cloud, or company enters the workflow. Addresses change, inbound ports disappear behind NAT, and every new peer gains its own authentication convention. Pilot puts those concerns in one agent-facing network layer.', + capabilities: [ + { label: 'Address', title: 'A permanent agent identity', body: 'Each node receives a persistent address backed by an Ed25519 identity, independent of its current IP address or runtime.' }, + { label: 'Reach', title: 'Direct when possible', body: 'Pilot discovers peers and attempts a direct NAT-traversed path, then uses an end-to-end encrypted relay when the network requires one.' }, + { label: 'Trust', title: 'Invisible until approved', body: 'Bilateral handshakes make reachability an explicit relationship rather than a side effect of knowing an endpoint.' }, + ], + steps: [ + { title: 'Install a local daemon', body: 'The same lightweight network surface sits beside each agent runtime.' }, + { title: 'Name and discover peers', body: 'Agents resolve stable hostnames instead of tracking changing IP addresses.' }, + { title: 'Establish mutual trust', body: 'Both endpoints approve the relationship before application traffic begins.' }, + { title: 'Send streams, messages, or files', body: 'Applications use one encrypted transport across local, cloud, and relayed paths.' }, + ], + proof: ['48-bit virtual addresses', 'Ed25519 identity and request signing', 'X25519 plus AES-256-GCM payload encryption', 'Reliable streams, datagrams, files, and pub/sub'], + related: ['agent-integration', 'agent-capability-store', 'agent-commerce'], + }, + { + slug: 'agent-integration', + footerLabel: 'Connect existing systems', + group: 'Connect', + hue: 180, + eyebrow: 'Systems integration', + metaTitle: 'Connect AI Agents to Existing Systems | Pilot Protocol', + description: 'Bridge AI agents to existing applications through Pilot SDKs, local sockets, webhooks, and loopback TCP or UDP compatibility.', + heroLead: 'Connect agents to the systems', + heroEmphasis: 'you already run.', + lede: 'Keep the applications, protocols, and operational systems that already work. Pilot adds an agent-facing connection layer around them through SDKs, webhooks, and a compatibility gateway.', + audience: 'For enterprise architects and platform engineers integrating agents with established software.', + primaryCta: { label: 'Read the integration guide', href: '/docs/integration' }, + secondaryCta: { label: 'Explore the gateway', href: '/docs/gateway' }, + signal: { + value: '46%', + body: 'of technical leaders identified integration with existing systems as an obstacle to deploying more capable agents.', + source: 'Anthropic State of AI Agents 2026', + href: 'https://resources.anthropic.com/hubfs/The%202026%20State%20of%20AI%20Agents%20Report.pdf', + }, + problemTitle: 'The useful system is rarely a blank sheet.', + problemBody: 'Most organizations already have databases, internal services, event handlers, and network applications that cannot be replaced for an agent pilot. Building a bespoke wrapper around every interface slows the experiment and creates another integration estate. Pilot offers several entry points so teams can choose the smallest change that fits the system.', + capabilities: [ + { label: 'Embed', title: 'SDKs for application code', body: 'Node.js, Python, and Swift applications can address trusted Pilot peers from their existing runtime.' }, + { label: 'Bridge', title: 'Loopback TCP and UDP', body: 'The gateway maps Pilot peers to local aliases so legacy network clients can communicate without learning a new wire protocol.' }, + { label: 'Trigger', title: 'Webhooks with delivery controls', body: 'Agent and network events can feed existing HTTP workflows with retry and circuit-breaker behavior.' }, + ], + steps: [ + { title: 'Choose the integration seam', body: 'Embed an SDK, call the local socket, bridge a legacy port, or subscribe a webhook.' }, + { title: 'Keep the existing application contract', body: 'Pilot handles peer identity and reachability around the application protocol.' }, + { title: 'Scope the trusted endpoints', body: 'Only approved agents become reachable through the bridge.' }, + { title: 'Expand one workflow at a time', body: 'Additional systems join the same network without redesigning the original connection.' }, + ], + proof: ['Node.js, Python, and Swift SDKs', 'Local Unix socket API', 'Legacy TCP and UDP gateway', 'Webhook retries and circuit breaker'], + related: ['private-agent-network', 'agent-ready-apis', 'agent-email-phone'], + }, + { + slug: 'agent-capability-store', + footerLabel: 'Agent capabilities', + group: 'Connect', + hue: 270, + eyebrow: 'Discovery and tools', + metaTitle: 'Agent Capability Store and Service Network | Pilot Protocol', + description: 'Let agents discover typed apps and specialist services through a signed local catalogue and a searchable network directory.', + heroLead: 'Give agents capabilities', + heroEmphasis: 'they can discover.', + lede: 'Move beyond a folder of hand-configured tools. Pilot gives agents a catalogue of installable apps and a directory of network services, each with a machine-readable way to explain what it can do.', + audience: 'For agent builders who need reusable tools and live services without maintaining a separate integration for each one.', + primaryCta: { label: 'Explore the App Store', href: '/app-store' }, + secondaryCta: { label: 'Read service-agent docs', href: '/docs/service-agents' }, + signal: { + value: '24%', + body: 'of API teams surveyed said they currently design their APIs for agent consumption.', + source: 'Postman State of the API 2025', + href: 'https://www.postman.com/state-of-api/2025/', + }, + problemTitle: 'A capable agent still needs a map of what exists.', + problemBody: 'Tools are often scattered across configuration files, custom servers, and human-oriented documentation. That makes capability discovery brittle and duplicates work across every agent framework. Pilot separates the capability from the harness: apps expose typed methods locally, while service agents advertise structured commands over the network.', + capabilities: [ + { label: 'Install', title: 'A signed app catalogue', body: 'Agents can inspect, install, and call packaged capabilities with typed methods and declared requirements.' }, + { label: 'Discover', title: 'A live service directory', body: 'Specialist agents publish searchable identities and explain available commands through a common help surface.' }, + { label: 'Compose', title: 'One addressable capability layer', body: 'Local apps and remote services can participate in the same workflow without pretending they have the same execution model.' }, + ], + steps: [ + { title: 'Search by the task', body: 'Find an app or specialist service by category, name, or capability.' }, + { title: 'Inspect before use', body: 'Review typed methods, integrity state, protection mode, and requested grants.' }, + { title: 'Call through one local interface', body: 'The daemon brokers the app or routes the request to a trusted service agent.' }, + { title: 'Compose complementary capabilities', body: 'A research, communication, or execution tool becomes one step in a larger agent workflow.' }, + ], + proof: ['Signed catalogue manifests', 'Typed app methods', 'Searchable specialist directory', 'Universal help and structured data conventions'], + related: ['secure-agent-runtime', 'live-data-for-agents', 'agent-ready-apis'], + }, + { + slug: 'secure-agent-runtime', + footerLabel: 'Secure agent runtime', + group: 'Build', + hue: 24, + eyebrow: 'Agent security', + metaTitle: 'Secure Agent App Runtime and Tooling | Pilot Protocol', + description: 'Run agent applications with signed manifests, pinned hashes, explicit grants, supervised processes, audit records, and local content scanning.', + heroLead: 'Give powerful agent tools', + heroEmphasis: 'hard boundaries.', + lede: 'Treat every tool as software with an identity, an integrity state, and a defined authority envelope. Pilot verifies apps at launch, scopes their access, supervises execution, and can scan content before it reaches the agent.', + audience: 'For application-security and agent-platform teams reviewing what autonomous tools may access or execute.', + primaryCta: { label: 'Review the security model', href: '/trust' }, + secondaryCta: { label: 'See app permissions', href: '/docs/app-store' }, + signal: { + value: '1 in 7', + body: 'developer environments using an agent tool server had at least one confirmed security finding in a large 2026 ecosystem study.', + source: 'Snyk Agentic Supply Chain Report 2026', + href: 'https://snyk.io/lp/state-of-agentic-dev-supply-chain-report/', + }, + problemTitle: 'Tool access is part of the agent threat model.', + problemBody: 'An agent tool can hold credentials, read files, reach remote services, or launch a process. A convenient configuration is not the same thing as a security boundary. Pilot’s app runtime makes the package, binary, grants, and execution state inspectable, while AEGIS adds a local screening layer for prompt injection and related content risks.', + capabilities: [ + { label: 'Verify', title: 'Signed and hash-pinned packages', body: 'The catalogue signature is checked and the installed binary hash is revalidated whenever the app launches.' }, + { label: 'Constrain', title: 'Explicit capability grants', body: 'Filesystem, network, process, signing, and audit access can be declared and reviewed per app.' }, + { label: 'Inspect', title: 'Local content screening', body: 'AEGIS can scan commands, files, tool results, memory, and skills for injection, impersonation, and obfuscation patterns.' }, + ], + steps: [ + { title: 'Inspect the manifest', body: 'Review the publisher, methods, required grants, protection mode, and integrity state.' }, + { title: 'Grant only the required authority', body: 'The local policy stays narrower than the app’s possible capability surface.' }, + { title: 'Verify every launch', body: 'Pilot checks the pinned artifact before supervising the app process.' }, + { title: 'Retain an execution trail', body: 'App calls and policy-relevant actions can be written to the local audit surface.' }, + ], + proof: ['Catalogue public-key verification', 'SHA-256 binary pinning', 'Per-app grants and guarded mode', 'Local AEGIS screening and audit'], + related: ['agent-capability-store', 'isolated-agent-compute', 'private-agent-network'], + }, + { + slug: 'grounded-agent-search', + footerLabel: 'Grounded private search', + group: 'Build', + hue: 205, + eyebrow: 'Search and research', + metaTitle: 'Grounded Private Search for AI Agents | Pilot Protocol', + description: 'Crawl, index, retrieve, and research private knowledge with Cosift using cited answers, hybrid retrieval, evaluation, and local-model support.', + heroLead: 'Search your knowledge.', + heroEmphasis: 'Show the evidence.', + lede: 'Cosift gives agents a self-hostable research surface: crawl the sources you choose, retrieve with lexical or hybrid search, generate answers with citations, and evaluate whether the result is actually grounded.', + audience: 'For research, knowledge, and engineering teams that need more than an untraceable model answer.', + primaryCta: { label: 'Explore Cosift', href: '/apps/io.pilot.cosift' }, + secondaryCta: { label: 'Read the research guide', href: '/blog/web-search-api-for-ai-agents-grounded-research' }, + signal: { + value: '78%', + body: 'of technology leaders surveyed cited data integration or data quality as a barrier to scaling AI initiatives.', + source: 'Adobe Digital Trends — CIO Perspectives', + href: 'https://business.adobe.com/uk/resources/reports/cio-digital-trends.html', + }, + problemTitle: 'Retrieval quality decides whether an answer can be trusted.', + problemBody: 'Private knowledge is fragmented across websites, documents, and application boundaries. Even after it is indexed, a plausible answer can outrun its evidence. Cosift keeps the retrieval path visible and supports evaluation alongside generation, so teams can test source coverage, ranking, and answer grounding rather than relying on fluency alone.', + capabilities: [ + { label: 'Collect', title: 'Self-hostable crawling and indexing', body: 'Choose the sources and retain control over the index, administration surface, and model endpoints.' }, + { label: 'Retrieve', title: 'Lexical, dense, and hybrid search', body: 'Use BM25, optional embeddings, reranking, expansion, HyDE, and diversity controls for the query at hand.' }, + { label: 'Answer', title: 'Cited research workflows', body: 'Query, answer, and multi-step research endpoints return source context instead of hiding the retrieval trace.' }, + ], + steps: [ + { title: 'Define the source boundary', body: 'Crawl the approved public or private knowledge surfaces.' }, + { title: 'Select a retrieval strategy', body: 'Start with BM25 or add dense retrieval and reranking where they improve measured quality.' }, + { title: 'Ask for an answer or research run', body: 'The agent receives the response together with source references.' }, + { title: 'Evaluate the result', body: 'Built-in retrieval and answer checks make quality a repeatable engineering concern.' }, + ], + proof: ['Self-hostable crawler and index', 'BM25 plus optional hybrid retrieval', 'Source-cited answer and research APIs', 'Offline retrieval and answer evaluation'], + related: ['live-data-for-agents', 'web-access-for-agents', 'isolated-agent-compute'], + }, + { + slug: 'web-access-for-agents', + footerLabel: 'Web access for agents', + group: 'Build', + hue: 315, + eyebrow: 'Web operations', + metaTitle: 'Reliable Web Access for AI Agents | Pilot Protocol', + description: 'Combine real Chrome interaction, clean webpage extraction, and reusable site guidance to give AI agents a more dependable web surface.', + heroLead: 'Give agents more than', + heroEmphasis: 'a brittle browser loop.', + lede: 'Use the right web surface for each task: clean Markdown when the agent only needs to read, a real Chrome session when it must interact, and task-level site guidance when a workflow should become repeatable.', + audience: 'For automation and operations teams whose agents need to read and act across existing websites.', + primaryCta: { label: 'Explore web apps', href: '/app-store#cat-web' }, + secondaryCta: { label: 'Talk through a workflow', href: '/contact?topic=product' }, + signal: { + value: 'Live web', + body: 'benchmarks continue to find recurring failures from pop-ups, navigation changes, authentication boundaries, and other open-web instability.', + source: 'BrowserArena research', + href: 'https://arxiv.org/abs/2510.02418', + }, + problemTitle: 'Not every web task should be solved with pixels.', + problemBody: 'Browser agents often use one expensive interaction loop for reading, navigation, and submission. That increases latency and exposes the agent to more untrusted page content than necessary. Pilot’s complementary web apps let a workflow begin with clean extraction, move to typed guidance, and open an interactive browser only for the steps that require it.', + capabilities: [ + { label: 'Read', title: 'Web pages as clean Markdown', body: 'Plainweb turns a URL into compact content for extraction, summarization, and downstream research.' }, + { label: 'Act', title: 'A real Chrome execution surface', body: 'Otto connects the agent to browser tabs for extraction, screenshots, and supported site interactions.' }, + { label: 'Repeat', title: 'Task-specific site guidance', body: 'Bowmark stores concise navigation knowledge and improves it with feedback from completed workflows.' }, + ], + steps: [ + { title: 'Read before opening a browser', body: 'Use clean extraction for content-only tasks and reduce unnecessary interaction.' }, + { title: 'Load task guidance', body: 'Apply a known site path when the destination and workflow are understood.' }, + { title: 'Escalate to Chrome', body: 'Use the interactive surface for forms, authenticated sessions, or visual state.' }, + { title: 'Capture what worked', body: 'Feed successful task knowledge back into a reusable navigation guide.' }, + ], + proof: ['Clean URL-to-Markdown extraction', 'Real Chrome extension and relay', 'Screenshots and page extraction', 'Reusable site-task guidance with feedback'], + related: ['grounded-agent-search', 'sales-agent-stack', 'agent-email-phone'], + }, + { + slug: 'isolated-agent-compute', + footerLabel: 'Isolated agent compute', + group: 'Build', + hue: 82, + eyebrow: 'Execution and data', + metaTitle: 'Isolated Local Compute for AI Agents | Pilot Protocol', + description: 'Run agent-generated code in hardware-isolated microVMs or containers with local SQL and data services available through typed app methods.', + heroLead: 'Let agents execute.', + heroEmphasis: 'Keep the host out of reach.', + lede: 'Move generated code and stateful work into an explicit execution environment. Pilot apps expose isolated microVMs, containers, and local data services as typed capabilities the agent can inspect and invoke.', + audience: 'For coding-agent and platform teams that need useful execution without handing the agent an unrestricted host shell.', + primaryCta: { label: 'Explore Smol', href: '/apps/io.pilot.smol' }, + secondaryCta: { label: 'Browse compute apps', href: '/app-store#cat-infra' }, + signal: { + value: '94%', + body: 'of surveyed teams use containers somewhere in their agent infrastructure, while security remains the most common scaling concern.', + source: 'Docker State of Agentic AI 2026', + href: 'https://www.docker.com/blog/state-of-agentic-ai-key-findings/', + }, + problemTitle: 'Execution is useful precisely because it is dangerous.', + problemBody: 'Coding agents need to run commands, inspect artifacts, and persist working data. Running everything directly on a developer machine combines the broadest authority with the least repeatability. Pilot separates the agent call from the execution substrate, allowing teams to choose microVM isolation, a container, or a purpose-built database app for the task.', + capabilities: [ + { label: 'Isolate', title: 'Hardware-isolated microVMs', body: 'Smol runs workloads in local or cloud microVMs with an explicit lifecycle and brokered control surface.' }, + { label: 'Package', title: 'Container execution', body: 'The Docker app provides a familiar unit for repeatable tools, dependencies, and disposable environments.' }, + { label: 'Persist', title: 'Typed local data services', body: 'SQLite, DuckDB, PostgreSQL, MySQL, and Redis cover transactional, analytical, and in-memory workloads.' }, + ], + steps: [ + { title: 'Choose the isolation level', body: 'Match a microVM, container, or data process to the workload and threat model.' }, + { title: 'Declare the required authority', body: 'App grants expose the files, process calls, and network access the tool requires.' }, + { title: 'Run through typed methods', body: 'The agent invokes a bounded operation instead of receiving a permanent unrestricted shell.' }, + { title: 'Destroy or retain deliberately', body: 'Ephemeral compute and persistent data have separate, visible lifecycles.' }, + ], + proof: ['Local and cloud microVM execution', 'Docker lifecycle methods', 'Five local database engines', 'Signed apps with explicit grants'], + related: ['secure-agent-runtime', 'grounded-agent-search', 'agent-integration'], + }, + { + slug: 'agent-email-phone', + footerLabel: 'Email, phone and SMS', + group: 'Operate', + hue: 350, + eyebrow: 'Agent communications', + metaTitle: 'Email, Phone and SMS for AI Agents | Pilot Protocol', + description: 'Give AI agents provisioned email, inbox, phone, voice, SMS, and conversation capabilities through typed Pilot applications.', + heroLead: 'Give agents a place', + heroEmphasis: 'people can reach.', + lede: 'Provision real communication endpoints for workflows that cannot stay inside a chat box. Agents can receive and reply to email, work with conversations, send messages, and use phone capabilities through typed applications.', + audience: 'For support, operations, and workflow teams that need agents to participate in existing communication channels.', + primaryCta: { label: 'Explore AgentPhone', href: '/apps/io.pilot.agentphone' }, + secondaryCta: { label: 'Talk to the team', href: '/contact?topic=product' }, + signal: { + value: '87%', + body: 'of consumers surveyed communicate with businesses across multiple channels, with phone remaining important for support and time-sensitive needs.', + source: 'Twilio Communications Blueprint', + href: 'https://www.twilio.com/en-us/report/the-communications-blueprint/overview/chapter-1', + }, + problemTitle: 'A workflow is not automated if the handoff stops at the inbox.', + problemBody: 'Many operational processes eventually require an email response, a text update, or a phone conversation. Connecting each channel through an unrelated automation stack fragments context and credentials. Pilot packages communication endpoints as agent-callable apps so they can participate alongside search, company data, and internal systems.', + capabilities: [ + { label: 'Email', title: 'Provisioned inbox and sending', body: 'Primitive provides account, inbox, send, receive, search, reply, and conversation-level methods.' }, + { label: 'Phone', title: 'Voice and number management', body: 'AgentPhone exposes phone-number and calling capabilities through a typed local application interface.' }, + { label: 'Message', title: 'SMS and conversations', body: 'The same communication surface supports messaging and conversation history for follow-up workflows.' }, + ], + steps: [ + { title: 'Provision an endpoint', body: 'Create or connect the email or phone identity the workflow will use.' }, + { title: 'Define the communication task', body: 'Give the agent a narrow action such as monitor, draft, reply, notify, or call.' }, + { title: 'Combine context from other apps', body: 'Search, customer data, or company intelligence can inform the interaction.' }, + { title: 'Keep the channel history', body: 'Conversation methods preserve the thread needed for later steps and human review.' }, + ], + proof: ['Email account and inbox lifecycle', 'Send, receive, reply, and search', 'Phone numbers, voice calls, and SMS', 'Typed conversation methods'], + related: ['sales-agent-stack', 'agent-integration', 'grounded-agent-search'], + }, + { + slug: 'sales-agent-stack', + footerLabel: 'Sales agent stack', + group: 'Operate', + hue: 48, + eyebrow: 'Revenue operations', + metaTitle: 'Sales Intelligence and Outreach Agents | Pilot Protocol', + description: 'Combine people and company intelligence, specialist APIs, web research, email, and phone into a composable sales-agent workflow.', + heroLead: 'From account research', + heroEmphasis: 'to a real conversation.', + lede: 'Build a sales agent from complementary capabilities instead of another monolithic platform: identify the company, enrich the people, research the account, and continue through email or phone.', + audience: 'For revenue-operations and sales-engineering teams testing where agents can remove research and coordination work.', + primaryCta: { label: 'Explore company intelligence', href: '/apps/io.pilot.sixtyfour' }, + secondaryCta: { label: 'Discuss a sales workflow', href: '/contact?topic=product' }, + signal: { + value: '40%', + body: 'is the average share of a seller’s week spent selling, according to a survey of more than four thousand sales professionals.', + source: 'Salesforce State of Sales 2026', + href: 'https://www.salesforce.com/news/stories/state-of-sales-report-announcement-2026/', + }, + problemTitle: 'Prospecting work is spread across too many disconnected tools.', + problemBody: 'A useful account brief can require company enrichment, people data, public web research, internal context, drafting, and channel follow-up. Each handoff adds another copy-and-paste boundary. Pilot lets a team compose these steps through typed apps while retaining the option to substitute a capability as the workflow evolves.', + capabilities: [ + { label: 'Discover', title: 'People and company intelligence', body: 'Sixtyfour supports discovery, enrichment, and research across people and organizations.' }, + { label: 'Expand', title: 'Specialist API access', body: 'Orthogonal routes narrowly scoped requests to a broad set of paid data and enrichment APIs.' }, + { label: 'Engage', title: 'Email, phone, and web actions', body: 'Primitive, AgentPhone, and the web stack carry the workflow from preparation into an approved interaction.' }, + ], + steps: [ + { title: 'Define the account profile', body: 'Start with a market, company, or person that matches the campaign hypothesis.' }, + { title: 'Enrich and research', body: 'Combine structured intelligence with current web and internal knowledge.' }, + { title: 'Prepare the next action', body: 'Draft a brief, message, or call plan using the collected context.' }, + { title: 'Continue in the chosen channel', body: 'Use a provisioned email or phone capability under the workflow’s approval rules.' }, + ], + proof: ['Company and contact enrichment', 'Specialist API routing', 'Grounded web research', 'Email, SMS, and phone capabilities'], + related: ['agent-email-phone', 'web-access-for-agents', 'live-data-for-agents'], + }, + { + slug: 'agent-commerce', + footerLabel: 'Agent commerce', + group: 'Operate', + hue: 150, + eyebrow: 'Payments and identity', + metaTitle: 'Agent Commerce with Bounded Spending | Pilot Protocol', + description: 'Combine trusted agent identities, payment requests, verification, and bounded multichain USDC spending for agent-commerce experiments.', + heroLead: 'Let agents transact', + heroEmphasis: 'inside a boundary.', + lede: 'Move from a recommendation to a verifiable exchange. Pilot combines trusted peer relationships with a guarded wallet that can request, send, and verify USDC under explicit spending limits.', + audience: 'For commerce and procurement builders exploring machine-to-machine transactions without starting from an unrestricted wallet.', + primaryCta: { label: 'Explore Wallet', href: '/apps/io.pilot.wallet' }, + secondaryCta: { label: 'Talk through the controls', href: '/contact?topic=governance' }, + signal: { + value: '1 in 3', + body: 'consumers surveyed expect to use shopping agents regularly, while permissions, spending controls, and human override remain central trust requirements.', + source: 'Visa Earning Trust in Agentic Commerce 2026', + href: 'https://corporate.visa.com/en/products/intelligent-commerce/earning-trust-report.html', + }, + problemTitle: 'A payment needs more context than a destination address.', + problemBody: 'Agent commerce introduces questions about who requested the action, what was approved, how much may be spent, and whether settlement occurred. Pilot’s current wallet surface supports bounded payment operations and verification, while the network supplies persistent identities and signed requests around the workflow. Higher-order enterprise approval lifecycle remains a separate productization track.', + capabilities: [ + { label: 'Identify', title: 'A persistent network counterparty', body: 'Pilot peers communicate through signed identities and explicit trust relationships rather than anonymous endpoints.' }, + { label: 'Bound', title: 'A guarded wallet with spend limits', body: 'Wallet exposes request, payment, balance, and verification methods with configurable spending boundaries.' }, + { label: 'Verify', title: 'Check settlement programmatically', body: 'The workflow can validate payment state before continuing to delivery or the next business action.' }, + ], + steps: [ + { title: 'Establish the counterparties', body: 'Resolve and trust the agents participating in the exchange.' }, + { title: 'Create the payment request', body: 'Bind the amount and destination to the workflow’s business context.' }, + { title: 'Apply the wallet boundary', body: 'Keep the requested action inside the configured spend limit and guarded app grants.' }, + { title: 'Verify before continuing', body: 'Confirm the transfer state programmatically before goods, data, or service access changes hands.' }, + ], + proof: ['Guarded local wallet app', 'USDC on Base, Ethereum, and Polygon', 'Payment request and verification methods', 'Per-wallet spending limits'], + related: ['private-agent-network', 'agent-integration', 'secure-agent-runtime'], + }, + { + slug: 'agent-ready-apis', + footerLabel: 'Publish agent-ready APIs', + group: 'Connect', + hue: 235, + eyebrow: 'For API publishers', + metaTitle: 'Publish Agent-Ready APIs and Services | Pilot Protocol', + description: 'Package an API as a typed, discoverable Pilot app or network service so agents can understand and invoke it with less custom integration work.', + heroLead: 'Turn your API into a capability', + heroEmphasis: 'agents can find.', + lede: 'Keep the service you already operate. Add a typed agent-facing surface, a discoverable identity, and a distribution path through Pilot’s application catalogue or specialist service network.', + audience: 'For API companies and platform teams that want agent distribution without rebuilding the underlying product.', + primaryCta: { label: 'Publish an app', href: '/publish' }, + secondaryCta: { label: 'Read the app contract', href: '/docs/app-store' }, + signal: { + value: '65%', + body: 'of organizations surveyed generate revenue from APIs, yet only 24% currently design those APIs for agents.', + source: 'Postman State of the API 2025', + href: 'https://www.postman.com/state-of-api/2025/', + }, + problemTitle: 'A documented API is not automatically an agent product.', + problemBody: 'Human-oriented reference pages leave the agent to infer authentication, method intent, parameter shape, and safe operating limits. A Pilot app can broker an existing API behind typed methods and declared grants. A network service can publish its own address and structured command surface. Both approaches give the publisher a clearer agent-facing contract.', + capabilities: [ + { label: 'Describe', title: 'Typed methods and schemas', body: 'Define what the capability does, which arguments it accepts, and how the result is returned.' }, + { label: 'Distribute', title: 'Catalogue or network discovery', body: 'Ship a signed local app or operate a specialist service with a searchable Pilot identity.' }, + { label: 'Operate', title: 'Keep control of the upstream', body: 'The publisher retains the existing API, commercial model, and service operations behind the agent-facing adapter.' }, + ], + steps: [ + { title: 'Choose local app or hosted service', body: 'Use an app for brokered local access or a service agent for an addressable network capability.' }, + { title: 'Define a narrow agent contract', body: 'Expose task-oriented methods rather than mirroring every raw upstream endpoint.' }, + { title: 'Declare authority and dependencies', body: 'Make credentials, files, network domains, and process requirements inspectable.' }, + { title: 'Publish and iterate', body: 'Distribute through the catalogue or directory and improve the contract from real agent calls.' }, + ], + proof: ['Typed manifest schema', 'Signed catalogue distribution', 'Searchable service identity', 'Structured help and data responses'], + related: ['agent-capability-store', 'agent-integration', 'secure-agent-runtime'], + }, + { + slug: 'live-data-for-agents', + footerLabel: 'Live data for agents', + group: 'Build', + hue: 65, + eyebrow: 'Structured research', + metaTitle: 'Live Structured Data for AI Research | Pilot Protocol', + description: 'Give research agents structured access to public, scientific, geographic, financial, security, and reference data through specialist services.', + heroLead: 'Give research agents', + heroEmphasis: 'live structured context.', + lede: 'Query specialist services for current public data, combine the results with grounded retrieval, and analyze them locally—without teaching every agent a different upstream API convention.', + audience: 'For analysts, researchers, and agent builders who need current structured context alongside model reasoning.', + primaryCta: { label: 'Explore service agents', href: '/docs/service-agents' }, + secondaryCta: { label: 'See grounded search', href: '/solutions/grounded-agent-search' }, + signal: { + value: '24.4%', + body: 'of reported agent deployments focus on research and data analysis, making it one of the largest production use-case categories.', + source: 'LangChain State of Agent Engineering 2026', + href: 'https://www.langchain.com/state-of-agent-engineering', + }, + problemTitle: 'The model may know the domain, but not today’s answer.', + problemBody: 'Research agents need current prices, filings, weather, geographic facts, scientific records, vulnerabilities, and other changing data. Integrating each upstream independently creates a long tail of keys, schemas, and error handling. Pilot’s specialist directory normalizes discovery and common commands while keeping each data source’s scope and upstream limitations visible.', + capabilities: [ + { label: 'Discover', title: 'Specialists by category', body: 'Find services across reference, science, government, finance, news, transit, security, health, and other domains.' }, + { label: 'Query', title: 'Structured command surfaces', body: 'Common help, data, summary, and JSON conventions reduce the amount of bespoke tool knowledge an agent needs.' }, + { label: 'Analyze', title: 'Compose with search and local data', body: 'Cosift, DuckDB, databases, and market-intelligence apps turn live observations into a larger research workflow.' }, + ], + steps: [ + { title: 'Find the relevant specialist', body: 'Search the live directory by capability or domain rather than starting from a vendor list.' }, + { title: 'Inspect its current command surface', body: 'Use the service help response to understand parameters and available data.' }, + { title: 'Collect structured results', body: 'Query one or several specialists while retaining source-specific status and limits.' }, + { title: 'Ground and analyze', body: 'Combine live data with indexed knowledge or local analytical tools for the final result.' }, + ], + proof: ['Hundreds of directory service records', 'Dozens of specialist categories', 'Common help and structured-data conventions', 'Composition with Cosift and local databases'], + related: ['grounded-agent-search', 'agent-capability-store', 'sales-agent-stack'], + }, +]; + +export const solutionGroups = (['Connect', 'Build', 'Operate'] as const).map((name) => ({ + name, + solutions: solutions.filter((solution) => solution.group === name), +})); + +export const solutionsBySlug = new Map(solutions.map((solution) => [solution.slug, solution])); diff --git a/src/layouts/BlogLayout.astro b/src/layouts/BlogLayout.astro index fe2b48e6..1894a85f 100644 --- a/src/layouts/BlogLayout.astro +++ b/src/layouts/BlogLayout.astro @@ -2,7 +2,10 @@ import BaseHead from '../components/BaseHead.astro'; import Nav from '../components/Nav.astro'; import Footer from '../components/Footer.astro'; -import { blogPosts, companyNews } from '../data/blogPosts'; +import Breadcrumbs from '../components/Breadcrumbs.astro'; +import articleImageManifest from '../data/articleImageManifest.json'; +import { allPosts, blogPosts, companyNews } from '../data/blogPosts'; +import { getBlogImage } from '../lib/blogImages'; import '../styles/global.css'; import '../styles/system.css'; @@ -14,23 +17,37 @@ interface Props { canonicalPath?: string; bannerImage?: string; faqItems?: { question: string; answer: string }[]; - section?: 'blog' | 'news'; + section?: 'blog' | 'learn' | 'news'; + author?: { name: string; url?: string; type?: 'Organization' | 'Person' }; + dateModified?: string; } -const { title, description, date, tags, canonicalPath, bannerImage, faqItems = [], section = 'blog' } = Astro.props; -const isNews = section === 'news'; -const collectionLabel = isNews ? 'Newsroom' : 'Blog'; -const collectionPath = isNews ? '/news/' : '/blog/'; -const collectionPosts = isNews ? companyNews : blogPosts; +const { title, description, date, tags, canonicalPath, bannerImage, faqItems = [], section = 'blog', author, dateModified } = Astro.props; const cleanPath = canonicalPath ? canonicalPath.replace(/\.html$/, '') : undefined; const canonicalUrl = cleanPath ? `https://pilotprotocol.network${cleanPath}` : undefined; +const effectiveSection = cleanPath?.startsWith('/learn/') ? 'learn' : section; +const isNews = effectiveSection === 'news'; +const isLearn = effectiveSection === 'learn'; +const collectionLabel = isNews ? 'Newsroom' : isLearn ? 'Learning Center' : 'Blog'; +const collectionPath = isNews ? '/news/' : isLearn ? '/learn/' : '/blog/'; +const collectionPosts = isNews ? companyNews : blogPosts; +const relatedPath = isLearn ? '/blog/' : collectionPath; +const heroImage = bannerImage ? getBlogImage(bannerImage) : undefined; const ogImage = bannerImage - ? `https://pilotprotocol.network${bannerImage}` - : 'https://pilotprotocol.network/img/pilot.png'; + ? `https://pilotprotocol.network${heroImage?.src || bannerImage}` + : 'https://pilotprotocol.network/og/main.jpg'; const pathParts = Astro.url.pathname.replace(/\/$/, '').split('/'); const currentSlug = pathParts[pathParts.length - 1].replace('.html', ''); const currentIndex = collectionPosts.findIndex(p => p.slug === currentSlug); +const currentPost = allPosts.find(p => p.slug === currentSlug); +const publishedAt = currentPost?.iso_date || date; +const modifiedAt = dateModified || publishedAt; +const articleAuthor = author || { + name: 'Pilot Protocol editorial team', + url: 'https://pilotprotocol.network/about#publishing', + type: 'Organization' as const, +}; const prevPost = currentIndex > 0 ? collectionPosts[currentIndex - 1] : null; const nextPost = currentIndex >= 0 && currentIndex < collectionPosts.length - 1 ? collectionPosts[currentIndex + 1] : null; @@ -72,6 +89,39 @@ const labelKey = (value: string) => decodeEntities( .replace(/\s+/g, ' ') .trim() .toLowerCase(); + +const setImageAttribute = (tag: string, name: string, value: string | number) => { + const pattern = new RegExp(`\\s${name}\\s*=\\s*(?:"[^"]*"|'[^']*')`, 'i'); + if (pattern.test(tag)) return tag.replace(pattern, ` ${name}="${value}"`); + return tag.replace(/(\s*\/?>)$/, ` ${name}="${value}"$1`); +}; + +let bodyImageIndex = 0; +articleBody = articleBody.replace(/]*>/gi, (originalTag) => { + let tag = originalTag; + const sourceMatch = tag.match(/\bsrc\s*=\s*(?:"([^"]+)"|'([^']+)')/i); + const remoteSource = sourceMatch ? decodeEntities(sourceMatch[1] ?? sourceMatch[2] ?? '') : ''; + const optimized = articleImageManifest[remoteSource as keyof typeof articleImageManifest]; + + if (optimized) { + tag = setImageAttribute(tag, 'src', optimized.src); + tag = setImageAttribute(tag, 'srcset', optimized.srcset); + tag = setImageAttribute(tag, 'sizes', '(max-width: 760px) calc(100vw - 40px), 720px'); + tag = setImageAttribute(tag, 'width', optimized.width); + tag = setImageAttribute(tag, 'height', optimized.height); + } + + tag = setImageAttribute(tag, 'decoding', 'async'); + if (bodyImageIndex === 0 && !heroImage) { + tag = setImageAttribute(tag, 'loading', 'eager'); + tag = setImageAttribute(tag, 'fetchpriority', 'high'); + } else { + tag = setImageAttribute(tag, 'loading', 'lazy'); + tag = setImageAttribute(tag, 'fetchpriority', 'low'); + } + bodyImageIndex += 1; + return tag; +}); const headingIds = new Set(); const headingsByLabel = new Map(); @@ -102,27 +152,19 @@ const faqSectionId = headingIds.has('frequently-asked-questions') + {heroImage && } - {faqItems.length > 0 && ( - -