Skip to content

Commit 3647601

Browse files
Merge pull request #8 from dotsystemsdevs/main
Main
2 parents 3e04125 + e5f1b5f commit 3647601

File tree

4 files changed

+101
-10
lines changed

4 files changed

+101
-10
lines changed

ROADMAP.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# Roadmap — commitmentissues.dev
2+
3+
Living document. Completed work at the top, upcoming at the bottom. Add new entries as changes ship.
4+
5+
---
6+
7+
## Shipped
8+
9+
### Launch foundation
10+
- Initial Next.js app setup — certificate generation, SEO metadata, JSON-LD, sitemap
11+
- A4 certificate design with cause of death, last words, repo age, derived stats
12+
- Rubber stamp branding ("REST IN PRODUCTION")
13+
- Satori-based server-side certificate rendering
14+
- Leaderboard / graveyard carousel (Famous Casualties)
15+
- Submit form with example repo chips
16+
- FAQ, Terms, Privacy consolidated into single About page
17+
- Footer with GitHub source link and "keep the server alive" coffee CTA
18+
19+
### Social & exports
20+
- Multi-format exports (feed, square, story 9:16) without zip
21+
- Mobile native share sheet (Web Share API)
22+
- Platform-aware share flow (X, Instagram, desktop fallback menu)
23+
24+
### Live data (Upstash / Redis)
25+
- Real buried counter with historical baseline (800+)
26+
- Recently Buried section — live feed of analyzed repos
27+
- Animated count tick-up on load
28+
- Migrated from `@vercel/kv` to `@upstash/redis`
29+
30+
### UX polish
31+
- Full UI/UX audit — back buttons, consistent gray design system, CSS cleanup
32+
- Brutalist outlined control style across key surfaces
33+
- Hover states and micro-interactions across all clickable elements
34+
- Mobile certificate scaling — viewport-based, no sideways scroll
35+
- Marquee scroll speed and reverse-direction Recently Buried row
36+
- Random dead repo button (replaces example chips)
37+
- Hover effects on all certificate action buttons
38+
- Fixed Buy Me a Coffee button (top-right, all pages)
39+
40+
### Routing & SEO
41+
- Legacy route redirects (`/pricing`, `/faq`, `/privacy`) → `/about`
42+
- `/terms` removed from sitemap and merged into `/about`
43+
- OG image aligned with live hero (light theme, correct fonts)
44+
- Custom roast line for commitmentissues repo itself
45+
46+
### Data integrity
47+
- Audited all 28 Famous Casualties graveyard entries against live GitHub API
48+
- Fixed `angularjs/angular.js``angular/angular.js` (org transferred, old path 404)
49+
- Fixed `facebook/flux``facebookarchive/flux` (archived org move)
50+
- Fixed `joyent/node``nodejs/node-v0.x-archive` (org transferred)
51+
- Fixed `yahoo/mojito``YahooArchive/mojito` (org transferred)
52+
- Fixed `mikeal/request``request/request` (repo transferred)
53+
- Removed `nicowillis/ratchet` — repo deleted with no replacement
54+
- Removed `microsoft/winjs` — repo deleted with no replacement
55+
- Removed `adobe/phonegap` — repo deleted with no replacement
56+
- Synced `scoring.ts` known-cause keys to match updated repo paths
57+
58+
### Open-source prep
59+
- GitHub issue templates
60+
- Repository conventions doc (`docs/repository-conventions.md`)
61+
- `docs/releases/` changelog structure (v1.0.0)
62+
- README refresh with screenshots, stack, and onboarding sections
63+
64+
---
65+
66+
## Up next
67+
68+
### Infrastructure
69+
- [ ] Upgrade Next.js 14.x → 16.x (deferred CVEs — target: within one month of launch)
70+
71+
### Features
72+
- [ ] *(add items here)*
73+
74+
### Fixes / polish
75+
- [ ] *(add items here)*
76+
77+
---
78+
79+
## How to use this file
80+
81+
When a change ships, move it from **Up next** to the relevant **Shipped** section.
82+
For brand-new ideas, add them under **Up next** with a `[ ]` checkbox.
83+
Keep entries short — one line per change, same tone as the commit messages above.

next.config.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
/** @type {import('next').NextConfig} */
22
const nextConfig = {
3+
async redirects() {
4+
return [
5+
{ source: '/pricing', destination: '/', permanent: true },
6+
{ source: '/faq', destination: '/', permanent: true },
7+
{ source: '/privacy', destination: '/about', permanent: true },
8+
{ source: '/terms', destination: '/about', permanent: true },
9+
]
10+
},
311
async headers() {
412
return [
513
{

src/components/Leaderboard.tsx

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,33 +5,33 @@ import { LeaderboardEntry } from '@/lib/types'
55

66
const HALL_OF_SHAME: LeaderboardEntry[] = [
77
{ fullName: 'atom/atom', cause: 'GitHub built VS Code and forgot this existed', score: 10, deathDate: 'Dec 2022', lastWords: 'At least I had good themes.' },
8-
{ fullName: 'angularjs/angular.js', cause: 'Angular 2 murdered its own parent in cold blood', score: 9, deathDate: 'Jan 2022', lastWords: 'They named the replacement Angular too. Nobody was fooled.' },
8+
{ fullName: 'angular/angular.js', cause: 'Angular 2 murdered its own parent in cold blood', score: 9, deathDate: 'Jan 2022', lastWords: 'They named the replacement Angular too. Nobody was fooled.' },
99
{ fullName: 'adobe/brackets', cause: 'Adobe discovered VS Code already existed', score: 10, deathDate: 'Sep 2021', lastWords: 'I was actually pretty good. Nobody will know.' },
1010
{ fullName: 'apache/cordova', cause: 'React Native showed up and everyone switched mid-project', score: 8, deathDate: 'Aug 2020', lastWords: 'Hybrid apps were a mistake. I was a mistake.' },
1111
{ fullName: 'gulpjs/gulp', cause: 'Webpack arrived. Then Vite. Poor Gulp.', score: 8, deathDate: 'Dec 2019', lastWords: 'I streamed data beautifully. Nobody cared.' },
1212
{ fullName: 'meteor/meteor', cause: 'Promised full-stack bliss. Delivered full-stack confusion.', score: 7, deathDate: 'Jun 2018', lastWords: 'I promised real-time. I delivered real pain.' },
1313
{ fullName: 'ariya/phantomjs', cause: 'Chrome went headless. This went nowhere.', score: 9, deathDate: 'Mar 2018', lastWords: 'I had a headless future. Then so did Chrome.' },
1414
{ fullName: 'bower/bower', cause: 'npm install happened and nobody looked back', score: 9, deathDate: 'Jan 2017', lastWords: 'bower_components. That\'s my legacy.' },
15-
{ fullName: 'facebook/flux', cause: 'Redux arrived uninvited and never left', score: 9, deathDate: 'Oct 2016', lastWords: 'I was just unidirectional data flow. Redux was also just unidirectional data flow.' },
15+
{ fullName: 'facebookarchive/flux', cause: 'Redux arrived uninvited and never left', score: 9, deathDate: 'Oct 2016', lastWords: 'I was just unidirectional data flow. Redux was also just unidirectional data flow.' },
1616
{ fullName: 'gruntjs/grunt', cause: 'Gulped by Gulp, then Webpacked into the grave', score: 8, deathDate: 'Feb 2016', lastWords: 'Gruntfile.js was 300 lines. That was the problem.' },
1717
{ fullName: 'mootools/mootools-core', cause: 'jQuery killed it softly. Then jQuery died too.', score: 7, deathDate: 'Jan 2016', lastWords: 'I prototyped everything. Even things that shouldn\'t be prototyped.' },
1818
{ fullName: 'ftlabs/fastclick', cause: 'The 300ms delay got fixed. So did this.', score: 8, deathDate: 'Nov 2015', lastWords: 'My entire purpose was 300ms. Mobile browsers fixed it. Nobody told me.' },
19-
{ fullName: 'microsoft/winjs', cause: 'Windows Phone died and took everything with it', score: 10, deathDate: 'Sep 2015', lastWords: 'Windows Phone had 3% market share. I had 3% of that.' },
19+
2020
{ fullName: 'jashkenas/coffeescript', cause: 'ES6 stole all its ideas and left', score: 7, deathDate: 'Sep 2015', lastWords: 'I made JavaScript beautiful. JavaScript made me irrelevant.' },
2121
{ fullName: 'knockout/knockout', cause: 'Vue arrived and everyone forgot their vows', score: 8, deathDate: 'Oct 2015', lastWords: 'ko.observable. ko.computed. ko.gone.' },
22-
{ fullName: 'nicowillis/ratchet', cause: 'Bootstrap Mobile never shipped. Neither did this.', score: 7, deathDate: 'Aug 2015', lastWords: 'I was mobile-first before mobile-first was cool. Then I wasn\'t.' },
23-
{ fullName: 'adobe/phonegap', cause: 'Cordova forked it. React Native buried them both.', score: 8, deathDate: 'Oct 2020', lastWords: 'I was Cordova before Cordova. Nobody remembers.' },
22+
23+
2424
{ fullName: 'postcss/autoprefixer', cause: 'Browsers finally agreed on things. Took them long enough.', score: 7, deathDate: 'Jan 2023', lastWords: 'I added -webkit- to everything. Even things that didn\'t need it.' },
25-
{ fullName: 'joyent/node', cause: 'io.js forked it, then everyone made up and pretended nothing happened', score: 7, deathDate: 'May 2015', lastWords: 'The fork was mostly about a callback style disagreement. We don\'t talk about it.' },
25+
{ fullName: 'nodejs/node-v0.x-archive', cause: 'io.js forked it, then everyone made up and pretended nothing happened', score: 7, deathDate: 'May 2015', lastWords: 'The fork was mostly about a callback style disagreement. We don\'t talk about it.' },
2626
{ fullName: 'twbs/ratchet', cause: 'Nobody actually built apps with Bootstrap anyway', score: 6, deathDate: 'Mar 2016', lastWords: 'I had 11,000 stars. Zero shipped apps.' },
2727
{ fullName: 'mattdesl/budo', cause: 'Webpack devServer ate the entire category', score: 6, deathDate: 'Feb 2018', lastWords: 'browserify was already losing. I never stood a chance.' },
2828
{ fullName: 'strongloop/loopback', cause: 'Express stayed simple. This did not.', score: 7, deathDate: 'Jun 2019', lastWords: 'I had a visual API composer. I thought that was good.' },
29-
{ fullName: 'yahoo/mojito', cause: 'Yahoo slowly forgot it existed, then forgot everything else', score: 9, deathDate: 'Dec 2014', lastWords: 'I was isomorphic JavaScript in 2012. Too early. Also Yahoo.' },
29+
{ fullName: 'YahooArchive/mojito', cause: 'Yahoo slowly forgot it existed, then forgot everything else', score: 9, deathDate: 'Dec 2014', lastWords: 'I was isomorphic JavaScript in 2012. Too early. Also Yahoo.' },
3030
{ fullName: 'dojo/dojo', cause: 'jQuery won the 2008 framework wars. Dojo was not informed.', score: 8, deathDate: 'Dec 2021', lastWords: 'I had AMD modules before AMD was a thing. Nobody used them.' },
3131
{ fullName: 'Polymer/polymer', cause: 'Web Components were supposed to be the future. They were not.', score: 8, deathDate: 'Apr 2021', lastWords: 'HTML Imports. I thought that was a good idea. It was not.' },
3232
{ fullName: 'tencent/wepy', cause: 'WeChat\'s own framework killed its own ecosystem', score: 7, deathDate: 'Nov 2019', lastWords: 'Even Tencent forgot about me.' },
3333
{ 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.' },
34-
{ fullName: 'mikeal/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.' },
34+
{ 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.' },
3535
{ 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.' },
3636
]
3737

src/lib/scoring.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ const KNOWN_REPO_CAUSES: Record<string, string> = {
88
'bower/bower': 'npm install happened and nobody looked back',
99
'atom/atom': 'GitHub shipped VS Code, then sunset Atom in public',
1010
'adobe/brackets': 'Adobe handed it to the community after VS Code won the editor war',
11-
'angularjs/angular.js': 'AngularJS hit official end-of-life when modern Angular replaced it',
12-
'mikeal/request': 'The maintainers deprecated it as native fetch and modern clients took over',
11+
'angular/angular.js': 'AngularJS hit official end-of-life when modern Angular replaced it',
12+
'request/request': 'The maintainers deprecated it as native fetch and modern clients took over',
1313
'ariya/phantomjs': 'Chrome went headless and erased the reason this existed',
1414
}
1515

0 commit comments

Comments
 (0)