linkedin-resume 0.0.2 → 0.1.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.
- package/README.md +132 -17
- package/dist/linkedin-resume.cjs +318067 -2897
- package/package.json +19 -8
- package/resume.schema.json +351 -0
- package/dist/linkedin-resume.cjs.map +0 -7
package/README.md
CHANGED
|
@@ -1,39 +1,154 @@
|
|
|
1
1
|
# linkedin-resume
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
A CLI tool that scrapes your LinkedIn profile and generates a professionally styled resume as PDF and HTML.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Automated LinkedIn scraping** - Extracts your profile, work experience, education, projects, skills, recommendations, and languages using Puppeteer.
|
|
8
|
+
- **HTML resume generation** - Renders a clean, LinkedIn-style HTML resume with grouped work experience, skill pills, and recommendation links.
|
|
9
|
+
- **PDF output** - Converts the HTML resume to PDF via headless Chrome (Windows).
|
|
10
|
+
- **Configurable** - Control output path, extra profiles (e.g. GitHub), and selectively ignore resume sections or specific entries.
|
|
11
|
+
- **Persistent login** - Uses a dedicated Chrome profile so you only need to log in to LinkedIn once.
|
|
6
12
|
|
|
7
13
|
## Installation
|
|
8
14
|
|
|
9
15
|
```sh
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
npm install -g linkedin-resume
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick start
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
# First run - prompts for your LinkedIn username and creates a config file
|
|
23
|
+
linkedin-resume
|
|
12
24
|
|
|
13
|
-
#
|
|
14
|
-
|
|
25
|
+
# Open the config file in VS Code to customize settings
|
|
26
|
+
linkedin-resume config
|
|
15
27
|
|
|
16
|
-
#
|
|
17
|
-
linkedin-resume --
|
|
28
|
+
# Re-render without scraping again (useful for config tweaks)
|
|
29
|
+
linkedin-resume --render
|
|
18
30
|
```
|
|
19
31
|
|
|
20
|
-
##
|
|
32
|
+
## Usage
|
|
21
33
|
|
|
22
34
|
```
|
|
23
35
|
Usage: linkedin-resume [options] [command]
|
|
24
36
|
|
|
25
|
-
|
|
37
|
+
A CLI tool to generate a LinkedIn resume in PDF format.
|
|
38
|
+
|
|
39
|
+
Arguments:
|
|
40
|
+
outputFilepath Optional filepath. Defaults to value set in config file.
|
|
26
41
|
|
|
27
42
|
Options:
|
|
28
|
-
-V, --version
|
|
29
|
-
|
|
43
|
+
-V, --version output the version number
|
|
44
|
+
--debug enable debug output
|
|
45
|
+
--render skip scraping, only render
|
|
46
|
+
--headless hide scraping browser window
|
|
47
|
+
--keep-open keep browser open after scraping
|
|
48
|
+
-h, --help display help for command
|
|
30
49
|
|
|
31
50
|
Commands:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
51
|
+
config [options] Create or update config file with LinkedIn username and other settings
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Examples
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
# Scrape and generate with browser visible (default)
|
|
58
|
+
linkedin-resume
|
|
59
|
+
|
|
60
|
+
# Scrape in headless mode
|
|
61
|
+
linkedin-resume --headless
|
|
62
|
+
|
|
63
|
+
# Skip scraping, re-render from previously scraped data
|
|
64
|
+
linkedin-resume --render
|
|
65
|
+
|
|
66
|
+
# Output PDF to a custom path
|
|
67
|
+
linkedin-resume ~/Documents/my-resume.pdf
|
|
68
|
+
|
|
69
|
+
# Print the config file path
|
|
70
|
+
linkedin-resume config --path
|
|
71
|
+
|
|
72
|
+
# Open the config file in VS Code for editing
|
|
73
|
+
linkedin-resume config
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## How it works
|
|
77
|
+
|
|
78
|
+
1. **Login check** - Ensures you are logged in to LinkedIn via a persistent Chrome profile.
|
|
79
|
+
2. **Scrape** - Opens multiple LinkedIn pages in parallel (profile, experience, education, projects, skills, recommendations) and saves the scraped data as JSON files.
|
|
80
|
+
3. **Render JSON** - Merges all scraped data into a single `resume.json` conforming to the [Resume schema](./src/resume.schema.json).
|
|
81
|
+
4. **Render HTML** - Generates a styled `resume.html` from the resume data, applying any ignore filters from your config.
|
|
82
|
+
5. **Render PDF** - Converts the HTML to PDF using headless Chrome and copies it to your configured output path.
|
|
83
|
+
|
|
84
|
+
## Configuration
|
|
85
|
+
|
|
86
|
+
The config file is created automatically on first run and stored in your system's app data directory. Open it with:
|
|
87
|
+
|
|
88
|
+
```sh
|
|
89
|
+
linkedin-resume config
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Config file structure
|
|
93
|
+
|
|
94
|
+
```jsonc
|
|
95
|
+
{
|
|
96
|
+
// Your LinkedIn username (from your profile URL)
|
|
97
|
+
"linkedInUsername": "johndoe",
|
|
98
|
+
|
|
99
|
+
// Where to save the generated PDF. Supports environment variables.
|
|
100
|
+
"outputFilepath": "$USERPROFILE/Desktop/resume.pdf",
|
|
101
|
+
|
|
102
|
+
// Additional profiles to display in the resume header
|
|
103
|
+
"profiles": [
|
|
104
|
+
{
|
|
105
|
+
"network": "GitHub",
|
|
106
|
+
"username": "johndoe",
|
|
107
|
+
"url": "https://github.com/johndoe",
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
|
|
111
|
+
// Selectively ignore sections or specific entries when rendering
|
|
112
|
+
"ignore": {
|
|
113
|
+
// Set to true to hide the entire section, or an array to hide specific entries
|
|
114
|
+
"work": [{ "name": "Company Inc.", "position": "Intern" }],
|
|
115
|
+
"education": false,
|
|
116
|
+
"projects": [{ "name": "Old Project" }],
|
|
117
|
+
"skills": [{ "name": "Microsoft Word" }],
|
|
118
|
+
"languages": false,
|
|
119
|
+
"recommendations": false,
|
|
120
|
+
},
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Ignore filters
|
|
125
|
+
|
|
126
|
+
Each section in `ignore` accepts either:
|
|
127
|
+
|
|
128
|
+
- **`true`** - Hides the entire section from the rendered resume.
|
|
129
|
+
- **An array of partial objects** - Hides only entries whose primitive fields match all specified values. For example, `{ "name": "Acme Corp", "position": "Intern" }` ignores only the entry where both fields match.
|
|
130
|
+
|
|
131
|
+
Supported fields per section:
|
|
132
|
+
|
|
133
|
+
| Section | Matchable fields |
|
|
134
|
+
| ----------------- | ---------------------------------------------------------------------------------------- |
|
|
135
|
+
| `work` | `name`, `location`, `position`, `startDate`, `endDate`, `duration`, `summary`, `logoUrl` |
|
|
136
|
+
| `education` | `institution`, `area`, `studyType`, `startDate`, `endDate`, `score`, `logoUrl` |
|
|
137
|
+
| `projects` | `name`, `description`, `startDate`, `endDate`, `entity`, `type`, `url`, `logoUrl` |
|
|
138
|
+
| `skills` | `name` |
|
|
139
|
+
| `languages` | `language`, `fluency` |
|
|
140
|
+
| `recommendations` | `name`, `headline`, `date`, `relationship`, `logoUrl` |
|
|
141
|
+
|
|
142
|
+
## Requirements
|
|
143
|
+
|
|
144
|
+
- **Node.js** >= 18
|
|
145
|
+
- **Google Chrome** - Required for PDF generation (Windows only; uses headless Chrome at the default install path).
|
|
146
|
+
- **LinkedIn account** - You will be prompted to log in on first run.
|
|
147
|
+
|
|
148
|
+
## Uninstall
|
|
149
|
+
|
|
150
|
+
```sh
|
|
151
|
+
npm uninstall -g linkedin-resume
|
|
37
152
|
```
|
|
38
153
|
|
|
39
154
|
## License
|