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

@supa-media/claude

v1.0.2

Published

Claude Code configuration templates for Supa apps

Readme

@supa-media/claude

Claude Code configuration for a Supa app, kept in one place and synced in. Ships a CLAUDE.md, a conservative permissions file, an empty hooks file, and seven slash-command templates; supa-claude sync copies them into your repo with your app's name substituted, and never clobbers a file you've edited unless you ask it to.

Install

pnpm add -D @supa-media/claude

Or run it one-off, without adding a dependency:

npx @supa-media/claude sync

Usage

npx @supa-media/claude sync              Sync templates and generate CLAUDE.md
npx @supa-media/claude sync --force      Overwrite existing files
npx @supa-media/claude sync --dry-run    Print the plan, write nothing
npx @supa-media/claude help              Show usage

sync is the only command (and the default when none is given). --help / -h work anywhere. The project root is the nearest ancestor of the cwd containing a package.json.

What it writes

| Path | Source | Substituted | | --- | --- | --- | | CLAUDE.md (project root) | templates/CLAUDE.md | yes | | .claude/settings.json | templates/settings.json | no — copied verbatim | | .claude/hooks.json | templates/hooks.json | yes | | .claude/commands/*.md | templates/commands/ | yes |

The seven commands: auto-worker, feature-validate, fix-ci, ios-build, isolate, lock-up, review-cycle.

Every file follows the same rule: created if absent, skipped if it already exists, and rewritten only under --force (and then only when the content actually differs). Each run prints created / updated / skipped / unchanged.

Configuration

Values are read from supa.config.ts, .js, or .mjs in the project root, falling back to package.json's name for both name fields.

| Value | Substitutes | | --- | --- | | appName (or name) | {{APP_NAME}} | | displayName | {{APP_DISPLAY_NAME}} (defaults to appName) | | githubOwner (or owner) | the literal word OWNER | | githubRepo (or repo) | the literal string "REPO" |

The owner/repo tokens exist for the GitHub GraphQL queries in commands/review-cycle.md; leave them unset and the templates keep their placeholders with the accompanying "replace OWNER and REPO" notes.

⚠️ The config file is scanned with regexes, not imported. Each pattern takes the first match anywhere in the file, so an unrelated name: earlier in the config wins. And the GitHub substitution is a blind global replace of the bare word OWNER and the quoted string "REPO" — an unquoted REPO (e.g. in a repos/OWNER/REPO/... path) is left alone, and any other occurrence of the word OWNER in a template you add will be replaced too.

Permissions

templates/settings.json ships a deliberately conservative permissions.allow list — routine, reversible commands only:

  • pnpminstall, and the dev:/build:/test:/lint:/typecheck:/clean:/--filter: prefixes, plus convex:dashboard and convex:logs
  • Convexnpx convex dev, npx convex run, npx convex logs
  • Build/testnpx tsc, node --test
  • Read-only git and ghstatus, diff, log, show, branch, fetch; gh pr view|list|diff|checks, gh run view|list, gh api graphql
  • Local git writesgit add, git commit, git checkout

It also denies reads of .env and .env.*, at the project root and nested.

Everything not listed still prompts — deliberately. That includes git push, git reset --hard, git clean, gh pr merge, convex deploy, and eas: the commands that publish, deploy, or destroy work. This is a floor, not a finished policy. Widen it for your own repo once you know which of those you're comfortable granting; sync will not overwrite an existing .claude/settings.json without --force, so your edits survive later syncs.

templates/hooks.json ships empty — a starting point for your own PreToolUse / PostToolUse / Stop entries. Any command you register must point at a script that actually exists in your repo; a missing script makes the hook fail on every invocation.

No tests ship with this package.


Part of the Supa Media framework — https://github.com/Supa-Media/supa-framework. MIT.