Skip to content

Commit 355b94d

Browse files
docs: rewrite promo drafts for CLI scanner, health scores, dashboard features
1 parent 67d4b54 commit 355b94d

File tree

3 files changed

+112
-88
lines changed

3 files changed

+112
-88
lines changed

docs/promo/DEVTO_ARTICLE_DRAFT.md

Lines changed: 67 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,96 @@
11
---
2-
title: "I built an automated public log to prove I'm actively maintaining OSS packages"
2+
title: "npm audit catches CVEs. Nothing catches abandoned packages. So I built a scanner."
33
published: false
4-
description: "How I track 1.6M npm downloads/week across 7 abandoned packages using GitHub Actions, machine-readable evidence snapshots, and zero manual updates."
5-
tags: opensource, github, automation, devops
4+
description: "A zero-dependency CLI that scans package.json and scores every dependency 0-100 for maintenance health. Plus the full automated monitoring system behind it."
5+
tags: opensource, javascript, node, npm
66
cover_image:
77
---
88

9-
There's a problem nobody talks about: thousands of npm packages are effectively abandoned while still serving millions of downloads per week. Maintainers disappear. Issues pile up. Security patches sit unmerged. And downstream teams have no way to know.
9+
## The problem nobody talks about
1010

11-
I maintain 5 of these packages. The challenge: how do you *prove* ongoing maintenance work to upstream maintainers, grant committees, or employers — without private context?
11+
Thousands of npm packages are effectively abandoned while serving millions of downloads per week. Maintainers disappear. Issues pile up. Security patches sit unmerged. And `npm audit` won't tell you.
1212

13-
So I built this: **[oss-maintenance-log](https://github.com/dusan-maintains/oss-maintenance-log)**
13+
I maintain 7 of these packages — combined 1.4M npm downloads/week. After getting burned by unmaintained transitive dependencies in my own projects, I built a scanner.
1414

15-
## What it does
15+
## One command
1616

17-
Every 6 hours, a GitHub Actions workflow:
17+
```bash
18+
npx github:dusan-maintains/oss-maintenance-log express lodash moment request
19+
```
1820

19-
1. Polls the GitHub API for repo metadata (stars, forks, open issues, last push date)
20-
2. Pulls npm download counts (weekly rolling window)
21-
3. Tracks PR states, mergeability, and diff stats
22-
4. Monitors review SLA — flags when maintainer feedback has gone unanswered
23-
5. Generates a prioritized action queue
24-
6. Commits machine-readable JSON + human-readable Markdown snapshots
25-
7. Auto-updates README stats from the fresh data
21+
```
22+
OSS Health Scan Results
23+
──────────────────────────────────────────────────
24+
Scanned: 3 packages
25+
Average health: 40.8/100
26+
● Critical: 0 ● Warning: 3 ● Healthy: 0
2627
27-
Zero manual updates. Everything is public and auditable.
28+
🟡 WARNING
2829
29-
## The packages
30+
react-hexgrid ███████░░░░░░░░░░░░░ 35.1/100 last push 594d ago
31+
jquery-modal ████████░░░░░░░░░░░░ 40.5/100 last push 699d ago
32+
rrule █████████░░░░░░░░░░░ 46.8/100 last push 628d ago
33+
```
3034

31-
Right now I'm tracking:
35+
## How the scoring works
3236

33-
| Package | npm/week | Why it needs help |
34-
|---|---|---|
35-
| `rrule` | 1,374,236 | 210 open issues, last push 2024 |
36-
| `python-shell` | 194,847 | Maintainer publicly looking for help |
37-
| `jquery-modal` | 24,399 | "Maintainers Wanted" in README |
38-
| `jquery-tablesort` | 1,667 | "Maintainers Wanted" in README |
39-
| `react-hexgrid` | 1,702 | Maintainer-needed signal in issues |
37+
Each package gets a weighted health score (0–100):
4038

41-
Combined: **1,596,851 npm downloads/week** across packages that would otherwise have no active maintenance.
39+
| Dimension | Weight | What it measures |
40+
|-----------|--------|-----------------|
41+
| **Maintenance** | 40% | Last push (exponential decay, 180-day half-life), last npm publish (365-day half-life), open issues ratio |
42+
| **Community** | 25% | Stars and forks (log₁₀ scaled — 100 stars matters more than the difference between 10k and 11k) |
43+
| **Popularity** | 20% | npm weekly downloads (log₁₀ scaled) |
44+
| **Risk** | 15% | Penalty-based: >365 days since push (-4), >100 open issues (-3), >2 years since publish (-2) |
4245

43-
## Why public?
46+
Instant flags: `DEPRECATED` → 5/100, `ARCHIVED` → 8/100.
4447

45-
Accountability. Anyone can verify the work without trusting me. The evidence files are auditable JSON — no private context required.
48+
The algorithm handles edge cases:
49+
- High-download packages with no maintainer score high on Popularity but get crushed on Maintenance and Risk
50+
- Boutique packages with active maintainers score high on Maintenance despite low download counts
51+
- Mega-repos like Grafana score moderately because their massive issue counts penalize the ratio
4652

47-
It also creates a paper trail. When I open a PR to a package with 200 open issues, I can link to the evidence log to show I'm not a drive-by contributor.
53+
## Zero dependencies — on purpose
4854

49-
## The architecture
55+
The tool uses only Node.js built-ins (`https`, `fs`, `path`). A dependency health scanner that itself depends on abandoned packages would be... ironic.
5056

51-
```
52-
scripts/
53-
update-evidence.ps1 # Per-repo PR tracking + npm stats
54-
update-ecosystem-status.ps1 # Multi-repo aggregated health snapshot
55-
update-review-sla.ps1 # Review response time monitoring
56-
update-action-queue.ps1 # Prioritized action queue from SLA data
57-
update-readme-stats.ps1 # Patches README with fresh numbers
58-
evidence/
59-
*.json # Machine-readable snapshots
60-
*.md # Human-readable reports
61-
.github/workflows/
62-
evidence-daily.yml # Cron: every 6 hours
57+
## CI integration
58+
59+
```yaml
60+
# .github/workflows/health-check.yml
61+
name: Dependency Health Check
62+
on:
63+
schedule:
64+
- cron: "0 9 * * 1"
65+
pull_request:
66+
67+
jobs:
68+
scan:
69+
runs-on: ubuntu-latest
70+
steps:
71+
- uses: actions/checkout@v4
72+
- uses: actions/setup-node@v4
73+
- run: npx github:dusan-maintains/oss-maintenance-log --threshold 30
6374
```
6475
65-
PowerShell + GitHub Actions. Runs on both Windows and Linux (pwsh). No external dependencies beyond the GitHub and npm APIs.
76+
Exits with code 1 if any critical packages found — works as a PR gate.
6677
67-
## Use it yourself
78+
## The full monitoring system
6879
69-
The repo is marked as a template. Fork it, update the package list in 3 scripts, push — done. MIT licensed.
80+
The CLI is part of a bigger project. I also built:
7081
71-
```powershell
72-
# Run locally
73-
./scripts/update-evidence.ps1
74-
./scripts/update-ecosystem-status.ps1
75-
./scripts/update-review-sla.ps1
76-
./scripts/update-action-queue.ps1
77-
```
82+
- **Health trend engine** — 180-day rolling history with 7-day and 30-day deltas. Detects packages that are improving or declining.
83+
- **Alert system** — Auto-creates GitHub Issues when packages drop below critical threshold.
84+
- **Review SLA tracker** — Flags when maintainer feedback has gone stale on your PRs.
85+
- **Interactive dashboard** — Dark-mode Chart.js dashboard with health gauges, radar charts, download distributions.
86+
87+
![Dashboard](https://raw.githubusercontent.com/dusan-maintains/oss-maintenance-log/main/docs/dashboard-preview.png)
88+
89+
Everything runs on GitHub Actions every 6 hours. Config-driven — just edit one JSON file with your packages.
7890
79-
Live dashboard: https://dusan-maintains.github.io/oss-maintenance-log
91+
**Repo:** [github.com/dusan-maintains/oss-maintenance-log](https://github.com/dusan-maintains/oss-maintenance-log)
92+
**Live dashboard:** [dusan-maintains.github.io/oss-maintenance-log](https://dusan-maintains.github.io/oss-maintenance-log)
8093
8194
---
8295
83-
Curious if others have built similar systems. Is there prior art I missed? And if you maintain packages that need help — open an issue, I'm actively looking for the next ones to adopt.
96+
What tools do you use to monitor dependency health? I'm curious about existing solutions I might have missed.

docs/promo/HN_POST_DRAFT.md

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,31 @@
1-
# Show HN: I built an automated public log to prove I'm actively maintaining OSS packages
1+
# Show HN: oss-health-scan — find abandoned npm dependencies before they become risks
22

3-
**Title:** Show HN: Automated public evidence log for OSS maintenance — self-updates every 6h via GitHub Actions
3+
**Title:** Show HN: Scan your package.json for abandoned npm packages — health scores 0-100
44

55
---
66

7-
I maintain 5 npm packages that were effectively abandoned but still serve ~1.6M downloads/week combined. The problem: there's no standard way to prove ongoing maintenance work to upstream maintainers, grant committees, or employers.
7+
21% of the top 50k npm packages depend on deprecated packages. npm audit catches security vulnerabilities, but not abandoned dependencies.
88

9-
So I built this: https://github.com/dusan-maintains/oss-maintenance-log
9+
I built a zero-dependency Node.js CLI that scores every dependency 0–100:
1010

11-
Every 6 hours, GitHub Actions polls the GitHub API and npm, tracks PR states and review SLA, and commits machine-readable JSON + Markdown snapshots. Zero manual updates. The README stats update automatically too.
11+
npx github:dusan-maintains/oss-maintenance-log lodash moment request
1212

13-
**What it tracks:**
14-
- `rrule` — 1.37M npm downloads/week, 210 open issues, my PR fixing WeekdayStr serialization
15-
- `python-shell` — 195k downloads/week, maintainer publicly looking for help
16-
- `jquery-modal` / `jquery-tablesort` — both have "Maintainers Wanted" in their READMEs
17-
- `react-hexgrid` — maintainer-needed signal in issues
18-
- `grafana` — large-repo signal PR (privacy hardening for email templates)
13+
It checks:
14+
- When the repo was last pushed to
15+
- When the package was last published to npm
16+
- Open issues ratio
17+
- GitHub stars and forks (log-scaled)
18+
- npm download trends
19+
- Deprecated/archived flags (instant critical score)
1920

20-
**Why public?** Accountability. Anyone can verify the work without private context. The evidence files are auditable JSON.
21+
Scored using a weighted model: Maintenance 40%, Community 25%, Popularity 20%, Risk 15%. Exponential decay for time-based metrics, logarithmic scaling for count-based ones.
2122

22-
**Use as template:** It's marked as a template repo. Fork it, update the package list in 3 scripts, push — done.
23+
The tool is part of a larger system I built to track my own OSS maintenance work — I actively maintain 7 abandoned npm packages with 1.4M combined weekly downloads. The full system includes automated evidence collection, review SLA tracking, health trend analysis (180-day rolling window), and auto-alerts via GitHub Issues.
2324

24-
Live dashboard: https://dusan-maintains.github.io/oss-maintenance-log
25+
Zero external npm dependencies — a health scanner shouldn't be a supply chain risk.
2526

26-
Curious if others have built similar systems, or if there's prior art I missed.
27+
Repo: https://github.com/dusan-maintains/oss-maintenance-log
28+
Dashboard: https://dusan-maintains.github.io/oss-maintenance-log
29+
CLI README: https://github.com/dusan-maintains/oss-maintenance-log/tree/main/cli
30+
31+
Curious about prior art in this space. I know about socket.dev (supply chain) and Snyk (CVEs), but I haven't found anything that specifically scores maintenance health of npm packages.

docs/promo/REDDIT_POST_DRAFT.md

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,39 @@
1-
**Title:** I built a system that publicly tracks my OSS maintenance work — auto-updates every 6 hours
1+
**Title:** I built a CLI that scans your package.json for dying npm dependencies — health scores 0-100, zero deps, one command
22

33
**Body:**
44

5-
I maintain 5 npm packages that were abandoned but still serve ~1.6M downloads/week combined. The problem: there's no standard way to prove ongoing maintenance work to upstream maintainers or grant committees.
5+
21% of the top 50k npm packages depend on deprecated packages. `npm audit` catches CVEs — but not abandoned ones. So I built a scanner.
66

7-
So I built this: https://github.com/dusan-maintains/oss-maintenance-log
7+
```
8+
npx github:dusan-maintains/oss-maintenance-log express lodash moment request
9+
```
810

9-
Every 6 hours, GitHub Actions polls GitHub API + npm, tracks PR states and review SLA, and commits machine-readable JSON + Markdown snapshots. Zero manual updates. README stats update automatically too.
11+
It scores every dependency 0–100 based on:
12+
- **Maintenance (40%)** — last push, last publish, open issues
13+
- **Community (25%)** — stars, forks (log-scaled)
14+
- **Popularity (20%)** — npm downloads/week
15+
- **Risk (15%)** — inactivity penalty, issue backlog
1016

11-
**What it tracks:**
12-
- `rrule` — 1.37M npm downloads/week, 210 open issues
13-
- `python-shell` — 195k downloads/week, maintainer publicly looking for help
14-
- `jquery-modal` / `jquery-tablesort` — both have "Maintainers Wanted" in their READMEs
15-
- `react-hexgrid` — maintainer-needed signal in issues
16-
- `grafana` — large-repo signal PR (privacy hardening)
17+
DEPRECATED = instant 5/100. ARCHIVED = 8/100.
1718

18-
**Why public?** Accountability. Anyone can verify the work without trusting me. The evidence files are auditable JSON.
19+
Output is terminal-friendly with colored bars, or `--json` for CI pipelines. Exits with code 1 if any critical packages found — works as a PR gate.
1920

20-
It's also a template repo — fork it, update 3 scripts, push. Done.
21+
**Zero npm dependencies.** Uses only Node.js built-ins. A scanner for unhealthy dependencies shouldn't itself be a supply chain risk.
2122

22-
Live dashboard: https://dusan-maintains.github.io/oss-maintenance-log
23+
The tool is part of a bigger system I built after I started maintaining 7 abandoned packages (1.4M npm downloads/week combined). The full system auto-tracks PRs, review SLA, generates health trend charts, and fires alerts when packages degrade. There's a live dark-mode dashboard too:
24+
25+
Dashboard: https://dusan-maintains.github.io/oss-maintenance-log
26+
Repo: https://github.com/dusan-maintains/oss-maintenance-log
27+
28+
Happy to answer questions about the scoring algorithm or the broader problem of abandoned OSS packages.
2329

2430
---
2531

26-
**Suggested subreddits:**
27-
- r/opensource
28-
- r/github
29-
- r/devops
30-
- r/node (for the npm angle)
31-
- r/javascript
32+
**Subreddits:**
33+
- r/node — primary target (npm-focused)
34+
- r/javascript — broad JS audience
35+
- r/opensource — OSS health angle
36+
- r/webdev — dependency management pain
37+
- r/SideProject — for "Show Off Saturday" thread
3238

3339
**Best posting time:** Tuesday–Thursday, 9–11am US Eastern

0 commit comments

Comments
 (0)