resuml 1.18.0 → 1.19.0
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.
- package/README.md +43 -350
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
<h1 align="center">✨
|
|
2
|
-
<p align="center"><strong>
|
|
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,22 @@
|
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
<p align="center">
|
|
12
|
-
|
|
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
|
-
|
|
17
|
+
## Two ways to use it
|
|
20
18
|
|
|
21
|
-
|
|
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 |
|
|
56
|
-
|
|
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.
|
|
58
|
-
|
|
59
|
-
## Prerequisites
|
|
60
|
-
|
|
61
|
-
- Node.js >= 20.0.0
|
|
62
|
-
- npm >= 10.0.0
|
|
63
|
-
|
|
64
|
-
## Installation
|
|
65
|
-
|
|
66
|
-
```bash
|
|
67
|
-
npm install -g resuml
|
|
68
|
-
```
|
|
69
|
-
|
|
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
|
|
19
|
+
### 🌐 [resuml.app](https://resuml.app) — the web app
|
|
87
20
|
|
|
88
|
-
|
|
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 |
|
|
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.
|
|
95
22
|
|
|
96
|
-
|
|
23
|
+
### 🤖 With Claude Code / AI agents (MCP)
|
|
97
24
|
|
|
98
|
-
|
|
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 |
|
|
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.
|
|
109
26
|
|
|
110
|
-
|
|
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
|
|
115
|
-
|
|
116
|
-
```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
|
|
157
|
-
```
|
|
158
|
-
|
|
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`:
|
|
186
|
-
|
|
187
|
-
```bash
|
|
188
|
-
npm install jsonresume-theme-stackoverflow
|
|
189
|
-
resuml render --resume resume.yaml --theme stackoverflow
|
|
190
|
-
```
|
|
191
|
-
|
|
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:
|
|
27
|
+
Add to your Claude Code config (`.claude.json` or via `claude mcp add`):
|
|
311
28
|
|
|
312
29
|
```json
|
|
313
30
|
{
|
|
@@ -320,79 +37,55 @@ Add to your Claude Desktop or MCP client config:
|
|
|
320
37
|
}
|
|
321
38
|
```
|
|
322
39
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
```bash
|
|
326
|
-
resuml mcp
|
|
327
|
-
```
|
|
328
|
-
|
|
329
|
-
### Available Tools
|
|
40
|
+
Then ask Claude things like:
|
|
330
41
|
|
|
331
|
-
|
|
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) |
|
|
42
|
+
> "Tailor my resume at `resume.yaml` to this job description, hit ATS score ≥ 80, and render it with the stackoverflow theme."
|
|
339
43
|
|
|
340
|
-
|
|
44
|
+
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
45
|
|
|
342
|
-
|
|
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 |
|
|
46
|
+
---
|
|
359
47
|
|
|
360
|
-
|
|
48
|
+
## Or use the CLI
|
|
361
49
|
|
|
362
|
-
|
|
50
|
+
```bash
|
|
51
|
+
npm install -g resuml
|
|
363
52
|
|
|
364
|
-
|
|
53
|
+
resuml validate --resume resume.yaml --ats --jd job.txt
|
|
54
|
+
resuml render --resume resume.yaml --theme stackoverflow --output resume.html
|
|
55
|
+
resuml pdf --resume resume.yaml --theme stackoverflow --output resume.pdf
|
|
56
|
+
```
|
|
365
57
|
|
|
366
|
-
|
|
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
|
|
58
|
+
**Minimal `resume.yaml`:**
|
|
372
59
|
|
|
373
|
-
|
|
60
|
+
```yaml
|
|
61
|
+
basics:
|
|
62
|
+
name: Jane Smith
|
|
63
|
+
label: Senior Software Engineer
|
|
64
|
+
email: jane@example.com
|
|
65
|
+
summary: >-
|
|
66
|
+
Engineer with 8+ years building scalable distributed systems.
|
|
67
|
+
work:
|
|
68
|
+
- name: Acme Corp
|
|
69
|
+
position: Lead Engineer
|
|
70
|
+
startDate: 2020-01-15
|
|
71
|
+
highlights:
|
|
72
|
+
- Reduced deploy time by 60%
|
|
73
|
+
- Led team of 12 engineers
|
|
74
|
+
```
|
|
374
75
|
|
|
375
|
-
|
|
76
|
+
Full CLI reference, Node.js API, ATS rubric, CI/CD setup, and every MCP tool live in **[DOCS.md](DOCS.md)**.
|
|
376
77
|
|
|
377
|
-
|
|
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
|
|
78
|
+
---
|
|
381
79
|
|
|
382
|
-
|
|
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
|
|
80
|
+
## Requirements
|
|
386
81
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
- Check if you have proper permissions to access the port
|
|
390
|
-
- Try a different port if the default is blocked
|
|
82
|
+
- Node.js ≥ 20, npm ≥ 10
|
|
83
|
+
- Nothing else — validation, ATS, rendering, and PDF all run locally
|
|
391
84
|
|
|
392
85
|
## Contributing
|
|
393
86
|
|
|
394
|
-
|
|
87
|
+
PRs welcome. See [DOCS.md](DOCS.md) for architecture and dev setup.
|
|
395
88
|
|
|
396
89
|
## License
|
|
397
90
|
|
|
398
|
-
ISC
|
|
91
|
+
ISC. Support the project: <a href="https://www.buymeacoffee.com/leekbeds55j">☕ Buy me a coffee</a>.
|