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

@hadoku/resume-bot

v3.15.72

Published

AI-powered conversational interface for interactive resume exploration

Readme

@wolffm/resume-bot

AI-powered conversational interface for interactive resume exploration — chat with an AI about my background, skills, and experience while browsing the resume itself.

See it live: hadoku.me/resume

This repo is the npm package that powers that widget. The rest of this README is for contributors working on the package itself.

Overview

Two-panel UI: a markdown resume viewer on the left, an AI chat interface on the right. The chat uses Groq's LLM to answer questions about the resume. Also exposes a worker API for generating tailored resumes and cover letters.

Development

Getting access

pnpm install and the friend-only API routes need your own credential; pnpm dev needs none. Getting one is the same for every hadoku repo, so the steps live on one page: hadoku.me/docs/contributing/#resume-bot. The identity to ask for is resume-bot-service-key.

Local Development Setup

This package includes a development environment for testing the component locally:

# Install dependencies (outside the fleet: npx @hadoku/dev-vault -- pnpm install)
pnpm install

# Start dev server (opens http://localhost:5173)
pnpm dev

# Build for production
pnpm build

# Lint and format
pnpm lint:fix
pnpm format

The dev server uses index.html which imports and mounts the component directly. You can pass different configurations via URL parameters:

Example URLs:

# Default configuration
http://localhost:5173

# Custom theme
http://localhost:5173?theme=ocean

# Admin user
http://localhost:5173?userType=admin&sessionId=test-123

# Full configuration
http://localhost:5173?theme=ocean&userType=admin&sessionId=dev-session

Integration

This app is a child component of the hadoku_site parent application.

Props

interface ResumeBotAppProps {
  theme?: string // Optional: 'default', 'ocean', 'forest', etc.
  apiBaseUrl: string // Required: API root path or URL (e.g., '/resume/api' or 'https://api.yourapp.com/api')
  ownerName?: string // Optional: name shown in the chat welcome message (default: 'the candidate')
}

Mounting

import { mount, unmount } from '@wolffm/resume-bot'

// Mount the app
const element = document.getElementById('app-root')
mount(element, {
  theme: 'ocean', // optional
  apiBaseUrl: '/resume/api' // required - path to the API root
})

// Unmount when done
unmount(element)

Important: apiBaseUrl is the API root, matching the rest of the hadoku ecosystem (/oss/api, /jobplatform/api). Endpoints are appended to it directly. It can be either:

  • A path (e.g., /resume/api) if the backend is hosted on the same domain
  • A full URL (e.g., https://api.yourapp.com/api) if the backend is on a different domain

Breaking change in 2.0.0. Through 1.x this prop was the app root (/resume) and the package appended /api/... itself; 1.3.14 accepted both spellings. 2.0.0 removes that shim — pass the API root. Passing /resume now requests /resume/chat and 404s. Migration is a one-line change at the mount site: /resume -> /resume/api. This does not affect the ./api worker export — createResumeHandler(basePath) is unchanged.

The backend handles these endpoints (public unless noted; non-public routes are gated in-worker via @wolffm/worker-utils edge-auth — see worker/src/index.ts):

  • ${apiBaseUrl}/chat - POST - Chat with the bot (public, rate-limited)
  • ${apiBaseUrl}/resume - GET - Fetch resume content, incl. ?v={slug} variants (public)
  • ${apiBaseUrl}/system-prompt - GET - Fetch system prompt (admin/friend)
  • ${apiBaseUrl}/tailored-resume - POST - Per-job tailored resume (admin/friend/service)
  • ${apiBaseUrl}/cover-letter - POST - Per-job cover letter (admin/friend/service)
  • ${apiBaseUrl}/variants - POST/GET/DELETE - Variant management (admin/friend)

Deployment

Pushes to main automatically:

  1. Build and publish to GitHub Packages
  2. Notify parent site to update
  3. Parent pulls new version and redeploys

Versioning

Version bumps are handled automatically through two mechanisms:

  1. Pre-commit hook (primary): The .husky/pre-commit hook automatically bumps the version for every commit
  2. Workflow fallback: The publish workflow checks if the current version already exists in the registry and bumps it if needed

This dual approach ensures versions are always incremented, even if commits bypass the pre-commit hook (e.g., web UI edits, --no-verify commits).

Version bumping follows this pattern:

  • Patch version increments on each commit (1.1.8 → 1.1.9)
  • At patch 20, rolls over to next minor (1.1.20 → 1.2.0)

Architecture

This package has two exports:

  • UI component (. export): mount(el, props) / unmount(el) — React app from src/entry.tsx
  • Worker API (./api export): createResumeHandler(basePath, options) — Hono router from worker/src/index.ts (options.ownerName sets the chat owner)

Both are built and published together as @wolffm/resume-bot.