From 37e85a1a729755b4a83aca0f52aa1b62836ba912 Mon Sep 17 00:00:00 2001 From: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Date: Sun, 19 Apr 2026 03:08:41 -0700 Subject: [PATCH] feat(graveyard): add 5 famous casualties to the hall of shame Adds entries to KNOWN_REPO_CAUSES (src/lib/scoring.ts) and HALL_OF_SHAME (src/components/Leaderboard.tsx) for five factually-abandoned repos, matching the existing dry deadpan tone: - facebook/draft-js (archived Feb 2023, replaced by Lexical) - LightTable/LightTable (abandoned 2022, Kickstarter IDE) - keystonejs/keystone-classic (archived Dec 2023, superseded by Keystone 6) - facebookarchive/stetho (archived 2024, native DevTools Android took over) - facebookarchive/react-native-fbsdk (archived 2021, replaced by -fbsdk-next) All five repos are confirmed archived on GitHub. Causes are under ~65 characters. Test + lint pass. Refs #9 --- src/components/Leaderboard.tsx | 6 ++++++ src/lib/scoring.ts | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/components/Leaderboard.tsx b/src/components/Leaderboard.tsx index 86f143b..f18431c 100644 --- a/src/components/Leaderboard.tsx +++ b/src/components/Leaderboard.tsx @@ -33,6 +33,12 @@ const HALL_OF_SHAME: LeaderboardEntry[] = [ { fullName: 'marionettejs/backbone.marionette', cause: 'Backbone died. So did everything built on Backbone.', score: 8, deathDate: 'Mar 2020', lastWords: 'I was Backbone but organized. Backbone wasn\'t organized. Or alive.' }, { fullName: 'request/request', cause: 'fetch() shipped natively and deprecated an entire generation', score: 9, deathDate: 'Feb 2020', lastWords: 'I was downloaded 30 million times a week. Then fetch happened.' }, { fullName: 'nicolo-ribaudo/jest-light-runner', cause: 'Vitest arrived and made everyone feel bad about Jest', score: 6, deathDate: 'Jan 2023', lastWords: 'I was faster Jest. Vitest was even faster. Also had a UI.' }, + + { fullName: 'facebook/draft-js', cause: 'Meta shipped Lexical and forgot which editor anyone was using', score: 9, deathDate: 'Feb 2023', lastWords: 'I was the React rich-text answer. React found a different answer.' }, + { fullName: 'LightTable/LightTable', cause: 'The IDE of the future stayed in the future permanently', score: 8, deathDate: 'Jun 2022', lastWords: 'Kickstarted $316k. Shipped an alpha. Never shipped a 1.0.' }, + { fullName: 'keystonejs/keystone-classic', cause: 'Keystone 6 shipped and nobody looked back at the old one', score: 7, deathDate: 'Dec 2023', lastWords: 'The rewrite kept the name. I kept the issues tab.' }, + { fullName: 'facebookarchive/stetho', cause: 'Chrome DevTools got native Android debugging and stopped caring', score: 7, deathDate: 'Oct 2024', lastWords: 'I bridged Chrome DevTools to Android. Chrome stopped wanting a bridge.' }, + { fullName: 'facebookarchive/react-native-fbsdk', cause: 'Replaced by a package with -next in the name', score: 7, deathDate: 'Mar 2021', lastWords: 'The successor is react-native-fbsdk-next. There is no going forward from here.' }, ] const FONT = `var(--font-dm), -apple-system, sans-serif` diff --git a/src/lib/scoring.ts b/src/lib/scoring.ts index 25cab40..ed67f2b 100644 --- a/src/lib/scoring.ts +++ b/src/lib/scoring.ts @@ -11,6 +11,11 @@ const KNOWN_REPO_CAUSES: Record = { 'angular/angular.js': 'AngularJS hit official end-of-life when modern Angular replaced it', 'request/request': 'The maintainers deprecated it as native fetch and modern clients took over', 'ariya/phantomjs': 'Chrome went headless and erased the reason this existed', + 'facebook/draft-js': 'Meta shipped Lexical and forgot which editor anyone was using', + 'lighttable/lighttable': 'The IDE of the future stayed in the future permanently', + 'keystonejs/keystone-classic': 'Keystone 6 shipped and nobody looked back at the old one', + 'facebookarchive/stetho': 'Chrome DevTools got native Android debugging and stopped caring', + 'facebookarchive/react-native-fbsdk': 'Replaced by a package with -next in the name', } export function computeDeathIndex(repo: RepoData): number {