resuml 2.0.0 → 3.0.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/DOCS.md +64 -58
- package/data/skills/emerging.json +59 -11
- package/data/skills/skills.json +14964 -1
- package/dist/chunk-R4MD5YMV.js +17434 -0
- package/dist/chunk-R4MD5YMV.js.map +1 -0
- package/dist/index.d.ts +62 -32
- package/dist/index.js +151 -64
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.js +129 -134
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-GRIYYG45.js +0 -1861
- package/dist/chunk-GRIYYG45.js.map +0 -1
package/DOCS.md
CHANGED
|
@@ -18,13 +18,13 @@
|
|
|
18
18
|
|
|
19
19
|
## Why YAML
|
|
20
20
|
|
|
21
|
-
|
|
|
22
|
-
|
|
23
|
-
| **Comments**
|
|
24
|
-
| **Multi-line strings** | ✅ `summary: >-` block syntax | ❌ Escape everything
|
|
25
|
-
| **Readability**
|
|
26
|
-
| **Diffing**
|
|
27
|
-
| **Compatibility**
|
|
21
|
+
| | YAML | JSON |
|
|
22
|
+
| ---------------------- | ----------------------------- | ------------------------------- |
|
|
23
|
+
| **Comments** | ✅ `# explain your choices` | ❌ Not supported |
|
|
24
|
+
| **Multi-line strings** | ✅ `summary: >-` block syntax | ❌ Escape everything |
|
|
25
|
+
| **Readability** | ✅ Clean, minimal syntax | ⚠️ Brackets & quotes everywhere |
|
|
26
|
+
| **Diffing** | ✅ Clean git diffs | ⚠️ Noisy diffs |
|
|
27
|
+
| **Compatibility** | ✅ Valid JSON Resume schema | ✅ Native |
|
|
28
28
|
|
|
29
29
|
YAML is a superset of JSON, so your resume stays fully compatible with the [JSON Resume](https://jsonresume.org/) ecosystem.
|
|
30
30
|
|
|
@@ -38,30 +38,30 @@ Requires Node.js ≥ 20 and npm ≥ 10.
|
|
|
38
38
|
|
|
39
39
|
## CLI commands and options
|
|
40
40
|
|
|
41
|
-
| Command
|
|
42
|
-
|
|
43
|
-
| `validate`
|
|
44
|
-
| `validate --ats` | Run ATS compatibility analysis
|
|
45
|
-
| `tojson`
|
|
46
|
-
| `render`
|
|
47
|
-
| `pdf`
|
|
48
|
-
| `dev`
|
|
49
|
-
| `mcp`
|
|
41
|
+
| Command | Description |
|
|
42
|
+
| ---------------- | --------------------------------------------------- |
|
|
43
|
+
| `validate` | Validate resume data against the JSON Resume schema |
|
|
44
|
+
| `validate --ats` | Run ATS compatibility analysis |
|
|
45
|
+
| `tojson` | Convert YAML to JSON |
|
|
46
|
+
| `render` | Render the resume to HTML using a theme |
|
|
47
|
+
| `pdf` | Render to PDF |
|
|
48
|
+
| `dev` | Dev server with hot-reload |
|
|
49
|
+
| `mcp` | Start the MCP server for AI agents |
|
|
50
50
|
|
|
51
51
|
### Options
|
|
52
52
|
|
|
53
|
-
| Option
|
|
54
|
-
|
|
55
|
-
| `--resume`
|
|
56
|
-
| `--output`
|
|
57
|
-
| `--theme`
|
|
58
|
-
| `--port`
|
|
59
|
-
| `--language`
|
|
60
|
-
| `--debug`
|
|
61
|
-
| `--ats`
|
|
62
|
-
| `--jd`
|
|
63
|
-
| `--ats-threshold` |
|
|
64
|
-
| `--format`
|
|
53
|
+
| Option | Alias | Description |
|
|
54
|
+
| ----------------- | ----- | -------------------------------------------- |
|
|
55
|
+
| `--resume` | `-r` | Input YAML file(s) or directory |
|
|
56
|
+
| `--output` | `-o` | Output file path |
|
|
57
|
+
| `--theme` | `-t` | Theme name |
|
|
58
|
+
| `--port` | `-p` | Dev server port (default: 3000) |
|
|
59
|
+
| `--language` | | Locale (default: `en`) |
|
|
60
|
+
| `--debug` | | Detailed errors |
|
|
61
|
+
| `--ats` | | Run ATS analysis (with `validate`) |
|
|
62
|
+
| `--jd` | | Path to job description file (with `--ats`) |
|
|
63
|
+
| `--ats-threshold` | | Minimum score (0-100); exits 1 if below |
|
|
64
|
+
| `--format` | | Output format for validate: `text` or `json` |
|
|
65
65
|
|
|
66
66
|
### Quick start
|
|
67
67
|
|
|
@@ -94,10 +94,12 @@ resuml validate --resume resume.yaml --ats --format json
|
|
|
94
94
|
11 deterministic checks across 3 categories.
|
|
95
95
|
|
|
96
96
|
**Contact information**
|
|
97
|
+
|
|
97
98
|
- Complete contact details (name, email, phone, city)
|
|
98
99
|
- LinkedIn profile present
|
|
99
100
|
|
|
100
101
|
**Content quality**
|
|
102
|
+
|
|
101
103
|
- Professional summary (length and presence)
|
|
102
104
|
- Work highlights (≥ 2 per entry)
|
|
103
105
|
- Action verbs (highlights start with strong verbs)
|
|
@@ -105,6 +107,7 @@ resuml validate --resume resume.yaml --ats --format json
|
|
|
105
107
|
- No first-person pronouns
|
|
106
108
|
|
|
107
109
|
**Resume structure**
|
|
110
|
+
|
|
108
111
|
- Date consistency (no unexplained gaps > 6 months)
|
|
109
112
|
- Skills populated (≥ 3 categories with keywords)
|
|
110
113
|
- Education completeness
|
|
@@ -121,12 +124,12 @@ Passing `--jd` extracts keywords from the job description using TF-based ranking
|
|
|
121
124
|
|
|
122
125
|
### Scoring
|
|
123
126
|
|
|
124
|
-
| Score
|
|
125
|
-
|
|
126
|
-
| 90-100 | Excellent
|
|
127
|
-
| 75-89
|
|
128
|
-
| 60-74
|
|
129
|
-
| 0-59
|
|
127
|
+
| Score | Rating | Meaning |
|
|
128
|
+
| ------ | ---------- | ------------------------------- |
|
|
129
|
+
| 90-100 | Excellent | Well-optimized for ATS |
|
|
130
|
+
| 75-89 | Good | Minor improvements possible |
|
|
131
|
+
| 60-74 | Needs Work | Several issues to address |
|
|
132
|
+
| 0-59 | Poor | Significant improvements needed |
|
|
130
133
|
|
|
131
134
|
With a JD: final score = 60% generic checks + 40% keyword match.
|
|
132
135
|
|
|
@@ -147,13 +150,13 @@ npm install jsonresume-theme-stackoverflow
|
|
|
147
150
|
resuml render --resume resume.yaml --theme stackoverflow
|
|
148
151
|
```
|
|
149
152
|
|
|
150
|
-
| Theme
|
|
151
|
-
|
|
153
|
+
| Theme | Install | Style |
|
|
154
|
+
| ---------------------------------------------------------------------------------- | -------------------------------------- | ------------------- |
|
|
152
155
|
| [stackoverflow](https://github.com/francoislaberge/jsonresume-theme-stackoverflow) | `npm i jsonresume-theme-stackoverflow` | Clean, professional |
|
|
153
|
-
| [elegant](https://github.com/mudassir0909/jsonresume-theme-elegant)
|
|
154
|
-
| [kendall](https://github.com/LinuxBozo/jsonresume-theme-kendall)
|
|
155
|
-
| [flat](https://github.com/erming/jsonresume-theme-flat)
|
|
156
|
-
| [onepage](https://github.com/aonemd/jsonresume-theme-onepage)
|
|
156
|
+
| [elegant](https://github.com/mudassir0909/jsonresume-theme-elegant) | `npm i jsonresume-theme-elegant` | Modern |
|
|
157
|
+
| [kendall](https://github.com/LinuxBozo/jsonresume-theme-kendall) | `npm i jsonresume-theme-kendall` | Minimal |
|
|
158
|
+
| [flat](https://github.com/erming/jsonresume-theme-flat) | `npm i jsonresume-theme-flat` | Flat |
|
|
159
|
+
| [onepage](https://github.com/aonemd/jsonresume-theme-onepage) | `npm i jsonresume-theme-onepage` | Single-page |
|
|
157
160
|
|
|
158
161
|
Browse all at [jsonresume.org/themes](https://jsonresume.org/themes/). The web app at [resuml.app](https://resuml.app) bundles 300+ of them and renders live.
|
|
159
162
|
|
|
@@ -274,41 +277,44 @@ Claude Code will:
|
|
|
274
277
|
|
|
275
278
|
### Tools
|
|
276
279
|
|
|
277
|
-
| Tool
|
|
278
|
-
|
|
279
|
-
| `resuml_init_resume` | Generate a starter YAML template
|
|
280
|
-
| `resuml_validate`
|
|
281
|
-
| `resuml_ats_check`
|
|
282
|
-
| `resuml_render`
|
|
283
|
-
| `resuml_list_themes` | List available themes and install status
|
|
284
|
-
| `resuml_export_pdf`
|
|
280
|
+
| Tool | Purpose |
|
|
281
|
+
| -------------------- | --------------------------------------------------- |
|
|
282
|
+
| `resuml_init_resume` | Generate a starter YAML template |
|
|
283
|
+
| `resuml_validate` | Validate resume YAML against the JSON Resume schema |
|
|
284
|
+
| `resuml_ats_check` | ATS analysis + JD keyword matching |
|
|
285
|
+
| `resuml_render` | Render to HTML using a theme (supports `locale`) |
|
|
286
|
+
| `resuml_list_themes` | List available themes and install status |
|
|
287
|
+
| `resuml_export_pdf` | Export as PDF (supports `margin`, `locale`) |
|
|
285
288
|
|
|
286
289
|
### Resources
|
|
287
290
|
|
|
288
|
-
| URI
|
|
289
|
-
|
|
290
|
-
| `resuml://schema/json-resume` | Full JSON Resume schema reference
|
|
291
|
-
| `resuml://docs/ats-scoring`
|
|
292
|
-
| `resuml://themes/catalog`
|
|
291
|
+
| URI | Description |
|
|
292
|
+
| ----------------------------- | --------------------------------------------- |
|
|
293
|
+
| `resuml://schema/json-resume` | Full JSON Resume schema reference |
|
|
294
|
+
| `resuml://docs/ats-scoring` | ATS scoring rubric, checks, weights, and tips |
|
|
295
|
+
| `resuml://themes/catalog` | Available themes with descriptions |
|
|
293
296
|
|
|
294
297
|
### Prompts
|
|
295
298
|
|
|
296
|
-
| Prompt
|
|
297
|
-
|
|
298
|
-
| `tailor-resume-to-jd` | Tailor a resume for a specific job description
|
|
299
|
-
| `optimize-ats-score`
|
|
300
|
-
| `review-resume`
|
|
299
|
+
| Prompt | Description |
|
|
300
|
+
| --------------------- | -------------------------------------------------- |
|
|
301
|
+
| `tailor-resume-to-jd` | Tailor a resume for a specific job description |
|
|
302
|
+
| `optimize-ats-score` | Analyze and improve an existing resume's ATS score |
|
|
303
|
+
| `review-resume` | Comprehensive review + improvement suggestions |
|
|
301
304
|
|
|
302
305
|
## Troubleshooting
|
|
303
306
|
|
|
304
307
|
**Validation errors**
|
|
308
|
+
|
|
305
309
|
- Check YAML indentation and required fields
|
|
306
310
|
- Run with `--debug` for stack traces
|
|
307
311
|
|
|
308
312
|
**Theme rendering issues**
|
|
313
|
+
|
|
309
314
|
- Ensure the theme is installed (`npm install jsonresume-theme-<name>`)
|
|
310
315
|
- Third-party themes may have their own bugs. Try a different theme.
|
|
311
316
|
- The web app at [resuml.app](https://resuml.app) pre-checks themes and flags broken ones
|
|
312
317
|
|
|
313
318
|
**Dev server issues**
|
|
319
|
+
|
|
314
320
|
- The default port is 3000. Pass `--port` to override.
|
|
@@ -28,14 +28,23 @@
|
|
|
28
28
|
{ "canonical": "Jotai", "type": "library" },
|
|
29
29
|
{ "canonical": "Recoil", "type": "library" },
|
|
30
30
|
{ "canonical": "MobX", "type": "library" },
|
|
31
|
-
{
|
|
31
|
+
{
|
|
32
|
+
"canonical": "React Query",
|
|
33
|
+
"aliases": ["TanStack Query", "tanstack-query"],
|
|
34
|
+
"type": "library"
|
|
35
|
+
},
|
|
32
36
|
{ "canonical": "TanStack", "type": "library" },
|
|
33
37
|
{ "canonical": "SWR", "type": "library" },
|
|
34
38
|
{ "canonical": "tRPC", "type": "library" },
|
|
35
39
|
{ "canonical": "GraphQL", "type": "library", "hot": true },
|
|
36
40
|
{ "canonical": "Apollo", "aliases": ["Apollo Client", "Apollo GraphQL"], "type": "library" },
|
|
37
41
|
{ "canonical": "Relay", "type": "library" },
|
|
38
|
-
{
|
|
42
|
+
{
|
|
43
|
+
"canonical": "Tailwind CSS",
|
|
44
|
+
"aliases": ["Tailwind", "TailwindCSS"],
|
|
45
|
+
"type": "framework",
|
|
46
|
+
"hot": true
|
|
47
|
+
},
|
|
39
48
|
{ "canonical": "shadcn/ui", "aliases": ["shadcn", "shadcn ui"], "type": "library" },
|
|
40
49
|
{ "canonical": "Radix UI", "aliases": ["Radix"], "type": "library" },
|
|
41
50
|
{ "canonical": "Headless UI", "type": "library" },
|
|
@@ -69,7 +78,11 @@
|
|
|
69
78
|
{ "canonical": "Vitest", "type": "tool" },
|
|
70
79
|
{ "canonical": "Playwright", "type": "tool" },
|
|
71
80
|
{ "canonical": "Cypress", "type": "tool" },
|
|
72
|
-
{
|
|
81
|
+
{
|
|
82
|
+
"canonical": "Testing Library",
|
|
83
|
+
"aliases": ["React Testing Library", "RTL"],
|
|
84
|
+
"type": "library"
|
|
85
|
+
},
|
|
73
86
|
{ "canonical": "Mocha", "type": "tool" },
|
|
74
87
|
{ "canonical": "Chai", "type": "tool" },
|
|
75
88
|
|
|
@@ -113,7 +126,12 @@
|
|
|
113
126
|
{ "canonical": "NoSQL", "type": "language" },
|
|
114
127
|
|
|
115
128
|
{ "canonical": "AWS", "aliases": ["Amazon Web Services"], "type": "platform", "hot": true },
|
|
116
|
-
{
|
|
129
|
+
{
|
|
130
|
+
"canonical": "Google Cloud",
|
|
131
|
+
"aliases": ["GCP", "Google Cloud Platform"],
|
|
132
|
+
"type": "platform",
|
|
133
|
+
"hot": true
|
|
134
|
+
},
|
|
117
135
|
{ "canonical": "Microsoft Azure", "aliases": ["Azure"], "type": "platform", "hot": true },
|
|
118
136
|
{ "canonical": "Vercel", "type": "platform" },
|
|
119
137
|
{ "canonical": "Netlify", "type": "platform" },
|
|
@@ -157,7 +175,11 @@
|
|
|
157
175
|
{ "canonical": "dbt", "aliases": ["data build tool"], "type": "tool" },
|
|
158
176
|
{ "canonical": "Spark", "aliases": ["Apache Spark", "PySpark"], "type": "framework" },
|
|
159
177
|
{ "canonical": "Kafka", "aliases": ["Apache Kafka"], "type": "platform" },
|
|
160
|
-
{
|
|
178
|
+
{
|
|
179
|
+
"canonical": "RAG",
|
|
180
|
+
"aliases": ["Retrieval Augmented Generation", "retrieval-augmented generation"],
|
|
181
|
+
"type": "practice"
|
|
182
|
+
},
|
|
161
183
|
{ "canonical": "Vector Search", "type": "practice" },
|
|
162
184
|
{ "canonical": "Embeddings", "type": "practice" },
|
|
163
185
|
|
|
@@ -173,15 +195,28 @@
|
|
|
173
195
|
{ "canonical": "Sketch", "type": "tool" },
|
|
174
196
|
{ "canonical": "Miro", "type": "tool" },
|
|
175
197
|
|
|
176
|
-
{
|
|
177
|
-
|
|
198
|
+
{
|
|
199
|
+
"canonical": "CI/CD",
|
|
200
|
+
"aliases": ["CICD", "Continuous Integration", "Continuous Delivery", "Continuous Deployment"],
|
|
201
|
+
"type": "practice",
|
|
202
|
+
"hot": true
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"canonical": "REST API",
|
|
206
|
+
"aliases": ["RESTful API", "REST APIs", "REST"],
|
|
207
|
+
"type": "practice"
|
|
208
|
+
},
|
|
178
209
|
{ "canonical": "gRPC", "type": "practice" },
|
|
179
210
|
{ "canonical": "WebSockets", "aliases": ["WebSocket"], "type": "practice" },
|
|
180
211
|
{ "canonical": "Microservices", "type": "practice", "hot": true },
|
|
181
212
|
{ "canonical": "Monorepo", "aliases": ["monorepos"], "type": "practice" },
|
|
182
213
|
{ "canonical": "Serverless", "type": "practice" },
|
|
183
214
|
{ "canonical": "Edge Computing", "aliases": ["edge functions"], "type": "practice" },
|
|
184
|
-
{
|
|
215
|
+
{
|
|
216
|
+
"canonical": "Event-Driven Architecture",
|
|
217
|
+
"aliases": ["EDA", "event-driven"],
|
|
218
|
+
"type": "practice"
|
|
219
|
+
},
|
|
185
220
|
{ "canonical": "Domain-Driven Design", "aliases": ["DDD"], "type": "practice" },
|
|
186
221
|
{ "canonical": "Test-Driven Development", "aliases": ["TDD"], "type": "practice" },
|
|
187
222
|
{ "canonical": "Agile", "aliases": ["Scrum", "Kanban"], "type": "practice" },
|
|
@@ -196,12 +231,25 @@
|
|
|
196
231
|
{ "canonical": "Accessibility", "aliases": ["a11y", "WCAG"], "type": "practice", "hot": true },
|
|
197
232
|
{ "canonical": "Internationalization", "aliases": ["i18n"], "type": "practice" },
|
|
198
233
|
{ "canonical": "Observability", "type": "practice" },
|
|
199
|
-
{
|
|
234
|
+
{
|
|
235
|
+
"canonical": "Design Systems",
|
|
236
|
+
"aliases": ["Design System"],
|
|
237
|
+
"type": "practice",
|
|
238
|
+
"hot": true
|
|
239
|
+
},
|
|
200
240
|
{ "canonical": "Data Modeling", "aliases": ["Data Model", "Data Models"], "type": "practice" },
|
|
201
|
-
{
|
|
241
|
+
{
|
|
242
|
+
"canonical": "Technical Leadership",
|
|
243
|
+
"aliases": ["Tech Lead", "Tech Leadership"],
|
|
244
|
+
"type": "practice"
|
|
245
|
+
},
|
|
202
246
|
{ "canonical": "Mentoring", "type": "practice" },
|
|
203
247
|
{ "canonical": "Code Review", "aliases": ["Code Reviews"], "type": "practice" },
|
|
204
248
|
{ "canonical": "Stakeholder Management", "type": "practice" },
|
|
205
|
-
{
|
|
249
|
+
{
|
|
250
|
+
"canonical": "Cross-functional Collaboration",
|
|
251
|
+
"aliases": ["cross-functional"],
|
|
252
|
+
"type": "practice"
|
|
253
|
+
}
|
|
206
254
|
]
|
|
207
255
|
}
|