resuml 1.18.1 → 1.19.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +49 -338
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
- <h1 align="center">✨ Resuml</h1>
2
- <p align="center"><strong>Write your resume in YAML. Render it beautifully.</strong></p>
1
+ <h1 align="center">✨ resuml</h1>
2
+ <p align="center"><strong>Resume as code. YAML in, beautiful resume out.</strong></p>
3
3
 
4
4
  <p align="center">
5
5
  <a href="https://www.npmjs.com/package/resuml"><img src="https://img.shields.io/npm/v/resuml.svg" alt="npm version"></a>
@@ -9,305 +9,40 @@
9
9
  </p>
10
10
 
11
11
  <p align="center">
12
- <a href="https://www.buymeacoffee.com/leekbeds55j">
13
- <img src="https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png" width="150" />
14
- </a>
12
+ <a href="https://resuml.app"><strong>👉 Try it in your browser at resuml.app</strong></a>
15
13
  </p>
16
14
 
17
15
  ---
18
16
 
19
- ### YAML in Beautiful resume out
17
+ ## Two ways to use it
20
18
 
21
- ```yaml
22
- # resume.yaml
23
- basics:
24
- name: Jane Smith
25
- label: Senior Software Engineer
26
- email: jane@example.com
27
- summary: >-
28
- Passionate engineer with 8+ years
29
- building scalable distributed systems.
30
- work:
31
- - name: Acme Corp
32
- position: Lead Engineer
33
- startDate: 2020-01-15
34
- highlights:
35
- - Reduced deploy time by 60%
36
- - Led team of 12 engineers
37
- ```
38
-
39
- ```bash
40
- resuml render --resume resume.yaml --theme stackoverflow --output resume.html
41
- ```
42
-
43
- Your YAML becomes a polished, professional resume — ready to share, print, or export to PDF.
44
-
45
- ---
46
-
47
- ## Why YAML?
48
-
49
- | | YAML | JSON |
50
- |---|---|---|
51
- | **Comments** | ✅ `# explain your choices` | ❌ Not supported |
52
- | **Multi-line strings** | ✅ `summary: >-` block syntax | ❌ Escape everything |
53
- | **Readability** | ✅ Clean, minimal syntax | ⚠️ Brackets & quotes everywhere |
54
- | **Diffing** | ✅ Clean git diffs | ⚠️ Noisy diffs |
55
- | **Compatibility** | ✅ Valid JSON Resume schema | ✅ Native |
19
+ ### 🌐 [resuml.app](https://resuml.app) — the web app
56
20
 
57
- YAML is a superset of JSON your resume stays fully compatible with the [JSON Resume](https://jsonresume.org/) ecosystem while being far more pleasant to write and maintain.
21
+ Free, open source, no signup. Your resume data stays in your browser we don't store or track anything. Write in YAML or use the form editor, pick from 300+ themes, check your ATS match against a job description, and export to PDF.
58
22
 
59
- ## Prerequisites
23
+ ### 🤖 With Claude Code / AI agents (MCP)
60
24
 
61
- - Node.js >= 20.0.0
62
- - npm >= 10.0.0
25
+ resuml ships with a built-in [MCP server](https://modelcontextprotocol.io/) so Claude Code can read your resume, tailor it to a job description, check the ATS score, and render it — all from a chat.
63
26
 
64
- ## Installation
27
+ **One-command setup (recommended):**
65
28
 
66
29
  ```bash
67
- npm install -g resuml
30
+ claude mcp add resuml -- npx resuml mcp
68
31
  ```
69
32
 
70
- ## Quick Start
71
-
72
- 1. Create a YAML file for your resume (e.g., `resume.yaml`)
73
- 2. Validate your resume data:
74
- ```bash
75
- resuml validate --resume resume.yaml
76
- ```
77
- 3. Convert to JSON:
78
- ```bash
79
- resuml tojson --resume resume.yaml --output resume.json
80
- ```
81
- 4. Render with a theme:
82
- ```bash
83
- resuml render --resume resume.yaml --theme stackoverflow --output resume.html
84
- ```
85
-
86
- ## Commands
87
-
88
- | Command | Description |
89
- |---------|-------------|
90
- | `validate` | Validate resume data against the JSON Resume schema |
91
- | `validate --ats` | Run ATS (Applicant Tracking System) compatibility analysis |
92
- | `tojson` | Convert YAML resume data to JSON format |
93
- | `render` | Render the resume using a specified theme |
94
- | `dev` | Start a development server with hot-reload |
95
-
96
- ## Options
97
-
98
- | Option | Alias | Description |
99
- |--------|-------|-------------|
100
- | `--resume` | `-r` | Input YAML file(s) or directory |
101
- | `--output` | `-o` | Output file path |
102
- | `--theme` | `-t` | Theme to use for rendering |
103
- | `--port` | `-p` | Port for dev server (default: 3000) |
104
- | `--language` | | Language code for localization (default: `en`) |
105
- | `--debug` | | Enable debug mode for detailed errors |
106
- | `--ats` | | Run ATS compatibility analysis (with `validate`) |
107
- | `--jd` | | Path to job description file for keyword matching (with `--ats`) |
108
- | `--ats-threshold` | | Minimum ATS score (0-100); exits with code 1 if below |
109
-
110
- ## ATS Analysis
111
-
112
- Resumls built-in ATS (Applicant Tracking System) analysis helps ensure your resume passes automated screening. Fully offline and deterministic — no API keys or LLMs required.
113
-
114
- ### Quick Start
33
+ That registers resuml for the current project. Add `--scope user` to make it available across all projects:
115
34
 
116
35
  ```bash
117
- # Basic ATS score
118
- resuml validate --resume resume.yaml --ats
119
-
120
- # Match against a specific job description
121
- resuml validate --resume resume.yaml --ats --jd job-description.txt
122
-
123
- # CI/CD gate: fail if score is below threshold
124
- resuml validate --resume resume.yaml --ats --ats-threshold 75
125
-
126
- # Machine-readable JSON output
127
- resuml validate --resume resume.yaml --ats --format json
128
- ```
129
-
130
- ### What It Checks
131
-
132
- The ATS engine runs 11 deterministic checks across 3 categories:
133
-
134
- **Contact Information**
135
- - Complete contact details (name, email, phone, city)
136
- - LinkedIn profile present
137
-
138
- **Content Quality**
139
- - Professional summary (length and presence)
140
- - Work highlights (minimum 2 per entry)
141
- - Action verbs (highlights start with strong verbs)
142
- - Quantified impact (numbers, percentages, metrics in highlights)
143
- - No first-person pronouns
144
-
145
- **Resume Structure**
146
- - Date consistency (no unexplained gaps > 6 months)
147
- - Skills populated (≥ 3 categories with keywords)
148
- - Education completeness
149
- - Essential sections present (basics, work, education, skills)
150
-
151
- ### Job Description Matching
152
-
153
- Provide a job description file to get keyword matching:
154
-
155
- ```bash
156
- resuml validate --resume resume.yaml --ats --jd job.txt
36
+ claude mcp add --scope user resuml -- npx resuml mcp
157
37
  ```
158
38
 
159
- The engine extracts keywords from the job description using TF-based ranking with stem matching, then compares them against your resume. You get:
160
- - **Match percentage** — how many JD keywords appear in your resume
161
- - **Matched keywords** — what you already cover
162
- - **Missing keywords** — what to consider adding
163
-
164
- ### Scoring
165
-
166
- | Score | Rating | Meaning |
167
- |-------|--------|-------------|
168
- | 90-100 | Excellent | Resume is well-optimized for ATS |
169
- | 75-89 | Good | Minor improvements possible |
170
- | 60-74 | Needs Work | Several issues to address |
171
- | 0-59 | Poor | Significant improvements needed |
172
-
173
- When a job description is provided, the final score is 60% generic checks + 40% keyword match.
174
-
175
- ### Multi-Language Support
176
-
177
- ATS checks support English and German, with language-specific action verb lists and pronoun detection. Use the `--language` flag:
178
-
179
- ```bash
180
- resuml validate --resume lebenslauf.yaml --ats --language de
181
- ```
182
-
183
- ## Compatible Themes
184
-
185
- Resuml supports themes from the JSON Resume ecosystem. Install a theme, then pass its name to `--theme`:
39
+ Verify it's wired up:
186
40
 
187
41
  ```bash
188
- npm install jsonresume-theme-stackoverflow
189
- resuml render --resume resume.yaml --theme stackoverflow
42
+ claude mcp list
190
43
  ```
191
44
 
192
- | Theme | Install | Style |
193
- |-------|---------|-------|
194
- | [stackoverflow](https://github.com/francoislaberge/jsonresume-theme-stackoverflow) | `npm i jsonresume-theme-stackoverflow` | Clean, professional |
195
- | [elegant](https://github.com/mudassir0909/jsonresume-theme-elegant) | `npm i jsonresume-theme-elegant` | Modern, elegant |
196
- | [kendall](https://github.com/LinuxBozo/jsonresume-theme-kendall) | `npm i jsonresume-theme-kendall` | Minimal, classic |
197
- | [flat](https://github.com/erming/jsonresume-theme-flat) | `npm i jsonresume-theme-flat` | Flat design |
198
- | [onepage](https://github.com/aonemd/jsonresume-theme-onepage) | `npm i jsonresume-theme-onepage` | Single page |
199
-
200
- > Browse all themes at [jsonresume.org/themes](https://jsonresume.org/themes/) — any `jsonresume-theme-*` package works with resuml.
201
-
202
- ## Examples
203
-
204
- For detailed examples and usage instructions, see the [examples/README.md](examples/README.md) file.
205
-
206
- ## Example YAML Structure
207
-
208
- ```yaml
209
- basics:
210
- name: John Doe
211
- label: Software Engineer
212
- email: john@example.com
213
- summary: Experienced software engineer...
214
- location:
215
- city: San Francisco
216
- countryCode: US
217
- profiles:
218
- - network: GitHub
219
- url: https://github.com/johndoe
220
-
221
- work:
222
- - company: Tech Corp
223
- position: Senior Engineer
224
- startDate: 2020-01
225
- endDate: Present
226
- summary: Led development of...
227
- ```
228
-
229
- ## CI/CD: Auto-build on Push
230
-
231
- Use GitHub Actions to automatically rebuild your resume when you push changes:
232
-
233
- ```yaml
234
- # .github/workflows/resume.yml
235
- name: Build Resume
236
-
237
- on:
238
- push:
239
- paths: ['resume.yaml', 'resume/*.yaml']
240
-
241
- jobs:
242
- build:
243
- runs-on: ubuntu-latest
244
- steps:
245
- - uses: actions/checkout@v4
246
-
247
- - uses: actions/setup-node@v4
248
- with:
249
- node-version: 20
250
-
251
- - run: npm install -g resuml
252
- - run: npm install jsonresume-theme-stackoverflow
253
-
254
- # Validate and check ATS score (fails if below 75)
255
- - run: resuml validate --resume resume.yaml --ats --ats-threshold 75
256
-
257
- - run: resuml render --resume resume.yaml --theme stackoverflow --output resume.html
258
- - run: resuml tojson --resume resume.yaml --output resume.json
259
-
260
- - uses: actions/upload-artifact@v4
261
- with:
262
- name: resume
263
- path: |
264
- resume.html
265
- resume.json
266
- ```
267
-
268
- ## Node.js API Usage
269
-
270
- You can use resuml programmatically from Node.js:
271
-
272
- ```js
273
- import {
274
- processResumeData,
275
- loadResumeFiles,
276
- loadTheme,
277
- themeRender,
278
- analyzeAts
279
- } from 'resuml';
280
-
281
- // Load YAML files
282
- const { yamlContents } = await loadResumeFiles('resume.yaml');
283
- // Validate and merge
284
- const resume = await processResumeData(yamlContents);
285
- // Load a theme
286
- const theme = await loadTheme('stackoverflow');
287
- // Render HTML
288
- const html = await theme.render(resume, { locale: 'en' });
289
-
290
- // ATS analysis
291
- const atsResult = analyzeAts(resume, { language: 'en' });
292
- console.log(`ATS Score: ${atsResult.score}/100`);
293
-
294
- // With job description matching
295
- const jdResult = analyzeAts(resume, {
296
- language: 'en',
297
- jobDescription: 'Looking for a senior TypeScript developer...'
298
- });
299
- console.log(`Matched keywords: ${jdResult.keywords?.matched.join(', ')}`);
300
- ```
301
-
302
- See the CLI and API for more details.
303
-
304
- ## AI Agent Integration (MCP)
305
-
306
- Resuml includes a built-in [Model Context Protocol](https://modelcontextprotocol.io/) (MCP) server, making it the first resume tool with native AI agent support. Use it with Claude, GitHub Copilot, Cursor, or any MCP-compatible client.
307
-
308
- ### Setup
309
-
310
- Add to your Claude Desktop or MCP client config:
45
+ **Or, for teams sharing the config via git**, create `.mcp.json` at the repo root:
311
46
 
312
47
  ```json
313
48
  {
@@ -320,79 +55,55 @@ Add to your Claude Desktop or MCP client config:
320
55
  }
321
56
  ```
322
57
 
323
- Or run directly:
324
-
325
- ```bash
326
- resuml mcp
327
- ```
328
-
329
- ### Available Tools
58
+ Then ask Claude Code things like:
330
59
 
331
- | Tool | Purpose |
332
- |------|---------|
333
- | `resuml_init_resume` | Generate a starter YAML template |
334
- | `resuml_validate` | Validate resume YAML against JSON Resume schema |
335
- | `resuml_ats_check` | ATS analysis + job description keyword matching |
336
- | `resuml_render` | Render resume to HTML using a theme |
337
- | `resuml_list_themes` | List available themes and install status |
338
- | `resuml_export_pdf` | Export resume as PDF (requires Playwright) |
60
+ > "Tailor my resume at `resume.yaml` to this job description, hit ATS score ≥ 80, and render it with the stackoverflow theme."
339
61
 
340
- ### Resources
62
+ Claude will generate the YAML, validate it, iterate until the score clears, and render the final HTML. See **[DOCS.md](DOCS.md#ai-agent-integration-mcp)** for all tools, resources, and prompts.
341
63
 
342
- The MCP server exposes structured data agents can read:
343
-
344
- | Resource | URI | Description |
345
- |----------|-----|-------------|
346
- | JSON Resume Schema | `resuml://schema/json-resume` | Full schema reference with all sections and field types |
347
- | ATS Scoring Rubric | `resuml://docs/ats-scoring` | Scoring system, checks performed, and optimization tips |
348
- | Theme Catalog | `resuml://themes/catalog` | Available themes with descriptions and install status |
349
-
350
- ### Prompts
351
-
352
- Pre-built workflows for common tasks:
353
-
354
- | Prompt | Description |
355
- |--------|-------------|
356
- | `tailor-resume-to-jd` | Generate a tailored resume optimized for a specific job description |
357
- | `optimize-ats-score` | Analyze and improve an existing resume to maximize ATS score |
358
- | `review-resume` | Comprehensive review with ATS analysis and improvement suggestions |
64
+ ---
359
65
 
360
- ### Example Workflow
66
+ ## Or use the CLI
361
67
 
362
- Ask your AI assistant:
68
+ ```bash
69
+ npm install -g resuml
363
70
 
364
- > "Use the tailor-resume-to-jd prompt to create a resume for this job posting: [paste JD]. My name is Jane Smith, jane@example.com. I have 5 years of experience in TypeScript and React."
71
+ resuml validate --resume resume.yaml --ats --jd job.txt
72
+ resuml render --resume resume.yaml --theme stackoverflow --output resume.html
73
+ resuml pdf --resume resume.yaml --theme stackoverflow --output resume.pdf
74
+ ```
365
75
 
366
- The agent will:
367
- 1. Generate tailored resume YAML matching the job description keywords
368
- 2. Validate it against the JSON Resume schema
369
- 3. Run ATS analysis targeting score ≥ 75
370
- 4. Iterate until the score meets the target
371
- 5. Render the final result with a professional theme
76
+ **Minimal `resume.yaml`:**
372
77
 
373
- ## Troubleshooting
78
+ ```yaml
79
+ basics:
80
+ name: Jane Smith
81
+ label: Senior Software Engineer
82
+ email: jane@example.com
83
+ summary: >-
84
+ Engineer with 8+ years building scalable distributed systems.
85
+ work:
86
+ - name: Acme Corp
87
+ position: Lead Engineer
88
+ startDate: 2020-01-15
89
+ highlights:
90
+ - Reduced deploy time by 60%
91
+ - Led team of 12 engineers
92
+ ```
374
93
 
375
- ### Common Issues
94
+ Full CLI reference, Node.js API, ATS rubric, CI/CD setup, and every MCP tool live in **[DOCS.md](DOCS.md)**.
376
95
 
377
- 1. **Validation Errors**
378
- - Ensure your YAML follows the JSON Resume schema
379
- - Check for proper indentation in your YAML file
380
- - Verify all required fields are present
96
+ ---
381
97
 
382
- 2. **Theme Rendering Issues**
383
- - Make sure the theme is properly installed
384
- - Check if all required theme dependencies are installed
385
- - Try running with `--debug` flag for more information
98
+ ## Requirements
386
99
 
387
- 3. **Development Server Issues**
388
- - Ensure the specified port is available
389
- - Check if you have proper permissions to access the port
390
- - Try a different port if the default is blocked
100
+ - Node.js 20, npm ≥ 10
101
+ - Nothing else validation, ATS, rendering, and PDF all run locally
391
102
 
392
103
  ## Contributing
393
104
 
394
- Contributions are welcome! Please feel free to submit a Pull Request.
105
+ PRs welcome. See [DOCS.md](DOCS.md) for architecture and dev setup.
395
106
 
396
107
  ## License
397
108
 
398
- ISC
109
+ ISC. Support the project: <a href="https://www.buymeacoffee.com/leekbeds55j">☕ Buy me a coffee</a>.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "resuml",
3
- "version": "1.18.1",
3
+ "version": "1.19.1",
4
4
  "description": "Generate JSON resumes from YAML with theme support",
5
5
  "type": "module",
6
6
  "main": "./dist/api.js",