feat(ui): show GitHub stars

This commit is contained in:
Shantur Rathore
2026-01-25 00:21:06 +00:00
parent 8fa0175b98
commit bb4e3815d1
4 changed files with 93 additions and 1 deletions

View File

@@ -0,0 +1,54 @@
import { createSignal } from "solid-js"
import { getLogger } from "../lib/logger"
const log = getLogger("api")
const STORAGE_KEY = "codenomad:github:stars"
const REPO_API_URL = "https://api.github.com/repos/NeuralNomadsAI/CodeNomad"
function readStoredStars(): number | null {
if (typeof window === "undefined") return null
const raw = window.localStorage.getItem(STORAGE_KEY)
if (!raw) return null
const value = Number(raw)
if (!Number.isFinite(value) || value < 0) return null
return Math.floor(value)
}
function storeStars(value: number): void {
if (typeof window === "undefined") return
window.localStorage.setItem(STORAGE_KEY, String(value))
}
const [githubStars, setGithubStars] = createSignal<number | null>(readStoredStars())
let initialized = false
export async function initGithubStars(): Promise<void> {
if (initialized) return
initialized = true
try {
const response = await fetch(REPO_API_URL, {
headers: {
Accept: "application/vnd.github+json",
},
})
if (!response.ok) {
throw new Error(`GitHub API returned ${response.status}`)
}
const data = (await response.json()) as { stargazers_count?: unknown }
const next = typeof data.stargazers_count === "number" ? data.stargazers_count : null
if (next === null || !Number.isFinite(next) || next < 0) {
return
}
const normalized = Math.floor(next)
setGithubStars(normalized)
storeStars(normalized)
} catch (error) {
log.warn("Failed to fetch GitHub stars", error)
}
}
export { githubStars }