From 231cabf980f7bbd3588116b1ee31884247e839f0 Mon Sep 17 00:00:00 2001 From: Flotapponnier <160007691+Flotapponnier@users.noreply.github.com> Date: Wed, 2 Sep 2026 17:47:41 +0200 Subject: [PATCH] feat: add OG image cards for all hub pages missing dedicated cards (#2234) --- src/app/alternatives/opengraph-image.tsx | 15 +++++++++++++++ src/app/answers/opengraph-image.tsx | 15 +++++++++++++++ src/app/badges/opengraph-image.tsx | 15 +++++++++++++++ src/app/bridge/opengraph-image.tsx | 15 +++++++++++++++ src/app/chains/opengraph-image.tsx | 15 +++++++++++++++ src/app/compare/opengraph-image.tsx | 15 +++++++++++++++ src/app/data-api/opengraph-image.tsx | 15 +++++++++++++++ src/app/fee-compare/opengraph-image.tsx | 15 +++++++++++++++ src/app/hyperliquid/opengraph-image.tsx | 15 +++++++++++++++ src/app/partners/opengraph-image.tsx | 15 +++++++++++++++ src/app/perps/opengraph-image.tsx | 15 +++++++++++++++ src/app/prediction-markets/opengraph-image.tsx | 15 +++++++++++++++ src/app/reports/opengraph-image.tsx | 15 +++++++++++++++ src/app/rpc/opengraph-image.tsx | 15 +++++++++++++++ src/app/team/opengraph-image.tsx | 15 +++++++++++++++ src/app/trading-apps/opengraph-image.tsx | 15 +++++++++++++++ 16 files changed, 240 insertions(+) create mode 100644 src/app/alternatives/opengraph-image.tsx create mode 100644 src/app/answers/opengraph-image.tsx create mode 100644 src/app/badges/opengraph-image.tsx create mode 100644 src/app/bridge/opengraph-image.tsx create mode 100644 src/app/chains/opengraph-image.tsx create mode 100644 src/app/compare/opengraph-image.tsx create mode 100644 src/app/data-api/opengraph-image.tsx create mode 100644 src/app/fee-compare/opengraph-image.tsx create mode 100644 src/app/hyperliquid/opengraph-image.tsx create mode 100644 src/app/partners/opengraph-image.tsx create mode 100644 src/app/perps/opengraph-image.tsx create mode 100644 src/app/prediction-markets/opengraph-image.tsx create mode 100644 src/app/reports/opengraph-image.tsx create mode 100644 src/app/rpc/opengraph-image.tsx create mode 100644 src/app/team/opengraph-image.tsx create mode 100644 src/app/trading-apps/opengraph-image.tsx diff --git a/src/app/alternatives/opengraph-image.tsx b/src/app/alternatives/opengraph-image.tsx new file mode 100644 index 00000000..e7e60e02 --- /dev/null +++ b/src/app/alternatives/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Alternatives to crypto infrastructure products, ranked by live OpenChainBench benchmarks."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Alternatives", + headline: "Alternatives, by the numbers.", + subline: + "Benchmark-ranked alternatives to every major crypto infrastructure product. Same data, reframed per product, no verdict.", + }); +} diff --git a/src/app/answers/opengraph-image.tsx b/src/app/answers/opengraph-image.tsx new file mode 100644 index 00000000..f9084db0 --- /dev/null +++ b/src/app/answers/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "OpenChainBench answers. Common questions about crypto infrastructure, answered with live benchmark data."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Answers", + headline: "Questions, answered with data.", + subline: + "Common questions about crypto infrastructure performance, answered directly from live OpenChainBench benchmark results.", + }); +} diff --git a/src/app/badges/opengraph-image.tsx b/src/app/badges/opengraph-image.tsx new file mode 100644 index 00000000..eaa9f78c --- /dev/null +++ b/src/app/badges/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "OpenChainBench live ranking badges. Embed a live benchmark rank badge in your docs or README."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Badges", + headline: "Show your live rank.", + subline: + "Embed a live OpenChainBench ranking badge in your docs, README or website. Updates automatically as benchmark data changes.", + }); +} diff --git a/src/app/bridge/opengraph-image.tsx b/src/app/bridge/opengraph-image.tsx new file mode 100644 index 00000000..48d466be --- /dev/null +++ b/src/app/bridge/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Cheapest cross-chain bridge 2026. Live fee and slippage ranking across Across, deBridge, LI.FI, Relay and more."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Bridge benchmarks", + headline: "Cheapest cross-chain bridge, live.", + subline: + "All-in fee (fees + slippage + destination gas) for $300 USDC across Solana, Base and Arbitrum corridors. Refreshed every 5 minutes.", + }); +} diff --git a/src/app/chains/opengraph-image.tsx b/src/app/chains/opengraph-image.tsx new file mode 100644 index 00000000..7a4251e0 --- /dev/null +++ b/src/app/chains/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Chains tracked by OpenChainBench. Browse all live benchmarks grouped by blockchain."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Chains", + headline: "Every chain we measure.", + subline: + "All blockchains tracked by OpenChainBench. Pick a chain for the full set of live RPC, finality and data measurements.", + }); +} diff --git a/src/app/compare/opengraph-image.tsx b/src/app/compare/opengraph-image.tsx new file mode 100644 index 00000000..bc6a3615 --- /dev/null +++ b/src/app/compare/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Compare crypto infrastructure providers head to head. Live benchmark data, no vendor claims."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Compare", + headline: "Providers, head to head.", + subline: + "Pick any two infrastructure providers and compare them on latency, reliability and cost. Live data, no vendor claims.", + }); +} diff --git a/src/app/data-api/opengraph-image.tsx b/src/app/data-api/opengraph-image.tsx new file mode 100644 index 00000000..502014c0 --- /dev/null +++ b/src/app/data-api/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Best crypto data API 2026. Live benchmark ranking of price, NFT and DeFi data providers by latency and accuracy."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Data API benchmarks", + headline: "Best crypto data API, ranked.", + subline: + "Latency, accuracy and reliability for every major crypto data API provider. Measured continuously from three regions.", + }); +} diff --git a/src/app/fee-compare/opengraph-image.tsx b/src/app/fee-compare/opengraph-image.tsx new file mode 100644 index 00000000..f5e261b8 --- /dev/null +++ b/src/app/fee-compare/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Perp DEX fee comparison. Compare taker fees between any two venues using real on-chain wallet data."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Fee compare", + headline: "Perp DEX fees, head to head.", + subline: + "Paste a wallet and compare what you paid on Hyperliquid or Gains against any other venue. Live on-chain data, no API key.", + }); +} diff --git a/src/app/hyperliquid/opengraph-image.tsx b/src/app/hyperliquid/opengraph-image.tsx new file mode 100644 index 00000000..c3219d39 --- /dev/null +++ b/src/app/hyperliquid/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Hyperliquid frontends and HIP-3 DEX leaderboard. Live revenue, volume and users from a local HL node."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Hyperliquid", + headline: "Every HL frontend, ranked.", + subline: + "Revenue, volume and daily users for every Hyperliquid frontend and HIP-3 deployer. Server-side data from a local node tailing every fill.", + }); +} diff --git a/src/app/partners/opengraph-image.tsx b/src/app/partners/opengraph-image.tsx new file mode 100644 index 00000000..5566a618 --- /dev/null +++ b/src/app/partners/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "OpenChainBench partners and integrations. Projects that embed or reference our open benchmark data."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Partners", + headline: "Partners and integrations.", + subline: + "Projects and documentation sites that embed or reference OpenChainBench benchmark data in their products.", + }); +} diff --git a/src/app/perps/opengraph-image.tsx b/src/app/perps/opengraph-image.tsx new file mode 100644 index 00000000..186d421e --- /dev/null +++ b/src/app/perps/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Best perp DEX 2026. Live leaderboard of perpetual exchanges by volume, open interest, fees and funding."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Perp DEX leaderboard", + headline: "Best perp DEX, by the numbers.", + subline: + "Volume, open interest, all-in cost and funding rate across every major perpetual exchange. Updated continuously.", + }); +} diff --git a/src/app/prediction-markets/opengraph-image.tsx b/src/app/prediction-markets/opengraph-image.tsx new file mode 100644 index 00000000..b82b9a44 --- /dev/null +++ b/src/app/prediction-markets/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Prediction markets leaderboard 2026. Volume, resolution delay, API latency and data freshness across every major venue."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Prediction markets", + headline: "Prediction markets, ranked live.", + subline: + "Volume, resolution delay, API latency and data freshness across Polymarket, Kalshi and every other major venue.", + }); +} diff --git a/src/app/reports/opengraph-image.tsx b/src/app/reports/opengraph-image.tsx new file mode 100644 index 00000000..c43dbce9 --- /dev/null +++ b/src/app/reports/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "OpenChainBench reports. In-depth analysis of crypto infrastructure performance backed by live benchmark data."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Reports", + headline: "Deeper dives, same data.", + subline: + "In-depth analysis of crypto infrastructure performance, backed by live benchmark data and open methodology.", + }); +} diff --git a/src/app/rpc/opengraph-image.tsx b/src/app/rpc/opengraph-image.tsx new file mode 100644 index 00000000..6cddfe97 --- /dev/null +++ b/src/app/rpc/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Fastest RPC providers 2026, by chain and region. Live p50/p90/p99 latency and success rate."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "RPC benchmarks", + headline: "Fastest RPC, by chain and region.", + subline: + "p50/p90/p99 latency and success rate for every major RPC provider, probed every 60 seconds from US East, EU West and Singapore.", + }); +} diff --git a/src/app/team/opengraph-image.tsx b/src/app/team/opengraph-image.tsx new file mode 100644 index 00000000..5103abff --- /dev/null +++ b/src/app/team/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "OpenChainBench team. The people building open benchmarks for crypto infrastructure."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Team", + headline: "The people behind the bench.", + subline: + "Building open, reproducible benchmarks for crypto infrastructure. Community-run, no vendor funding.", + }); +} diff --git a/src/app/trading-apps/opengraph-image.tsx b/src/app/trading-apps/opengraph-image.tsx new file mode 100644 index 00000000..323b069c --- /dev/null +++ b/src/app/trading-apps/opengraph-image.tsx @@ -0,0 +1,15 @@ +import { OG_SIZE, renderHubOG } from "@/lib/og-hub-template"; + +export const runtime = "nodejs"; +export const alt = "Best Solana trading apps 2026. Live leaderboard ranked by volume, wallets, fees and app store ratings."; +export const size = OG_SIZE; +export const contentType = "image/png"; + +export default function OG() { + return renderHubOG({ + kicker: "Trading apps", + headline: "Best Solana trading app, live.", + subline: + "Volume, active wallets, fees and app store ratings across every major Solana trading venue. Benchmarks updated continuously.", + }); +}