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

studykit

v0.3.0

Published

Turn any project directory into a spaced-repetition study workspace driven by Claude skills. Zero-dependency Node engine + sk:init / sk:learn / sk:stats / sk:summary / sk:judge / sk:certs skills.

Readme

StudyKit

Turn any project directory into a spaced-repetition study workspace, driven by Claude skills.

npm version node license: MIT dependencies: zero


StudyKit installs a small set of Claude Code skills plus a zero-dependency Node engine into a project directory. You study one certification per project; your learning state lives as flat markdown + JSONL on disk, so any session resumes exactly where you left off with a single command — no manual context reload.

  • 📚 Two phases, one driver — a daily study loop (review → learn → recall) that graduates to an exam-prep loop (targeted revision + full mock exams), switched only with your confirmation.
  • 🎯 Deterministic spaced repetition — a seeded selector resurfaces the topics you're weakest on and haven't seen in a while.
  • 🧮 Honest progress — coverage, accuracy, streaks, and pace vs. your target date, computed from your real attempt log.
  • ✍️ Open-ended grading — rubric-based judging of Feynman teach-backs and "explain X" answers, fed back into spaced repetition.
  • 🗂️ Multi-cert overview — one read-only dashboard across every cert you're studying.
  • 🪶 Zero runtime dependencies — pure Node (>=18), tested with the built-in node --test.

Table of contents

Install

The npm package is studykit (lowercase, an npm requirement); the project name is StudyKit.

Install the skills into a study project — a directory for one exam or topic:

# from npm
npx studykit@latest init ~/study/aws-saa

# from a git checkout
node bin/studykit.cjs init ~/study/aws-saa

init only installs skills into <project>/.claude/skills/. It never creates or touches study/ — that belongs to /sk:init.

Quickstart

Open the study project in Claude Code, then:

| Step | Command | What it does | |------|---------|--------------| | 1 | /sk:init | Once per project. Researches the exam blueprint, writes profile.md / syllabus.md / knowledge/, captures your background, pass mark, and mock size. | | 2 | /sk:learn | Every session. Runs the daily loop one question at a time and resumes the exact step + question across sessions. | | 3 | /sk:stats · /sk:summary | Anytime. The numbers, or a narrative with pace vs. your target date (sk:summary also saves study/progress.md). | | 4 | Exam-prep | When coverage is high or the exam is near, /sk:learn proposes switching phases (you confirm), then runs revision + blueprint-weighted, resumable, scored mock exams. | | 5 | /sk:judge | Grade an open-ended explanation against a rubric; tracked topics get recorded so the result feeds spaced repetition. |

Studying more than one cert? See Multiple certifications.

Skills

| Skill | Role | | ----- | ---- | | sk-init | One-time setup: builds the exam blueprint + knowledge base | | sk-learn | The daily driver: study loop + exam-prep loop, with exact resume | | sk-stats | Read-only progress metrics (totals, coverage, weak/stale topics) | | sk-summary | Narrative progress + pace vs. target; writes study/progress.md | | sk-judge | Rubric grader for open-ended answers (Feynman teach-back, "explain X") | | sk-certs | Read-only overview across multiple cert projects | | _engine | Zero-dependency Node helpers (state · select · stats · scan) |

What /sk:init creates

<study-project>/
  study/
    state.json            # machine cursor (the engine owns this schema)
    profile.md            # exam meta + structure + your background + target date
    syllabus.md           # topic | domain | status | last_studied
    knowledge/<topic>.md  # knowledge base, grows as you study
    daily/YYYY-MM-DD.md   # human-readable daily record
    progress.md           # latest snapshot (written by /sk:summary)
    results.jsonl         # append-only attempt log the engine reads

How it works

  • Markdown is the human source of truth; results.jsonl is the machine index. Only the engine reads the attempt log; skills load the small aggregate it returns.
  • State-first resume. Every skill reads the tiny state.json cursor first, then loads only the slice it needs — reads stay token-bounded no matter how long your history grows. Resume reads state.json only, never markdown, even mid-mock-exam.
  • Deterministic, topic-level selection. select.cjs is seeded and resurfaces topics (older-within-window and previously-wrong weighted heavier); sk-learn then generates a fresh question per topic. There is no question bank.
  • Two phases, one driver. state.phase is study or exam-prep. The switch is always user-confirmed and reversible; the schema change is additive (no migration needed).
  • Binary scoring everywhere. Multiple-choice and rubric-judged open-ended answers both resolve to one binary results.jsonl line; rich rubric detail stays human-facing in daily/.
  • Zero dependencies. Pure Node CommonJS (>=18), tested with the built-in node --test.

Multiple certifications

StudyKit keeps 1 project = 1 cert, so each study/ stays isolated and token-bounded. To study several, create sibling projects under one parent and use the read-only overview:

npx studykit@latest init ~/study/aws-saa
npx studykit@latest init ~/study/terraform
# run /sk:init in each, study as usual, then from any project:
#   /sk:certs ~/study
#   -> combined table: phase, coverage, streak, days-to-target, next action

/sk:certs reads each cert's state.json + stats aggregate only — never raw attempt logs — and suggests which cert to study next. It mutates nothing.

Development

npm test          # node --test skills/_engine/test/

The engine is pure Node CommonJS with zero runtime dependencies. Every .cjs ships with a node:test suite; keep it green.

Releasing

See docs/release-process.md for the full publish runbook: semantic versioning, the pre-publish audit, git tagging, GitHub push, and npm publish (including the 2FA one-time-password step).

License

MIT © Thuan Bui