npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

design-doctor

v0.3.2

Published

Your agent writes ugly UI. This catches it. A static-analysis CLI for React UX/UI that scores your codebase 0-100 and installs as an agent skill for Claude Code, Codex, Cursor, and Copilot. Tuned for Rails+Inertia and TanStack stacks.

Readme

design-doctor

Your agent writes ugly UI. design-doctor catches it.

A static-analysis CLI for React UX/UI that scores your codebase 0–100 and installs as an agent skill for Claude Code, Codex, Cursor, and Copilot. Tuned for Rails+Inertia and TanStack stacks.

Quick start

npx -y design-doctor@latest scan .

That's it. Zero config, zero install. Works on any machine with Node 18+.

For a project under active development:

npx -y design-doctor@latest scan . --verbose --diff   # only files changed vs main
npx -y design-doctor@latest scan . --score            # CI gate
npx -y design-doctor@latest scan . --markdown         # PR-ready

What it catches

Things that don't show up in ESLint, type-checking, or tests:

| Category | Examples | |------------|----------------------------------------------------------------------------------| | design/ | 14 shades of blue, p-[13px] arbitrary values, 6 z-index values, shadow sprawl, dark-mode pairing | | copy/ | "Click here", ... instead of , &quot; HTML entities, sentence-shaped CTAs | | a11y/ | Icon buttons with no label, <div onClick>, outline:none, heading skips | | forms/ | Placeholder-as-label, missing inputMode, error messages without aria-describedby | | ui/ | Reads isLoading but never renders it; lists with no empty state | | inertia/ | <a href="/internal"> instead of <Link>, <form onSubmit> instead of useForm | | tanstack/| Routes without errorComponent / pendingComponent / validateSearch | | stack/ | Devtools rendered without env guards |

Installation as an agent skill

npx -y design-doctor@latest install

Drops SKILL.md into every detected agent directory:

  • ~/.claude/skills/design-doctor/
  • ~/.agents/skills/design-doctor/ (Codex)
  • ~/.cursor/skills/design-doctor/
  • ~/.codeium/windsurf/skills/design-doctor/
  • ~/.config/github-copilot/skills/design-doctor/
  • ~/.config/opencode/skills/design-doctor/

After install, your agent will run design-doctor automatically when finishing a feature or fixing a UI bug.

Scoring

| Score | Grade | |-------|--------------| | 75+ | Great | | 50–74 | Needs work | | < 50 | Critical |

Per-unique-rule penalty: each unique error rule deducts 1.5 points, each unique warning rule deducts 0.75. One rule firing 100 times still only deducts once — score reflects diversity of breakage, not count.

Configuration

Drop .designdoctor.json at the project root:

{
  "preset": "default",
  "disable": ["copy/i18n-leak", "design/dark-mode-pairing"],
  "severity": {
    "a11y/icon-only-button-no-label": "error"
  },
  "thresholds": {
    "colorClusterMinSize": 3,
    "fontWeightMaxCardinality": 4,
    "fontFamilyMaxCardinality": 2,
    "zIndexMaxCardinality": 6,
    "shadowMaxCardinality": 5
  }
}

CI integration

Add to your workflow:

- run: npx -y design-doctor@latest scan . --score --min-score 75

Or comment on PRs:

- run: npx -y design-doctor@latest scan . --markdown > /tmp/report.md
- uses: peter-evans/create-or-update-comment@v4
  with:
    issue-number: ${{ github.event.pull_request.number }}
    body-path: /tmp/report.md

Companion tools

  • Rails backend: rails-doctor — same npm + agent-skill model, scans the Ruby side.
  • General React lint: react-doctor — broader code-quality, dead-code, bundle-size.

In a Rails+Inertia monorepo, run all three. design-doctor scans only the frontend dir (app/frontend/, app/javascript/, etc.).

Why static analysis for UX/UI?

Most UX problems aren't about visual judgment — they're about consistency and convention. A team uses 14 shades of blue because nobody noticed; a button says "Click here" because the agent didn't know better; a form uses placeholder-as-label because the example it copied did. Those are all detectable from source.

A vision pass (LLM grading screenshots with a rubric) is on the v0.2 roadmap. It will fold into the score for things static analysis can't see — visual hierarchy, density, polish.

License

MIT. See LICENSE.