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

job-search-hq

v0.2.3

Published

A private, local-first job-search control room with AI-assisted analysis and CV tailoring.

Readme

Job Search HQ

A private, local-first job-search control room. It discovers product roles, deduplicates reposts, creates evidence-backed fit analyses, pauses workflows when clarification is needed, generates approved DOCX/PDF CV packages, and tracks manual submissions and follow-ups.

The application, worker, SQLite database, candidate profile, CV content, and generated documents remain on your computer. Internet access is used only for the configured AI provider and the Techmap job feed.

Run with npx

Requires Node.js 20.9 or newer on macOS or Linux.

npx job-search-hq

The first run initializes local storage, starts the app on 127.0.0.1, and opens a browser-based onboarding screen. There you choose OpenAI or Google Gemini, add the private API key, candidate contact details, target roles, locations, work models, and timezone. No setup answers are requested in the terminal. After setup, the app opens Career Memory so you can upload the canonical CV as Markdown.

Subsequent runs reuse the local configuration and data:

npx job-search-hq --no-open
npx job-search-hq --port 3100
npx job-search-hq config

Press Ctrl+C to stop both local services. A second launch detects the running instance instead of starting another worker.

Local storage

  • macOS: ~/Library/Application Support/job-search-hq/
  • Linux: $XDG_DATA_HOME/job-search-hq/ or ~/.local/share/job-search-hq/

Use --app-dir <path> to select another location. Configuration is stored with restrictive permissions. Provider environment variables override a saved key.

Backup and restore

Stop the app before creating a backup.

npx job-search-hq backup --output ./job-search-hq-backup.tar.gz
npx job-search-hq restore ./job-search-hq-backup.tar.gz --app-dir ./restored-job-search-hq

Backups contain a consistent SQLite snapshot, generated artifacts, checksums, schema information, and table counts. API keys are deliberately excluded. Restore only accepts an empty destination and verifies archive paths, checksums, SQLite integrity, and foreign keys before activating the restored data.

Local development

  1. Copy .env.example to .env.local.
  2. Add OPENAI_API_KEY or GOOGLE_AI_API_KEY.
  3. Run npm install.
  4. Run npm run dev.
  5. Open http://127.0.0.1:3000.

Useful commands:

npm run lint
npm test
npm run build
npm run backup -- --output /safe/path/backup.tar.gz
npm run restore -- /safe/path/backup.tar.gz --app-dir /empty/path
npm run package:build
npm run package:verify
npm run privacy:scan

Safety and privacy

  • API keys are server-side and are never stored in SQLite or included in backups.
  • The canonical Markdown CV controls chronology; tailoring cannot alter verified companies, titles, or dates.
  • Only approved career facts may add information beyond the canonical CV.
  • A recruiter-eye review is required before document generation.
  • The app never submits applications or automates LinkedIn authentication.
  • The local server binds only to 127.0.0.1.
  • Public export and npm packaging are blocked by privacy scans for secrets, personal identifiers, private files, databases, CV documents, generated artifacts, and an optional private denylist.

To create a fresh public Git history without copying the private repository metadata:

JOB_SEARCH_HQ_PRIVACY_DENYLIST=/path/to/private-denylist.txt \
  npm run public:export -- --output /empty/path/job-search-hq-public

The export creates a separate repository, scans its complete history, and does not add a remote.

Automatic npm releases

Every commit pushed to main runs .github/workflows/npx-release.yml. The workflow installs locked dependencies, runs typechecking and tests, scans the source and complete Git history, builds in an isolated directory, scans the packed tarball, assigns the next available patch version, and publishes job-search-hq publicly.

Publishing uses npm trusted publishing rather than a long-lived npm token. Configure the package's npm trusted publisher with GitHub user IdoZiv, repository job-search-hq, workflow filename npx-release.yml, and the npm publish permission. The GitHub repository may remain private; npm provenance is disabled because npm does not support provenance for private repositories.

Store the optional private denylist as the GitHub Actions secret JOB_SEARCH_HQ_PRIVACY_DENYLIST, with one forbidden value per line. It is written only to a permission-restricted runner-temporary file during the release.