extract-resume

Solid

Parse a resume's uploaded PDF into structured JSON (basics, experience, projects, skills, education) and save it to the editor.

Data & Documents 67 stars 17 forks Updated yesterday MIT

Install

View on GitHub

Quality Score: 84/100

Stars 20%
61
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Extract Resume - Source PDF → Structured Data Read a resume's uploaded source PDF and produce JSON matching the JobPilot resume schema, then save via the API. Inverse of the editor. ## Setup Follow `../_shared/setup.md`. The profile response provides `user.primaryResumeId`, `primaryResumeSourceAbsolutePath`, and `resumes` (every base with `id`, `label`, `sourceFilename`, `hasData`, `isPrimary`). ## Step 1: Resolve Target Parse the argument: - Integer → use that resume id. - Empty → use `user.primaryResumeId`. If no primary, stop: > No primary resume set. Pass an explicit id, or set a primary at <$JOBPILOT_WEB/resumes>. - `--force` (anywhere) → overwrite existing structured data. Otherwise refuse to overwrite (Step 3). Let `RESUME_ID` be the resolved id, `FORCE` be `true`/`false`. ```bash curl -fsS -H "authorization: Bearer $JOBPILOT_API_TOKEN" "$JOBPILOT_API/api/resumes/$RESUME_ID" ``` If 404, stop and report the id doesn't exist. ## Step 2: Verify Source PDF `sourceFilename` must be set. If `null`, stop: > Resume {id} ({label}) has no uploaded source PDF. Upload one at <$JOBPILOT_WEB/resumes/{id}>, then re-run. Resolve the absolute path: - Primary resume → prefer `primaryResumeSourceAbsolutePath`. - Otherwise → `${JOBPILOT_WORKSPACE_ROOT}/apps/api/storage/resumes/{sourceFilename}`. If `sourceMimeType !== "application/pdf"`, stop and ask the user to re-upload as PDF. ## Step 3: Refuse to Clobber If `content` is non-null and `FORCE === false`, stop: > Res...

Details

Author
suxrobGM
Repository
suxrobGM/jobpilot
Created
5 months ago
Last Updated
yesterday
Language
TypeScript
License
MIT

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category