From 216346096173eebded2b7f56046b797b551a7bd6 Mon Sep 17 00:00:00 2001 From: Philippe Serhal Date: Thu, 9 Apr 2026 21:17:18 -0400 Subject: [PATCH 1/2] feat: show badge on most liked packages, link to new leaderboard page Show a small rank badge next to the likes counter/button when a package is in the top 10 most-liked packages, and link that badge to a new in-app likes leaderboard page. For now at least, this is the only way to reach the leaderboard page. Both are powered by server-side fetching of the likes leaderboard API (https://tangled.org/baileytownsend.dev/npmx-likes-leaderboard), maintained by Bailey. Fetches degrade gracefully: no badge is shown on the package page, and the leaderboard page shows a message indicating that the data is unavailable. Successful fetches are cached for 1 hour, and are only revalidated in the background, following a stale-while-revalidate pattern (this is existing behaviour from `server/plugins/fetch-cache`). The leaderboard page is itself cached with ISR, with a revalidation time of 15 minutes. --- app/components/Package/Likes.vue | 150 ++++++++++-------- app/pages/leaderboard/likes.vue | 91 +++++++++++ i18n/locales/en.json | 15 +- i18n/locales/fr-FR.json | 15 +- i18n/schema.json | 39 +++++ nuxt.config.ts | 1 + server/api/leaderboard/likes.get.ts | 8 + server/api/social/likes/[...pkg].get.ts | 12 +- server/utils/atproto/utils/likes.ts | 9 +- server/utils/likes-leaderboard.ts | 123 ++++++++++++++ shared/types/social.ts | 9 ++ shared/utils/constants.ts | 3 + shared/utils/fetch-cache-config.ts | 3 +- test/nuxt/a11y.spec.ts | 68 +++++++- test/nuxt/components/Package/Likes.spec.ts | 58 +++++++ test/nuxt/pages/LikesLeaderboardPage.spec.ts | 56 +++++++ .../server/utils/likes-leaderboard.spec.ts | 124 +++++++++++++++ 17 files changed, 713 insertions(+), 71 deletions(-) create mode 100644 app/pages/leaderboard/likes.vue create mode 100644 server/api/leaderboard/likes.get.ts create mode 100644 server/utils/likes-leaderboard.ts create mode 100644 test/nuxt/components/Package/Likes.spec.ts create mode 100644 test/nuxt/pages/LikesLeaderboardPage.spec.ts create mode 100644 test/unit/server/utils/likes-leaderboard.spec.ts diff --git a/app/components/Package/Likes.vue b/app/components/Package/Likes.vue index 5c7b68089b..bbf10280f3 100644 --- a/app/components/Package/Likes.vue +++ b/app/components/Package/Likes.vue @@ -1,4 +1,5 @@ -