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

qa-doctor

v0.2.0

Published

Browser QA your agent will actually run. Discovers every feature in a running app, exercises each one with Playwright, and reports pass/fail with screenshots so the agent can iterate to green. Installs as a skill for Claude Code, Codex, Cursor, and Copilo

Downloads

253

Readme

qa-doctor

Browser QA your agent will actually run.

A static-discovery + live-browser CLI that maps every feature in a running web app, exercises each one with Playwright, and reports pass/fail with screenshots so you can iterate to green. Installs as an agent skill for Claude Code, Codex, Cursor, and Copilot.

Quick start

# 1. install Playwright once
npm i -D playwright && npx playwright install chromium

# 2. start your app
bin/dev          # or `npm run dev`, `bin/rails server`, etc.

# 3. scan
npx -y qa-doctor@latest scan . --url http://localhost:3000

You'll get a per-feature pass/fail report and a 0–100 score:

qa-doctor base http://localhost:3000 · 12 routes · 87 features

Failures (3)
  ✗ /pricing#form.subscribe
     ✗ Form has no <button type=submit> or <input type=submit>.  qa/form-no-submit
  ✗ /dashboard#page
     ✗ 2 console error(s) during load.  qa/console-error
        Cannot read properties of undefined (reading 'name') | …

  ┌─────────┐
  │  ◠ ◠  │   Score: 88/100  Great
  │   ▽   │   84/87 features passing
  └─────────┘

What it tests (v0.1)

For every route discovered:

  • Page loads — HTTP 200, no uncaught JS exceptions, no console errors, no failed XHRs.
  • Internal links resolve — HEAD on every <a href="/...">.
  • Buttons present after load — selector still resolves (catches "vanished button" regressions).
  • Forms have submit affordance — at least one <button type="submit"> or <input type="submit">.
  • Destructive buttons flagged but not clicked — no accidental data loss during a scan.

What it does not test in v0.1:

  • Submission with valid data (planned for v0.2).
  • Multi-step flows (login → use feature → logout).
  • Visual regression vs a baseline (use design-doctor's vision pass).
  • Performance budgets.

The iteration loop

This is the whole point.

  1. npx -y qa-doctor@latest scan . --markdown > qa-report.md
  2. Open the report. Every failing feature has its own bullet with a screenshot path.
  3. Fix the failures.
  4. Re-run.
  5. Repeat until score is 100.

Don't bundle multiple fixes per iteration. Fix one feature, re-scan, see the score move, fix the next. Tight loop = honest signal.

Auth

If your app needs login, set environment variables:

QADOCTOR_LOGIN_URL=http://localhost:3000/login
[email protected]
QADOCTOR_PASS=secret

For complex flows, point QADOCTOR_LOGIN_SCRIPT at a JS file exporting async login(page). qa-doctor caches the auth state at .qa-doctor/auth.json for 24h.

Companion: rails-doctor + design-doctor

For full coverage of a Rails+Inertia or TanStack app, run all three:

| Tool | What it scores | |---------------|-----------------------------------------------------------------------| | qa-doctor | Does every feature still work in a real browser? | | design-doctor | UX/UI quality (design tokens, microcopy, a11y, shadcn use) | | rails-doctor | Ruby side: routes, models, migrations, security, Inertia conventions |

npx -y rails-doctor@latest scan .       # Ruby side
npx -y design-doctor@latest scan .      # React (static)
npx -y qa-doctor@latest scan .          # React (live browser)

Configuration

Drop .qadoctor.json at the project root:

{
  "url": "http://localhost:3000",
  "routes": ["/", "/pricing", "/dashboard"],
  "routesCap": 25,
  "featuresCap": 200,
  "ignoreSelectors": [".admin-only-button"],
  "destructiveSelectors": [".bulk-delete-button"]
}

Installation as an agent skill

npx -y qa-doctor@latest install

Drops SKILL.md into every detected agent dir (~/.claude/skills/qa-doctor/, ~/.agents/skills/qa-doctor/, etc.). After install, your agent will know how to run qa-doctor and iterate on the report.

CI integration

- run: bin/dev &
- run: |
    until curl -fsS http://localhost:3000/ > /dev/null; do sleep 1; done
- run: npx -y qa-doctor@latest scan . --min-score 90

License

MIT. See LICENSE.