mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-31 05:15:32 +00:00
Add live GitHub star count to stats page
This commit is contained in:
parent
fb6275e04a
commit
dc28b82394
1 changed files with 40 additions and 9 deletions
|
|
@ -37,6 +37,17 @@ const headerLinks = [
|
|||
{ href: "#token-cost", label: "Token Cost" },
|
||||
{ href: "#session-cost", label: "Session Cost" },
|
||||
] as const
|
||||
const githubLink = {
|
||||
href: "https://github.com/anomalyco/opencode",
|
||||
apiHref: "https://api.github.com/repos/anomalyco/opencode",
|
||||
label: "GitHub",
|
||||
fallbackStars: "150K",
|
||||
ariaLabel: "Star OpenCode on GitHub",
|
||||
}
|
||||
const compactNumberFormatter = new Intl.NumberFormat("en", {
|
||||
notation: "compact",
|
||||
maximumFractionDigits: 1,
|
||||
})
|
||||
const usageColors = [
|
||||
"#ed6aff",
|
||||
"#a684ff",
|
||||
|
|
@ -61,12 +72,30 @@ const getData = query(async () => {
|
|||
return runtime.runPromise(getStatsHomeData())
|
||||
}, "getStatsHomeData")
|
||||
|
||||
const getGitHubStars = query(async () => {
|
||||
"use server"
|
||||
return fetch(githubLink.apiHref, {
|
||||
headers: {
|
||||
Accept: "application/vnd.github+json",
|
||||
"X-GitHub-Api-Version": "2022-11-28",
|
||||
},
|
||||
})
|
||||
.then((response) => (response.ok ? response.json() : undefined))
|
||||
.then((body: unknown) =>
|
||||
body && typeof body === "object" && "stargazers_count" in body && typeof body.stargazers_count === "number"
|
||||
? compactNumberFormatter.format(body.stargazers_count)
|
||||
: githubLink.fallbackStars,
|
||||
)
|
||||
.catch(() => githubLink.fallbackStars)
|
||||
}, "getGitHubStars")
|
||||
|
||||
export default function StatsHome() {
|
||||
getRequestEvent()?.response.headers.set(
|
||||
"Cache-Control",
|
||||
"public, max-age=60, s-maxage=300, stale-while-revalidate=86400",
|
||||
)
|
||||
const data = createAsync(() => getData())
|
||||
const githubStars = createAsync(() => getGitHubStars())
|
||||
|
||||
return (
|
||||
<main data-page="stats">
|
||||
|
|
@ -76,7 +105,7 @@ export default function StatsHome() {
|
|||
<Link rel="preload" href={ibmPlexMonoMediumLatin1} as="font" type="font/woff2" crossorigin="anonymous" />
|
||||
<Link rel="preload" href={ibmPlexMonoSemiBoldLatin1} as="font" type="font/woff2" crossorigin="anonymous" />
|
||||
<Link rel="preload" href={ibmPlexMonoBoldLatin1} as="font" type="font/woff2" crossorigin="anonymous" />
|
||||
<Header />
|
||||
<Header githubStars={githubStars() ?? githubLink.fallbackStars} />
|
||||
<div data-component="container">
|
||||
<div data-component="content">
|
||||
<Show when={data()} fallback={<StatsLoading />}>
|
||||
|
|
@ -1211,7 +1240,7 @@ function formatSessionCost(value: number) {
|
|||
return `$${value.toFixed(4)}`
|
||||
}
|
||||
|
||||
function Header() {
|
||||
function Header(props: { githubStars: string }) {
|
||||
const [menuOpen, setMenuOpen] = createSignal(false)
|
||||
const [menuViewport, setMenuViewport] = createSignal(false)
|
||||
|
||||
|
|
@ -1264,12 +1293,13 @@ function Header() {
|
|||
<a
|
||||
data-slot="header-button"
|
||||
data-variant="neutral"
|
||||
href="https://github.com/sst/opencode"
|
||||
href={githubLink.href}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
aria-label={`${githubLink.ariaLabel} (${props.githubStars} stars)`}
|
||||
>
|
||||
<strong>GitHub</strong>
|
||||
<span>[150K]</span>
|
||||
<strong>{githubLink.label}</strong>
|
||||
<span>[{props.githubStars}]</span>
|
||||
</a>
|
||||
<a data-slot="header-button" data-variant="contrast" href="https://opencode.ai/">
|
||||
<strong>Try OpenCode</strong>
|
||||
|
|
@ -1294,12 +1324,13 @@ function Header() {
|
|||
<a
|
||||
data-slot="mobile-menu-item"
|
||||
data-variant="github"
|
||||
href="https://github.com/sst/opencode"
|
||||
href={githubLink.href}
|
||||
target="_blank"
|
||||
rel="noreferrer"
|
||||
aria-label={`${githubLink.ariaLabel} (${props.githubStars} stars)`}
|
||||
>
|
||||
<strong>GitHub</strong>
|
||||
<span>[150K]</span>
|
||||
<strong>{githubLink.label}</strong>
|
||||
<span>[{props.githubStars}]</span>
|
||||
</a>
|
||||
<For each={headerLinks}>
|
||||
{(link) => (
|
||||
|
|
@ -1379,7 +1410,7 @@ function Footer() {
|
|||
{ href: "mailto:hello@opencode.ai", label: "Contact us" },
|
||||
{ href: "https://opencode.ai/discord", label: "Community" },
|
||||
{ href: "https://x.com/opencode", label: "X" },
|
||||
{ href: "https://github.com/anomalyco/opencode", label: "GitHub" },
|
||||
githubLink,
|
||||
{ href: "https://www.youtube.com/@anomaly-co", label: "YouTube" },
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue