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

barry-resume-cli

v1.0.2

Published

<img width="1920" height="645" alt="Untitled design (24)" src="https://github.com/user-attachments/assets/1ff28bb0-26d5-45c2-b430-9d12452ad742" />

Readme

⚡ Barry

Introducing Barry, an ATS-optimised resume generator CLI. Barry takes your base resume JSON, a LaTeX template, and a Job Description, then leverages the Groq LLM API to rewrite your resume specifically for that role and compiles it into a beautiful PDF locally.

🚀 Installation

Install Barry globally on your machine using npm:

npm install -g barry-resume-cli

Prerequisites

  1. Node.js (v18+)
  2. pdflatex: You must have LaTeX installed on your system to generate PDFs.
    • Windows: Install MiKTeX or TeX Live.
    • macOS: Install MacTeX.
    • Linux: sudo apt-get install texlive-latex-base texlive-fonts-recommended texlive-extra-utils texlive-latex-extra

⚙️ Configuration

Barry uses Groq's high-speed LLM to tailor your resume. You'll need a free API key from Groq.

Set it as an environment variable in your terminal:

Mac/Linux:

export GROQ_API_KEY="your-api-key-here"

Windows (PowerShell):

$env:GROQ_API_KEY="your-api-key-here"

🛠️ Usage

To use Barry, you should create a specific folder for your job application and place your files there. This ensures a smooth and clean experience.

Step 1: Prepare your files Create a new folder and add the following files to it:

  1. resume_data.json (Your base resume data in JSON format)
  2. resume_template.tex (Your LaTeX design template)
  3. jd.txt (The Job Description you are applying for, saved as plain text)

(Need examples? Check the examples/ directory in this repository to see exactly how your input files should be structured!)

Step 2: Run the CLI Open your terminal inside the folder where you placed those files, and simply run:

barry

Step 3: Follow the Prompts Barry will launch an interactive UI and guide you to confirm your file paths and enter the Company Name. It will then securely generate a tailored JSON, compile it via LaTeX, and output your ATS-ready PDF directly into an output/ folder!

📄 File Formats

resume_data.json

The JSON structure Barry expects:

{
  "basics": {
    "name": "Jane Doe",
    "email": "[email protected]",
    "phone": "+1 555-123-4567",
    "linkedin": "https://linkedin.com/in/janedoe",
    "github": "https://github.com/janedoe",
    "website": "https://janedoe.com",
    "medium": "https://medium.com/@janedoe"
  },
  "skills": [
    { "category": "Languages", "items": ["Python", "JavaScript"] },
    { "category": "Frameworks", "items": ["React", "Node.js"] }
  ],
  "workExperience": [
    {
      "company": "Tech Corp",
      "role": "Software Engineer",
      "location": "San Francisco, CA",
      "duration": "June 2021 - Present",
      "details": [
        "Engineered scalable microservices using Node.js and Express.",
        "Reduced query latency by 30% through query optimisation."
      ]
    }
  ],
  "projects": [
    {
      "name": "Portfolio App",
      "technologies": ["React", "Tailwind CSS"],
      "link": "https://github.com/janedoe/portfolio",
      "details": [
        "Built a responsive portfolio app with modern frontend frameworks.",
        "Set up CI/CD via GitHub Actions for automated deployment."
      ]
    }
  ],
  "education": [
    {
      "institution": "State University",
      "degree": "B.S. in Computer Science",
      "duration": "Aug 2017 - May 2021"
    }
  ],
  "achievements": [
    {
      "title": "Hackathon Winner",
      "description": "First place in the 2020 Global Hackathon."
    }
  ],
  "positionsOfResponsibility": [
    {
      "role": "Club President",
      "organization": "CS Club",
      "location": "State University",
      "duration": "Jan 2020 - May 2021",
      "details": [
        "Organised workshops and hackathons for 200+ students."
      ]
    }
  ]
}

| Field | Type | Required | Description | |-------|------|----------|-------------| | basics | object | yes | Name, contact, and social links | | skills | array | yes | Array of { category, items } objects | | workExperience | array | yes | Array of { company, role, location, duration, details } | | projects | array | yes | Array of { name, technologies, link?, details } | | education | array | yes | Array of { institution, degree, duration } | | achievements | array | yes | Array of { title, description } | | positionsOfResponsibility | array | yes | Same structure as work experience |

resume_template.tex

A standard LaTeX resume template using these custom commands:

| Command | Usage | |---------|-------| | \resumeItem{text} | A single bullet point | | \resumeSubheading{title}{duration}{company}{location} | Experience/education entry header | | \resumeProjectHeading{title}{} | Project entry header | | \resumeSubItem{text} | Compact single-line item | | \resumeSubHeadingListStart/End | Wrapper for subheading blocks | | \resumeItemListStart/End | Wrapper for bullet lists |

Barry replaces these placeholders in your template:

| Placeholder | Source | |-------------|--------| | {{NAME}}, {{PHONE}}, {{EMAIL}} | basics | | {{LINKEDIN_URL}}, {{GITHUB_URL}} | basics | | {{PORTFOLIO_URL}}, {{MEDIUM_URL}} | basics | | {{SKILLS_ITEMS}} | skills (auto-generated) | | {{EXPERIENCE_BLOCK}} | workExperience (auto-generated) | | {{PROJECTS_BLOCK}} | projects (auto-generated) | | {{EDUCATION_BLOCK}} | education (auto-generated) | | {{ACHIEVEMENTS_BLOCK}} | achievements (auto-generated) | | {{POR_BLOCK}} | positionsOfResponsibility (auto-generated) |

You can customise the styling (fonts, margins, section order) as long as you keep the {{PLACEHOLDERS}} intact. See examples/resume_template.tex for a complete reference.

🤝 Contributing

Contributions, issues and feature requests are always welcome!