Skip to content

Commit 759687a

Browse files
feat: landing + profile redesign — unified theme, profile scan, field record badge
- Homepage landing: Gothic title, bigger hero, red stats, rotating placeholder, ✦ tabs - Profile mode: Examine a Profile → UserDashboard with Dead/Struggling/Alive + per-repo certify - Unified RecentlyBuried marquee (recent + curated Hall of Shame, single row) - Field Record badge redesign: mono font, thicker outline, clean single-line header - Loading state: 3-dot pulse, no layout shift between search and loader - Fixed-bottom footer with About/Legal/GitHub/Support links as sub-pages - Unified mono typography across entire landing - Removed InfoSheet modal (replaced by /about, /legal routes) - Extracted HALL_OF_SHAME to lib/hallOfShame.ts; removed unused Leaderboard component - Mobile: centered tabs with ✦ separator, responsive card widths - TypeScript clean Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent b772298 commit 759687a

30 files changed

Lines changed: 1497 additions & 936 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,5 @@ yarn-error.log*
4040
next-env.d.ts
4141

4242
.vercel
43+
44+
.env*.local

README.md

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,23 @@ Your abandoned repos deserve a proper funeral.
1010

1111
---
1212

13-
Paste a public GitHub URL. Get a shareable **Certificate of Death** — algorithmic cause of death, last commit as last words, repo age, and exportable graphics. No signup. No account. Completely free.
13+
Paste a public GitHub URL **or** a GitHub username. Get a shareable **Certificate of Death** — algorithmic cause of death, last commit as last words, repo age, and exportable graphics. Or run an autopsy across an entire user's public repos and get a Graveyard Report. No signup. No account. Completely free.
1414

15-
## Embed your dead repo
15+
## Two ways to autopsy
1616

17-
Got a dead repo? Add the badge to your README:
17+
- **Certify a Repo** — paste a GitHub URL, get a certificate of death for that single repo
18+
- **Examine a Profile** — paste a username, get a graveyard report card with every dead, struggling, and alive repo, plus a README badge you can embed
1819

19-
[![🪦 declared dead](https://img.shields.io/badge/%F0%9F%AA%A6%20declared%20dead-view%20certificate-555?style=for-the-badge&labelColor=cc0000)](https://commitmentissues.dev)
20+
## Embed your graveyard
2021

21-
```markdown
22-
[![🪦 declared dead](https://img.shields.io/badge/%F0%9F%AA%A6%20declared%20dead-view%20certificate-555?style=for-the-badge&labelColor=cc0000)](https://commitmentissues.dev/?repo=YOUR_OWNER/YOUR_REPO)
22+
Paste the generated `![commitmentissues](...)` markdown in your README and you'll get a live-updating badge:
23+
24+
```
25+
🪦 GITHUB REPO GRAVEYARD
26+
94 DEAD · 35 STRUGGLING · 14 ALIVE
2327
```
2428

25-
The badge and full certificate embed markdown are generated automatically on the certificate page — just hit **Copy** after analyzing your repo.
29+
The badge and full certificate embed markdown are generated automatically on the certificate/profile page — just hit **Copy**.
2630

2731
## Screenshots
2832

@@ -35,13 +39,13 @@ The badge and full certificate embed markdown are generated automatically on the
3539
## Features
3640

3741
- **Certificate of Death** — A4 layout with cause of death, last words, repo age, stars, forks, and language
42+
- **Profile Graveyard Report** — scan any user's public repos, grouped by Dead / Struggling / Alive, with per-repo descriptions and certificates
43+
- **Field Record badge** — dynamic SVG for READMEs showing live dead/struggling/alive counts for a user
3844
- **Algorithmic scoring**`src/lib/scoring.ts` computes a death index from commit activity, archive status, issue count, and time since last push
3945
- **Export** — PNG downloads in multiple aspect ratios: A4, Instagram (4:5 and 1:1), X/Twitter (16:9), Facebook feed, and Stories (9:16)
4046
- **Mobile share** — Native share sheet on iOS/Android with a story-formatted image
41-
- **README badge** — Embed a `🪦 DECLARED DEAD | VIEW CERTIFICATE` shields.io badge linking back to the certificate
4247
- **Certificate embed** — Full certificate image via `/api/certificate-image/[owner]/[repo]` for GitHub READMEs
43-
- **Recently Buried** — Live scrolling feed of the latest public burials
44-
- **Famous Casualties** — Curated graveyard of famously abandoned repos
48+
- **Recently Buried** — Live scrolling feed of the latest burials, interleaved with a curated Hall of Shame
4549
- **Rate limiting** — Redis-backed per-IP limiting with graceful fallback
4650
- **Timeout + race condition handling** — AbortController on every GitHub API call
4751

@@ -106,32 +110,40 @@ The scoring algorithm weighs: time since last commit, archive status, open issue
106110
```
107111
src/
108112
├── app/
109-
│ ├── page.tsx ← homepage
113+
│ ├── page.tsx ← homepage (repo + profile scan)
110114
│ ├── about/page.tsx ← /about
115+
│ ├── legal/page.tsx ← /legal
116+
│ ├── user/[username]/page.tsx ← permalink to a profile graveyard
111117
│ ├── layout.tsx ← root layout, fonts, analytics, JSON-LD
112118
│ └── api/
113-
│ ├── repo/route.ts ← main analysis endpoint
119+
│ ├── repo/route.ts ← single-repo analysis
120+
│ ├── user/route.ts ← user profile scan
114121
│ ├── recent/route.ts ← recently buried feed
122+
│ ├── recent-profiles/ ← top-ticker profile feed
115123
│ ├── random/route.ts ← random dead repo picker
116-
│ ├── stats/route.ts ← buried counter
117-
│ ├── badge/[owner]/[repo]/ ← shields.io-compatible badge SVG
124+
│ ├── stats/route.ts ← buried + profiles counter
125+
│ ├── badge/route.ts ← dynamic graveyard SVG (for READMEs)
126+
│ ├── badge/[owner]/[repo]/ ← single-repo shields.io badge
118127
│ └── certificate-image/[owner]/[repo]/ ← OG image for README embeds
119128
├── components/
120-
│ ├── CertificateCard.tsx ← certificate view + all export/share logic
121-
│ ├── CertificateFixed.tsx ← the actual certificate layout (A4)
122-
│ ├── SearchForm.tsx ← URL input + random button
129+
│ ├── CertificateCard.tsx ← certificate view + export/share logic
130+
│ ├── CertificateFixed.tsx ← certificate layout (A4)
131+
│ ├── SearchForm.tsx ← URL input + rotating placeholder
132+
│ ├── UserDashboard.tsx ← profile graveyard (Dead/Struggling/Alive)
133+
│ ├── ReadmeBadge.tsx ← README badge preview + copy
123134
│ ├── RecentlyBuried.tsx ← scrolling marquee feed
124-
│ ├── Leaderboard.tsx ← Famous Casualties graveyard
125-
│ ├── LoadingState.tsx ← loading skeleton
135+
│ ├── ScannerBanner.tsx ← top-bar profile ticker
136+
│ ├── LoadingState.tsx ← unified loading indicator
126137
│ ├── ErrorDisplay.tsx ← error + retry UI
127138
│ ├── PageHero.tsx ← shared hero (emoji, title, subtitle)
128-
│ ├── SubpageShell.tsx ← shell for /about and future subpages
129-
│ └── SiteFooter.tsx ← footer
139+
│ ├── SubpageShell.tsx ← shell for /about, /legal, /user
140+
│ └── SiteFooter.tsx ← fixed bottom footer
130141
└── lib/
131142
├── scoring.ts ← death index + cause of death logic
132143
├── scoring.test.ts ← scoring unit tests
133144
├── rateLimit.ts ← Redis-backed rate limiting
134145
├── recentStore.ts ← recently buried Redis store
146+
├── hallOfShame.ts ← curated famous dead repos
135147
└── types.ts ← shared TypeScript types
136148
```
137149

0 commit comments

Comments
 (0)