From d08fedaccc73750e3f77297e1c136873c777fafc Mon Sep 17 00:00:00 2001 From: Adam <2363879+adamdotdevin@users.noreply.github.com> Date: Wed, 3 Jun 2026 10:53:07 -0500 Subject: [PATCH] fix(stats): serve stats og image from banner --- infra/stats.ts | 2 +- packages/console/app/src/lib/stats-proxy.ts | 2 +- packages/stats/app/public/banner.png | Bin 0 -> 10045 bytes .../stats/app/src/asset/unfurl-rankings.png | Bin 12791 -> 0 bytes packages/stats/app/src/routes/index.tsx | 17 ++++++++++++----- 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100644 packages/stats/app/public/banner.png delete mode 100644 packages/stats/app/src/asset/unfurl-rankings.png diff --git a/infra/stats.ts b/infra/stats.ts index 59dbb8d8a2..67387ee5a8 100644 --- a/infra/stats.ts +++ b/infra/stats.ts @@ -165,7 +165,7 @@ export const app = new sst.cloudflare.x.SolidStart("Stats", { domain: `stats.${domain}`, link: [database, EMAILOCTOPUS_API_KEY], environment: { - PUBLIC_URL: `https://stats.${domain}/stats`, + PUBLIC_URL: `https://${domain}/stats`, }, }) diff --git a/packages/console/app/src/lib/stats-proxy.ts b/packages/console/app/src/lib/stats-proxy.ts index 54b9893a5b..c8c576ddcf 100644 --- a/packages/console/app/src/lib/stats-proxy.ts +++ b/packages/console/app/src/lib/stats-proxy.ts @@ -8,7 +8,7 @@ export async function statsProxy(evt: APIEvent) { targetUrl.hostname = Resource.App.stage === "production" ? "stats.opencode.ai" : "stats.dev.opencode.ai" targetUrl.port = "" - if (targetUrl.pathname.startsWith("/stats/_build/")) { + if (targetUrl.pathname.startsWith("/stats/_build/") || targetUrl.pathname === "/stats/banner.png") { targetUrl.pathname = targetUrl.pathname.slice("/stats".length) } diff --git a/packages/stats/app/public/banner.png b/packages/stats/app/public/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..57579c32aa59fd8779fe6f7921f0fca248c5971c GIT binary patch literal 10045 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 XUtlTR`%R`tvToS&2P={-wm{R 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 diff --git a/packages/stats/app/src/routes/index.tsx b/packages/stats/app/src/routes/index.tsx index 97763c2326..3353fe8508 100644 --- a/packages/stats/app/src/routes/index.tsx +++ b/packages/stats/app/src/routes/index.tsx @@ -11,7 +11,6 @@ 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 CacheRatioEntry, @@ -42,7 +41,8 @@ const rangeLabels: Record = { } const statsHomeTitle = "OpenCode Stats" const statsHomeDescription = "OpenCode usage, market share, token cost, and session cost stats." -const statsHomeFallbackUrl = "https://stats.opencode.ai" +const statsHomeFallbackUrl = "https://opencode.ai/stats/" +const statsUnfurlPath = "banner.png" const statsUnfurlAlt = "OpenCode Stats wordmark on a dark patterned background" const headerLinks = [ { href: "#top-models", label: "Top Models" }, @@ -147,11 +147,11 @@ const getGitHubStars = query(async () => { export default function StatsHome() { const event = getRequestEvent() event?.response.headers.set("Cache-Control", "public, max-age=60, s-maxage=300, stale-while-revalidate=86400") - const statsHomeUrl = new URL( + const statsHomeUrl = getStatsHomeUrl( import.meta.env.BASE_URL, event?.request.url ?? (typeof window === "undefined" ? statsHomeFallbackUrl : window.location.href), - ).toString() - const statsUnfurlUrl = new URL(statsUnfurlRankings, statsHomeUrl).toString() + ) + const statsUnfurlUrl = new URL(statsUnfurlPath, statsHomeUrl).toString() const data = createAsync(() => getData()) const githubStars = createAsync(() => getGitHubStars()) const [themePreference, setThemePreference] = createSignal("system") @@ -217,6 +217,13 @@ export default function StatsHome() { ) } +function getStatsHomeUrl(base: string, requestUrl: string) { + const url = new URL(base, requestUrl) + if (url.hostname === "stats.opencode.ai") return "https://opencode.ai/stats/" + if (url.hostname === "stats.dev.opencode.ai") return "https://dev.opencode.ai/stats/" + return url.toString() +} + function isThemePreference(value: string | null): value is ThemePreference { return value === "dark" || value === "light" || value === "system" }