diff --git a/public/logos/vntl.png b/public/logos/vntl.png new file mode 100644 index 00000000..f3ab2e10 Binary files /dev/null and b/public/logos/vntl.png differ diff --git a/public/logos/xyz.png b/public/logos/xyz.png new file mode 100644 index 00000000..39e2ad50 Binary files /dev/null and b/public/logos/xyz.png differ diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 056a400e..fff356d3 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -92,6 +92,7 @@ export default async function sitemap(): Promise { { url: `${SITE.url}/contribute`, lastModified: pageMtime("contribute/page.tsx"), changeFrequency: "monthly", priority: 0.7 }, { url: `${SITE.url}/about`, lastModified: pageMtime("about/page.tsx"), changeFrequency: "monthly", priority: 0.5 }, { url: `${SITE.url}/press`, lastModified: pageMtime("press/page.tsx"), changeFrequency: "monthly", priority: 0.4 }, + { url: `${SITE.url}/compare`, lastModified: pageMtime("compare/page.tsx"), changeFrequency: "weekly", priority: 0.6 }, ]; // Bench routes. The hub URL is the canonical entry and ranks highest. @@ -138,12 +139,18 @@ export default async function sitemap(): Promise { priority: 0.85, })); - const alternativeRoutes: MetadataRoute.Sitemap = alternatives.map((alt) => ({ - url: `${SITE.url}/alternatives/${alt.slug}`, - lastModified: alternativeLastRun.get(alt.slug) ?? catalogLastRun, - changeFrequency: "daily", - priority: 0.85, - })); + // Only list alternatives whose parent bench exists on this branch. Some + // benches are deliberately held out of main (deleted YAMLs, 410 route), + // and /alternatives/ 404s when its bench is missing — emitting the + // URL anyway feeds Google a sitemap entry that dead-ends. + const alternativeRoutes: MetadataRoute.Sitemap = alternatives + .filter((alt) => benchBySlug.has(alt.benchmark)) + .map((alt) => ({ + url: `${SITE.url}/alternatives/${alt.slug}`, + lastModified: alternativeLastRun.get(alt.slug) ?? catalogLastRun, + changeFrequency: "daily", + priority: 0.85, + })); // Head-to-head compare pages. Each pair pins one or more parent benches; // we take the most recent lastRunAt across pinned benches as the lastmod. diff --git a/src/data/provider-registry.ts b/src/data/provider-registry.ts index 1bd2810f..0d39c24d 100644 --- a/src/data/provider-registry.ts +++ b/src/data/provider-registry.ts @@ -1019,6 +1019,32 @@ export const PROVIDER_REGISTRY: Record = { "High-performance spot and perpetuals exchange with colocated low-latency fiber and independently verifiable sequencing. Routes Hyperliquid perp orders via a registered builder code.", twitter: "@Blink_Exchange", }, + + // ─── Hyperliquid HIP-3 deployers (bench № 035) ───────────────────── + xyz: { + url: "https://trade.xyz", + description: + "trade.xyz operates the largest HIP-3 builder-deployed dex on Hyperliquid: 70+ tokenized US equity, index, and commodity perp markets under the xyz namespace, collecting a deployer fee on every fill.", + chains: ["hyperliquid"], + features: [ + "Tokenized US equity perps (AAPL, TSLA, NVDA and 70+ markets)", + "Index and commodity perpetuals", + "HIP-3 namespace xyz on HyperCore", + "Deployer fee collected via the on-chain deployerFee field", + ], + }, + vntl: { + url: "https://ventuals.com", + description: + "Ventuals runs pre-IPO valuation perpetuals on Hyperliquid under the vntl HIP-3 namespace: traders price private company valuations (MAG7-style baskets and single names) rather than listed stock.", + twitter: "@ventuals", + chains: ["hyperliquid"], + features: [ + "Pre-IPO valuation perpetual markets", + "HIP-3 namespace vntl on HyperCore", + "Deployer fee collected via the on-chain deployerFee field", + ], + }, }; /** diff --git a/src/lib/logo-manifest.ts b/src/lib/logo-manifest.ts index 638f3fd5..281ecf33 100644 --- a/src/lib/logo-manifest.ts +++ b/src/lib/logo-manifest.ts @@ -156,6 +156,10 @@ const RAW: Record = { dexari: "/logos/dexari.png", okto: "/logos/okto.png", + // ─── Hyperliquid HIP-3 deployers (bench № 035) ─── + xyz: "/logos/xyz.png", + vntl: "/logos/vntl.png", + // ─── Hyperliquid frontends registry expansion (8 → 60) ─── "trust-wallet": "/logos/trust-wallet.png", sushi: "/logos/sushi.png",