Skip to content

Commit 333eb47

Browse files
committed
feat: add GitHub star badge to header
- Create GitHubStarBadge component with star count display - Add to SiteHeader right side (before theme toggle) - Style inspired by opencode.ai - clean, minimal badge - Shows 'GitHub [XXX]' or 'GitHub [X.XK]' format - Fetches real-time star count from GitHub API
1 parent 3780a60 commit 333eb47

File tree

3 files changed

+656
-1178
lines changed

3 files changed

+656
-1178
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
<script lang="ts">
2+
import { onMount } from 'svelte';
3+
4+
let starCount = $state(0);
5+
let loading = $state(true);
6+
7+
onMount(() => {
8+
fetch('https://api.github.com/repos/openbootdotdev/openboot')
9+
.then((r) => r.json())
10+
.then((data) => {
11+
if (data.stargazers_count) {
12+
starCount = data.stargazers_count;
13+
}
14+
loading = false;
15+
})
16+
.catch(() => {
17+
loading = false;
18+
});
19+
});
20+
21+
function formatStarCount(count: number): string {
22+
if (count >= 1000) {
23+
return `${(count / 1000).toFixed(1)}K`;
24+
}
25+
return count.toString();
26+
}
27+
</script>
28+
29+
<a
30+
href="https://github.com/openbootdotdev/openboot"
31+
class="github-star-badge"
32+
target="_blank"
33+
rel="noopener noreferrer"
34+
>
35+
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor">
36+
<path d="M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z" />
37+
</svg>
38+
<span>GitHub</span>
39+
{#if !loading && starCount > 0}
40+
<span class="star-count">[{formatStarCount(starCount)}]</span>
41+
{/if}
42+
</a>
43+
44+
<style>
45+
.github-star-badge {
46+
display: inline-flex;
47+
align-items: center;
48+
gap: 6px;
49+
padding: 6px 12px;
50+
color: var(--text-secondary);
51+
font-size: 0.9rem;
52+
font-weight: 500;
53+
text-decoration: none;
54+
border-radius: 8px;
55+
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
56+
background: transparent;
57+
border: 1px solid var(--border);
58+
}
59+
60+
.github-star-badge:hover {
61+
color: var(--text-primary);
62+
border-color: var(--accent);
63+
background: color-mix(in srgb, var(--accent) 5%, transparent);
64+
}
65+
66+
.github-star-badge svg {
67+
width: 16px;
68+
height: 16px;
69+
flex-shrink: 0;
70+
}
71+
72+
.star-count {
73+
font-family: 'JetBrains Mono', monospace;
74+
font-weight: 600;
75+
color: var(--accent);
76+
}
77+
</style>

src/lib/components/SiteHeader.svelte

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import { page } from '$app/stores';
33
import { auth } from '$lib/stores/auth';
44
import ThemeToggle from '$lib/components/ThemeToggle.svelte';
5+
import GitHubStarBadge from '$lib/components/GitHubStarBadge.svelte';
56
import type { Snippet } from 'svelte';
67
78
let { children }: { children?: Snippet } = $props();
@@ -18,6 +19,7 @@
1819
</nav>
1920
<div class="header-right">
2021
{#if children}{@render children()}{/if}
22+
<GitHubStarBadge />
2123
<ThemeToggle />
2224
{#if $auth.loading}
2325

0 commit comments

Comments
 (0)