diff --git a/src/app/rpc/page.tsx b/src/app/rpc/page.tsx index ffe93f64..afdaad4c 100644 --- a/src/app/rpc/page.tsx +++ b/src/app/rpc/page.tsx @@ -158,6 +158,19 @@ export default async function RpcHubPage() { +
+ +

+ Want these numbers from your connection?{" "} + + Run the browser RPC speed test → + {" "} + + Paste any endpoints (keyed included), no install, URLs never leave your browser. + +

+
+ {keyedRpcSpecs.length > 0 && (

diff --git a/src/app/speedtest-rpc/page.tsx b/src/app/speedtest-rpc/page.tsx new file mode 100644 index 00000000..f0453143 --- /dev/null +++ b/src/app/speedtest-rpc/page.tsx @@ -0,0 +1,95 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { pageMetadata } from "@/lib/page-metadata"; +import { SpeedtestRpcClient } from "@/components/speedtest/speedtest-rpc-client"; +import { buildBreadcrumbJsonLd, safeJsonLd } from "@/lib/jsonld"; +import { SITE } from "@/data/site"; + +export const metadata: Metadata = pageMetadata({ + path: "/speedtest-rpc", + title: "RPC Speed Test — benchmark your endpoints from your browser", + description: + "Paste any RPC URLs and measure their real latency from your own connection. Same anti-cache methodology as our public benchmarks. No install, no signup — your URLs and API keys never leave your browser.", +}); + +export const revalidate = 3600; + +export default function SpeedtestRpcPage() { + const jsonLd = { + "@context": "https://schema.org", + "@graph": [ + buildBreadcrumbJsonLd([ + { name: "Home", item: SITE.url }, + { name: "RPC Speed Test", item: `${SITE.url}/speedtest-rpc` }, + ]), + { + "@type": "WebApplication", + "@id": `${SITE.url}/speedtest-rpc#app`, + name: "RPC Speed Test", + url: `${SITE.url}/speedtest-rpc`, + applicationCategory: "DeveloperApplication", + operatingSystem: "Web", + offers: { "@type": "Offer", price: "0", priceCurrency: "USD" }, + description: + "Browser-based latency test for JSON-RPC endpoints. Probes run directly from the visitor's connection with the same anti-cache methodology as OpenChainBench's public benchmarks; endpoint URLs never reach OpenChainBench servers.", + publisher: { "@id": `${SITE.url}/#org` }, + }, + ], + }; + + return ( +

+