From 46836beec9e03ae87a8e04e53dc9fb4948a0f31d Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Fri, 29 May 2026 08:02:00 -0500
Subject: [PATCH] fix(stats): add social unfurl metadata (#29892)
---
packages/stats/app/src/app.tsx | 4 +-
.../stats/app/src/asset/unfurl-rankings.png | Bin 0 -> 12791 bytes
packages/stats/app/src/routes/index.tsx | 36 +++++++++++++++---
3 files changed, 32 insertions(+), 8 deletions(-)
create mode 100644 packages/stats/app/src/asset/unfurl-rankings.png
diff --git a/packages/stats/app/src/app.tsx b/packages/stats/app/src/app.tsx
index 976633f295..1d46cb782f 100644
--- a/packages/stats/app/src/app.tsx
+++ b/packages/stats/app/src/app.tsx
@@ -7,8 +7,8 @@ import "./app.css"
function AppMeta() {
return (
<>
-
opencode stats
-
+ OpenCode Stats
+
>
)
}
diff --git a/packages/stats/app/src/asset/unfurl-rankings.png b/packages/stats/app/src/asset/unfurl-rankings.png
new file mode 100644
index 0000000000000000000000000000000000000000..872cb6073dc6155763f39e9f281286c218752558
GIT binary patch
literal 12791
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
literal 0
HcmV?d00001
diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx
index a3573278ae..3590472106 100644
--- a/packages/stats/app/src/routes/index.tsx
+++ b/packages/stats/app/src/routes/index.tsx
@@ -6,6 +6,7 @@ import ibmPlexMonoMediumLatin1 from "@ibm/plex/IBM-Plex-Mono/fonts/split/woff2/I
import ibmPlexMonoSemiBoldLatin1 from "@ibm/plex/IBM-Plex-Mono/fonts/split/woff2/IBMPlexMono-SemiBold-Latin1.woff2?url"
import ibmPlexMonoBoldLatin1 from "@ibm/plex/IBM-Plex-Mono/fonts/split/woff2/IBMPlexMono-Bold-Latin1.woff2?url"
import opencodeWordmarkDark from "../asset/logo-ornate-dark.svg"
+import statsUnfurlRankings from "../asset/unfurl-rankings.png?url"
import {
getStatsHomeData,
type LeaderboardEntry,
@@ -30,6 +31,10 @@ const rangeLabels: Record = {
"1M": "1 Month",
"2M": "2 Months",
}
+const statsHomeTitle = "OpenCode Stats"
+const statsHomeDescription = "OpenCode usage, market share, token cost, and session cost stats."
+const statsHomeFallbackUrl = "https://stats.opencode.ai"
+const statsUnfurlAlt = "OpenCode Stats wordmark on a dark patterned background"
const headerLinks = [
{ href: "#top-models", label: "Top Models" },
{ href: "#leaderboard", label: "Leaderboard" },
@@ -90,17 +95,36 @@ const getGitHubStars = query(async () => {
}, "getGitHubStars")
export default function StatsHome() {
- getRequestEvent()?.response.headers.set(
- "Cache-Control",
- "public, max-age=60, s-maxage=300, stale-while-revalidate=86400",
- )
+ const event = getRequestEvent()
+ event?.response.headers.set("Cache-Control", "public, max-age=60, s-maxage=300, stale-while-revalidate=86400")
+ const statsHomeUrl = new URL(
+ import.meta.env.BASE_URL,
+ event?.request.url ?? (typeof window === "undefined" ? statsHomeFallbackUrl : window.location.href),
+ ).toString()
+ const statsUnfurlUrl = new URL(statsUnfurlRankings, statsHomeUrl).toString()
const data = createAsync(() => getData())
const githubStars = createAsync(() => getGitHubStars())
return (
- OpenCode Stats
-
+ {statsHomeTitle}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+