+ {{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core
+ packages. These are the busiest, by number of commits.
+
+ Collected from the GitHub, Zulip, Bluesky, PePy and OpenAlex APIs by
+ scverse/stats. Contribution counts come from the core
+ repositories only, so they undercount anyone whose work lives in an ecosystem package.
+
+
+
+{{ end }}
From dffeb42866324c63a2ad7e79288f8c8251746769 Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 12:10:16 +0200
Subject: [PATCH 2/7] Colour the contribution bars and shorten the nav label
A dark neutral bar disappears under extensions that invert the page, so
use the blue from the Join button gradient. It is the only site hue
besides the cerise that clears 3:1 against the page, checked rather than
eyeballed.
"scverse in numbers" stays as the page title, but the menu entry reads
Statistics.
---
assets/main.scss | 4 +++-
layouts/partials/header.html | 2 +-
2 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/assets/main.scss b/assets/main.scss
index b09864b..9f71d1b 100644
--- a/assets/main.scss
+++ b/assets/main.scss
@@ -19,6 +19,7 @@ $spatialdatablue: #40a9ff;
$squidpyviolet: #969dea;
$scirpypurple: #da347f;
$scviyellow: #fbb822;
+$scversedeepblue: #262fb5; // the darker end of the Join button gradient
$github-black: #171b21;
$twitter-blue: #469be5;
@@ -1138,7 +1139,8 @@ body {
> span {
display: block;
height: 100%;
- background-color: $tiletext;
+ // A hue rather than a dark neutral, so extensions that invert the page keep the bar visible
+ background-color: $scversedeepblue;
border-radius: 0.25rem;
}
}
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
index f40bdcc..792e35b 100644
--- a/layouts/partials/header.html
+++ b/layouts/partials/header.html
@@ -119,7 +119,7 @@
AI Policy
Media kit
From b7b0aee6429055c7f18e0341537c419cfb87c3c2 Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 13:07:04 +0200
Subject: [PATCH 3/7] Make the tiles that lead somewhere clickable, and drop
the Impact group
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Tiles with a destination are anchors and pick up the hover the rest of
the site uses — background shift plus a small scale. Only eight of the
thirteen link: a tile links out where the destination shows the same
number, so Zulip, Bluesky, the org people page, /people, the two
packages sections and the org page do, while the pull request and issue
counts do not, since a GitHub search covers all 99 org repos and these
numbers cover 12.
Issues move in with the packages, citations join the community, and the
daily download average goes back under the headline figure, which leaves
two groups instead of three and nothing stranded.
---
assets/main.scss | 20 ++++++++++++++++++
layouts/stats/list.html | 47 +++++++++++++++++++++++------------------
2 files changed, 47 insertions(+), 20 deletions(-)
diff --git a/assets/main.scss b/assets/main.scss
index 9f71d1b..d8f684a 100644
--- a/assets/main.scss
+++ b/assets/main.scss
@@ -1097,6 +1097,26 @@ body {
}
}
+ // Only tiles that lead somewhere get the affordance
+ a.stats-tile {
+ text-decoration: none;
+ transition: all 200ms ease-in-out;
+
+ &:hover,
+ &:focus-visible {
+ background-color: $tilebg;
+ border-color: $tilebg2;
+ transform: scale(1.02);
+
+ .stats-tile-value {
+ color: black;
+ }
+ .stats-tile-label {
+ color: $tiletext;
+ }
+ }
+ }
+
.stats-contributors {
display: grid;
gap: 0.15rem;
diff --git a/layouts/stats/list.html b/layouts/stats/list.html
index 2a55131..ab3184f 100644
--- a/layouts/stats/list.html
+++ b/layouts/stats/list.html
@@ -24,33 +24,29 @@
{{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core
packages. These are the busiest, by number of commits.
From a4ee2c1751810e04691f85178ed8ca5f816e84fa Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 13:15:36 +0200
Subject: [PATCH 4/7] Show LinkedIn followers when the registry has them
scverse/stats#9 adds the field. It is scraped from the logged-out
company page, so a run that gets blocked will not have it, and the tile
is behind a `with` rather than assuming it is there.
---
layouts/stats/list.html | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/layouts/stats/list.html b/layouts/stats/list.html
index ab3184f..b923552 100644
--- a/layouts/stats/list.html
+++ b/layouts/stats/list.html
@@ -25,12 +25,19 @@
{{ .Title }}
{{/* A tile only gets a link where the destination genuinely shows the same number. */}}
+ {{/* LinkedIn is scraped upstream, so any given run may not have it. */}}
+ {{ $social := slice
+ (dict "value" $stats.zulip_users "label" "Zulip members" "url" "https://scverse.zulipchat.com/")
+ (dict "value" $stats.bluesky_followers "label" "Bluesky followers" "url" "https://bsky.app/profile/scverse.bsky.social")
+ }}
+ {{ with $stats.linkedin_followers }}
+ {{ $social = $social | append (dict "value" . "label" "LinkedIn followers" "url" "https://www.linkedin.com/company/scverse/") }}
+ {{ end }}
+
{{ $groups := slice
(dict
"name" "Community"
- "tiles" (slice
- (dict "value" $stats.zulip_users "label" "Zulip members" "url" "https://scverse.zulipchat.com/")
- (dict "value" $stats.bluesky_followers "label" "Bluesky followers" "url" "https://bsky.app/profile/scverse.bsky.social")
+ "tiles" ($social | append
(dict "value" $gh.unique_contributors "label" "code contributors" "url" "#contributors")
(dict "value" $gh.organization_members "label" "GitHub organisation members" "url" "https://github.com/orgs/scverse/people")
(dict "value" $stats.core_team_size "label" "core team members" "url" "/people")
@@ -103,7 +110,7 @@
Top contributors
- Collected from the GitHub, Zulip, Bluesky, PePy and OpenAlex APIs by
+ Collected from the GitHub, Zulip, Bluesky, LinkedIn, PePy and OpenAlex sources by
scverse/stats. Contribution counts come from the core
repositories only, so they undercount anyone whose work lives in an ecosystem package.
From 4b5496c00485a1c76881c707a4f0df30e91c9a40 Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 13:36:50 +0200
Subject: [PATCH 5/7] Pair citations with the download figure, expand the
contributor list
Citations sat awkwardly among the community tiles; they belong next to
downloads, so the two impact numbers now share the headline row with the
citation count set smaller.
The remaining contributors go behind a details element rather than a
count of people you cannot see. It needs no JavaScript, and the avatars
in it are not fetched until it is opened.
Drop the sources footnote: the intro already credits scverse/stats, and
the contributor paragraph already says the counts are core-only.
---
assets/main.scss | 53 +++++++++++++++++++------
layouts/partials/stats-contributor.html | 12 ++++++
layouts/stats/list.html | 52 ++++++++++++------------
3 files changed, 80 insertions(+), 37 deletions(-)
create mode 100644 layouts/partials/stats-contributor.html
diff --git a/assets/main.scss b/assets/main.scss
index d8f684a..131e6a6 100644
--- a/assets/main.scss
+++ b/assets/main.scss
@@ -1044,10 +1044,31 @@ body {
// The one number the page leads with
.stats-hero {
display: flex;
- flex-direction: column;
- gap: 0.35rem;
+ flex-wrap: wrap;
+ align-items: baseline;
+ gap: 1rem 3.5rem;
margin: 2.5rem 0 1rem;
+ .stats-hero-figure {
+ display: flex;
+ flex-direction: column;
+ gap: 0.35rem;
+ }
+ .stats-hero-figure--second {
+ padding-left: 3.5rem;
+ border-left: 1px solid $overline;
+
+ .stats-hero-value {
+ font-size: 2.75rem;
+ }
+ }
+ @media (max-width: 50rem) {
+ .stats-hero-figure--second {
+ padding-left: 0;
+ border-left: 0;
+ }
+ }
+
.stats-hero-value {
font-size: 4.5rem;
font-weight: 800;
@@ -1158,6 +1179,7 @@ body {
> span {
display: block;
+ min-width: 0.15rem;
height: 100%;
// A hue rather than a dark neutral, so extensions that invert the page keep the bar visible
background-color: $scversedeepblue;
@@ -1180,17 +1202,24 @@ body {
}
}
- .stats-more {
- margin: 0 0 0 0.5rem;
- font-size: 0.85rem;
- color: $greydesc;
- }
+ .stats-rest {
+ summary {
+ width: fit-content;
+ padding: 0.35rem 0.5rem;
+ font-size: 0.9rem;
+ color: $tiletext2;
+ border-radius: 0.5rem;
+ cursor: pointer;
+ transition: all 200ms ease-in-out;
- .stats-source {
- margin-top: 2.5rem;
- font-size: 0.85rem;
- line-height: 1.6;
- color: $greydesc;
+ &:hover {
+ color: black;
+ background-color: $tilebg4;
+ }
+ }
+ &[open] summary {
+ margin-bottom: 0.5rem;
+ }
}
}
diff --git a/layouts/partials/stats-contributor.html b/layouts/partials/stats-contributor.html
new file mode 100644
index 0000000..6722a0d
--- /dev/null
+++ b/layouts/partials/stats-contributor.html
@@ -0,0 +1,12 @@
+{{ $person := .person }}
+{{ $most := .most }}
+
{{/* The one number the page leads with. Everything else is a tile. */}}
- {{ printf "%.1fM" (div (float $stats.pepy_downloads) 1000000.0) }}
- downloads of the core packages, all time
-
- {{ lang.FormatNumberCustom 0 $stats.pepy_avg_daily_30 }} a day on average over the last 30 days
-
+
+ {{ printf "%.1fM" (div (float $stats.pepy_downloads) 1000000.0) }}
+ downloads of the core packages, all time
+
+ {{ lang.FormatNumberCustom 0 $stats.pepy_avg_daily_30 }} a day on average over the last 30 days
+
+
+ {{ with $rest }}
+
+ Show the other {{ lang.FormatNumberCustom 0 (len .) }} contributors
+
+ {{ range . }}
+ {{ partial "stats-contributor.html" (dict "person" . "most" $most) }}
+ {{ end }}
+
+
+ {{ end }}
-
- Collected from the GitHub, Zulip, Bluesky, LinkedIn, PePy and OpenAlex sources by
- scverse/stats. Contribution counts come from the core
- repositories only, so they undercount anyone whose work lives in an ecosystem package.
-
{{ end }}
From a3fd4460b082af8a4f9349827349d53d33918ea5 Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 13:38:19 +0200
Subject: [PATCH 6/7] Give both headline figures the same size
---
assets/main.scss | 4 ----
1 file changed, 4 deletions(-)
diff --git a/assets/main.scss b/assets/main.scss
index 131e6a6..52956e4 100644
--- a/assets/main.scss
+++ b/assets/main.scss
@@ -1057,10 +1057,6 @@ body {
.stats-hero-figure--second {
padding-left: 3.5rem;
border-left: 1px solid $overline;
-
- .stats-hero-value {
- font-size: 2.75rem;
- }
}
@media (max-width: 50rem) {
.stats-hero-figure--second {
From 290a7105dbf99d8b59a978946eb9024c312fb316 Mon Sep 17 00:00:00 2001
From: Lukas Heumos
Date: Fri, 14 Aug 2026 13:48:42 +0200
Subject: [PATCH 7/7] Say the ranking is by commits without calling anyone
busiest
---
layouts/stats/list.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/layouts/stats/list.html b/layouts/stats/list.html
index 74e22ec..79207df 100644
--- a/layouts/stats/list.html
+++ b/layouts/stats/list.html
@@ -92,7 +92,7 @@
{{ .name }}
Top contributors
{{ lang.FormatNumberCustom 0 $contributors.total_contributors }} people have contributed code to the core
- packages. These are the busiest, by number of commits.
+ packages, ranked here by number of commits.