A minimal Node.js tool that turns a single Markdown file into a print-ready PDF resume, styled with custom CSS and rendered via Puppeteer.
npm install
npm run build # template.md -> template.pdf
node build.js my_resume.md # -> my_resume.pdf
node build.js my_resume.md output.pdf # custom output nameresume.md ──> build.js ──> resume.html ──> Puppeteer ──> resume.pdf
^
styles.css
- Parse the Markdown into structured header and body sections
- Render to HTML with inline SVG contact icons and semantic CSS classes
- Inject
styles.cssas the stylesheet - Open the HTML in headless Chromium and export as A4 PDF
# Full Name
**Job Title** | https://www.linkedin.com/in/handle | City, Country
Phone: +1 234 567 8900 · WeChat: handle · Email: name@example.com
## Summary
- First point.
- Second point.
## Experience
### Company — Role
*Start – End · City, Country*
- Bullet point.
## Education
- **University** — Degree *(Start – End)*Header: # for name, **Title** | URL | Location pipe-separated, contact fields joined by ·.
Experience: ### heading with Company — Role, followed by *Date · Location* in italics.
Education: list items as **School** — Degree *(Years)*.
Edit styles.css to tweak fonts, colors, spacing, or page margins. Changes take effect on the next build.
Puppeteer downloads its own Chromium by default. To use a local Chrome instead:
CHROME_PATH="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" node build.js├── build.js Entry point
├── styles.css Resume stylesheet
├── lib/
│ ├── parser.js Markdown -> structured data
│ ├── html.js Structured data -> HTML
│ └── pdf.js HTML -> PDF (Puppeteer)
├── package.json
└── *.md Resume source files
- Node.js >= 18
