Skip to content

feat: badge redesign + chain x region scoping, per-chain bench pages - #378

Merged
Flotapponnier merged 9 commits into
devfrom
feat/per-chain-bench-pages
Jun 10, 2026
Merged

feat: badge redesign + chain x region scoping, per-chain bench pages#378
Flotapponnier merged 9 commits into
devfrom
feat/per-chain-bench-pages

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

Summary

Test plan

  • tsc, bun test (38 pass), validate-specs (25 valid)
  • Badge SVG rendered and verified locally
  • Verify spinning badge + scoped ranks on staging after merge

Addresses the Mobula conflict-of-interest gap flagged in external SEO
audits and required for the 'neutral methodology arbiter' positioning.
New section iii on the About page declares:
- Mobula funds the project + why
- Mobula competes in 5 benchmarks and leads 2 (made explicit above the fold)
- Three safeguards: open Prometheus data, open harness source, public
methodology review (with the Coinpaprika story as the live example)
- No paid tier, no sponsored slots, no token policy
- Hosting funding source
E-E-A-T signal: makes the conflict legible, links the recent methodology
review PRs (#349, #352, #353), and gives Search Console / AI citation
engines a concrete reason to treat the bench as authoritative.
…ards
Providers who clear the rank-1 threshold see embed-ready badge cards on
their /products/[slug] page. Today it surfaces an SVG preview plus an
HTML copy block. This adds two more ship-helpers:
- 'Share on X' link with a pre-baked tweet intent. Opens X with the
ranking claim, the bench URL and the @OpenChainBench tag pre-filled.
Removes the friction of having to write the post; anchors every share
back to us as a tagged tweet that the provider's followers will see.
- 'Copy Markdown' details block for GitHub READMEs and docs. The
markdown form ![alt](badgeUrl) is what 80% of crypto provider docs
use, second only to HTML in landing pages.
Both reuse the existing /api/badge/<bench>/<provider> dynamic SVG so
the displayed rank always reflects the live leaderboard.
…of chains
Closes the misleading-badge bug: a provider with a global aggregate #1
on a chain-dimensioned bench (like dRPC #1 cross-region on
rpc-capabilities) was getting an unscoped 'Ranked #1 on Fastest free
public RPC' badge even when they only led the rankings on a subset of
chains. Embedders broadcasting that badge would parrot an inaccurate
claim and torch the bench's neutrality positioning the first time a
competitor diffed the per-chain ranks.
New logic in /products/[slug] Embeddable badges section:
- Benches without chainDimensions: keep one global aggregate badge
per #1 finish (unchanged behavior).
- Benches with chainDimensions where the provider leads on every
declared chain: still one global badge. A true cross-chain leader
earns the unscoped claim.
- Benches with chainDimensions where the provider leads on a
subset only: drop the global badge entirely, emit one badge PER
chain led using the existing ?chain= query param. Each card's
title, alt text, HTML / Markdown snippets and X intent tweet
include the chain label so the claim downstream is honest.
The /api/badge/[slug]/[provider]?chain=<chain> endpoint already
supported the per-chain rank computation. This PR just stops the
product page from generating the misleading unscoped URL when a
chain-restricted leader exists.
One grouped Prom query per bench feeds full per-cell rankings. Badges
collapse to global / per-chain / per-region / per-cell scopes so a
region-restricted leader (dRPC winning only from Singapore) can no
longer claim an unscoped or chain-wide #1. Badge API gains ?region=
and combined ?chain=&region= scoping.
@Flotapponnier

Copy link
Copy Markdown
CollaboratorAuthor

Added in ce5175b + 0fd57a9: dedicated per-chain SEO landing pages.

  • New route /benchmarks/[slug]/[chain], self-canonical, gated on per_chain_explainer entries (10 pages live on l1-finality).
  • Each page: dated citable key-facts line, explainer body, cross-chain comparison list linking sibling pages, TechArticle JSON-LD + 4-level breadcrumb.
  • Sitemap: dropped the ?chain= query URLs (canonicalized to parent = "Duplicate, Google chose different canonical" in GSC), now emits the chain routes instead.
  • Parent bench per-chain H2s link to the child pages.
  • Unresolved {{p50:slug}} tokens degrade to "measured live" instead of leaking into meta tags.

Staging checks: /benchmarks/l1-finality/ethereum (canonical + live numbers, no {{), sitemap has no ?chain=, /benchmarks/l1-finality/share-card still resolves, unknown chain 404s.

@Flotapponnier
Flotapponnier merged commit a01c3b3 into devJun 10, 2026
@Flotapponnier

Copy link
Copy Markdown
CollaboratorAuthor

V2 in 4a1637b: per-chain pages now support dimension-shaped benches (chain as filter, providers as rows), with regional honesty.

  • /benchmarks/rpc-capabilities/<chain> live for all 10 EVM chains (10 hand-written explainers in the YAML, leader placeholders resolve via bestPerChain, never the cross-chain aggregate).
  • Key facts line calls out regional divergence explicitly, e.g. measured on dev: "dRPC leads Ethereum RPC latency at 23 ms... Regional leaders differ: Tenderly in US-East and EU-West; dRPC in Singapore." A provider winning a subset of chains/regions is never crowned globally.
  • Per-chain provider leaderboard (links to /products/*) + "Leader by region" section + sibling chain nav.
  • Parent bench page gets a "Per-chain breakdowns" nav for dimension benches (row benches already link via ChainHeadingsSummary).
  • Sitemap: +10 rpc-capabilities chain routes (20 total chain pages).

Staging checks to add: /benchmarks/rpc-capabilities/ethereum shows live leaderboard + region section, parent page shows the breakdowns nav (hidden if bench collapses to draft).

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@Flotapponnier