diff --git a/src/app/compare/[slug]/page.tsx b/src/app/compare/[slug]/page.tsx index 72de9fb0..3dfc0ae9 100644 --- a/src/app/compare/[slug]/page.tsx +++ b/src/app/compare/[slug]/page.tsx @@ -372,13 +372,13 @@ function buildComparisonProse( const parts: string[] = []; if (aWinTitles.length === 0) { - const word = total === 1 ? "the only live benchmark" : `all ${total} live benchmarks`; + const word = total === 1 ? "the only live benchmark" : total === 2 ? "both live benchmarks" : `all ${total} live benchmarks`; parts.push(`${bName} leads on ${word}.`); } else if (bWinTitles.length === 0) { - const word = total === 1 ? "the only live benchmark" : `all ${total} live benchmarks`; + const word = total === 1 ? "the only live benchmark" : total === 2 ? "both live benchmarks" : `all ${total} live benchmarks`; parts.push(`${aName} leads on ${word}.`); } else if (aWinTitles.length === bWinTitles.length) { - parts.push(`Split: ${aName} leads on ${aWinTitles.slice(0, 2).join(", ")}; ${bName} leads on ${bWinTitles.slice(0, 2).join(", ")}.`); + parts.push(`Split decision: ${aName} leads on ${aWinTitles.slice(0, 2).join(", ")}; ${bName} leads on ${bWinTitles.slice(0, 2).join(", ")}.`); } else { parts.push( `${aName} leads on ${aWinTitles.length} of ${total} shared benchmarks, ${bName} on ${bWinTitles.length}${ties > 0 ? ` (${ties} tied)` : ""}.`, @@ -819,14 +819,14 @@ export default async function ComparePage({ if (aWinsBench) { const st = shortBenchTitle(aWinsBench.title); faqEntries.push({ - q: `Which is ${verbForBench(aWinsBench)} on ${st}, ${a.name} or ${b.name}?`, + q: `Which is ${verbForBench(aWinsBench)}, ${a.name} or ${b.name}?`, a: `On the ${st} benchmark, ${a.name} leads at ${fmtUnit(aWinsBench.aResult.p50, aWinsBench.unit)} versus ${b.name} at ${fmtUnit(aWinsBench.bResult.p50, aWinsBench.unit)}. Live measurement is updated continuously by the OpenChainBench harness.`, }); } if (bWinsBench) { const st = shortBenchTitle(bWinsBench.title); faqEntries.push({ - q: `Which is ${verbForBench(bWinsBench)} on ${st}, ${a.name} or ${b.name}?`, + q: `Which is ${verbForBench(bWinsBench)}, ${a.name} or ${b.name}?`, a: `On the ${st} benchmark, ${b.name} leads at ${fmtUnit(bWinsBench.bResult.p50, bWinsBench.unit)} versus ${a.name} at ${fmtUnit(bWinsBench.aResult.p50, bWinsBench.unit)}. Live measurement is updated continuously by the OpenChainBench harness.`, }); } diff --git a/src/components/compare-bench-card.tsx b/src/components/compare-bench-card.tsx index d88595ce..a107fb49 100644 --- a/src/components/compare-bench-card.tsx +++ b/src/components/compare-bench-card.tsx @@ -197,10 +197,20 @@ function ScopeTable({ {(["a", "b"] as const).map((side) => { const name = side === "a" ? aName : bName; + const sampleSize = side === "a" ? (bench.aResult?.sampleSize ?? 0) : (bench.bResult?.sampleSize ?? 0); + const provisional = sampleSize > 0 && sampleSize < 100; return ( {name} + {provisional && ( + + provisional + + )} {cols.map((c) => { const val = side === "a" ? c.aValue : c.bValue; diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index db4e82de..82245ea6 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -1226,13 +1226,13 @@ export const PROVIDER_REGISTRY: Record = { fomo: { url: "https://fomo.family", description: - "FOMO is a multi-chain trading app (Solana, Base, BNB Chain) for memecoins and perps. It provides social copy-trading, onchain signals, and routes swaps through pump.fun, Raydium, and other DEX pools. Backed by Index Ventures and USV.", + "FOMO is a multi-chain trading app (Solana, Base, BNB Chain, and more) for memecoins and perps. It provides social copy-trading, onchain signals, and routes swaps through pump.fun, Raydium, and other DEX pools.", twitter: "@tryfomo", }, "pump-fun": { url: "https://pump.fun", description: - "pump.fun is the leading Solana memecoin launchpad. Tokens start on a bonding curve and graduate to PumpSwap (pump.fun's native AMM, launched March 2025) when the curve completes. The platform charges a 1% fee on every buy and sell on the bonding curve.", + "pump.fun is the leading Solana memecoin launchpad. Tokens start on a bonding curve and graduate to PumpSwap (pump.fun's native AMM, launched March 2025) when the curve completes.", twitter: "@pumpdotfun", }, pumpswap: {