Skip to content

ShreyashPG/ATS-Friendly-Resume-Template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📄 ATS-Friendly Resume Template

Generate a professional, ATS-optimized .docx resume programmatically with Node.js

Node.js npm License: MIT PRs Welcome

No Word templates. No Canva. No $19/month subscriptions. Just code.

View Sample Resume → · Read the Article → · Report a Bug


📸 Sample Output

This is what the generated resume.docx looks like when opened in Microsoft Word or Google Docs.

Sample ATS-Friendly Resume Output

🤔 Why Does This Exist?

70–80% of resumes are rejected by ATS (Applicant Tracking Systems) before a human ever reads them — often because of formatting issues, not missing qualifications.

Common ATS failure points:

  • ❌ Multi-column layouts the parser can't read linearly
  • ❌ Text inside tables, text boxes, or headers/footers
  • ❌ PDFs exported from Canva or Figma
  • ❌ Non-standard section headings ("My Journey" vs "Experience")
  • ❌ Icons and graphics replacing actual text

This script generates a .docx file — the gold standard format for ATS compatibility — with clean semantic structure, standard section headings, and zero layout tricks that could trip up a parser.


✨ Features

  • ATS-optimized .docx output — parsed reliably by all major ATS platforms
  • Single-column layout — no multi-column confusion for scanners
  • Standard section headingsEXPERIENCE, SKILLS, EDUCATION, PROJECTS
  • Right-aligned dates — using proper tab stops, not tables
  • Inline hyperlinks — GitHub, LinkedIn, certificates, publications
  • Composable bullet system — mix bold, normal, and accent text in one line
  • Skills table — keyword-dense and fully readable by ATS
  • 4-variable color system — reskin everything by changing 4 lines
  • Zero external services — runs fully offline

📂 Repository Structure

ATS-Friendly-Resume-Template/
├── resume.js           ← Main generator script (edit this)
├── sample-resume.docx  ← Pre-generated sample output
├── images/
│   └── sample.png      ← Preview image for README
├── package.json        ← Project metadata and dependencies
└── README.md           ← You are here

🚀 Quick Start

Prerequisites

  • Node.js v18 or higher
  • npm (comes with Node.js)

Step 1 — Clone the repository

git clone https://github.com/ShreyashPG/ATS-Friendly-Resume-Template.git
cd ATS-Friendly-Resume-Template

Step 2 — Install dependencies

npm install

Step 3 — Edit resume.js with your information

Open resume.js and look for STEP 2 in the comments. Replace the sample data with your own:

// ── NAME ──
"YOUR FULL NAME"

// ── TAGLINE ──
"Your Role  ·  Your Specialty  ·  Your Focus Area"

// ── CONTACT BAR ──
"Your City, Country"
"+91 XXXXXXXXXX"
link("your@email.com", "mailto:your@email.com")
link("linkedin.com/in/yourprofile", "https://linkedin.com/in/yourprofile")
link("github.com/yourusername", "https://github.com/yourusername")

Step 4 — Generate your resume

node resume.js
# ✅  resume.docx generated successfully!

Your resume.docx will appear in the current directory. Open it in Microsoft Word, Google Docs, or LibreOffice.


🎨 Customization Guide

Changing the color palette

At the top of resume.js, update the four color constants:

const COLOR_ACCENT = "1A56A0"; // Blue — headings, bullets, links
const COLOR_DARK   = "1A1A2E"; // Near-black — name, company names
const COLOR_MID    = "444444"; // Body text
const COLOR_LIGHT  = "666666"; // Dates, subtitles, captions

That's it. Every element in the document updates automatically.


Adding a job entry

jobHeader("Company Name", "Your Role", "Month Year – Month Year", "https://certificate-link.com")
bullet([normal("Led development of "), bold("key feature"), normal(" that improved "), accent("metric by X%"), normal(".")])
bullet([normal("Another bullet describing your impact.")])

Pass null as the 4th argument to jobHeader if you have no certificate link.


Adding a project entry

projHeader("Project Title", "2025", "https://github.com/you/project")
new Paragraph({
  children: [
    new TextRun({ text: "Stack: ", bold: true, size: 18, color: COLOR_DARK, font: "Arial" }),
    new TextRun({ text: "Tech · Stack · Here", size: 18, color: COLOR_LIGHT, font: "Arial", italics: true })
  ]
})
bullet([normal("What the project does and the impact it had.")])

Adding a skills row

skillRow("Category", "Skill 1, Skill 2, Skill 3, Skill 4")

Customizing the bullet character

In the numbering config at the top of the Document, change text: "▸" to any character you prefer — , , , etc.


🛠️ Script Architecture

Helper Purpose
bold(text) Dark bold text run
normal(text) Regular body text run
accent(text) Accent-colored bold text — use for metrics and numbers
bullet(runs[]) Bulleted paragraph — pass an array of text runs
sectionHeading(text) Section header with bottom border (auto-uppercased)
jobHeader(company, role, period, certUrl) Experience entry header with right-aligned date
projHeader(title, period, githubUrl) Project entry header with right-aligned date
skillRow(label, value) Two-cell table row for the skills section
link(displayText, url) Styled external hyperlink
spacer(before, after) Vertical whitespace paragraph
rule(color, size) Horizontal divider line

📋 ATS Compatibility Checklist

Before submitting your resume, verify:

  • File saved as .docx (not PDF, not .doc)
  • No text inside headers, footers, or text boxes
  • Section names match ATS keywords (EXPERIENCE, EDUCATION, SKILLS, PROJECTS)
  • Dates present on all experience and education entries
  • Single-column layout (no side columns)
  • No tables used for layout (only for skills — text remains readable)
  • Contact information in the document body, not in a header

This script handles all of the above by default. ✅


💡 Ideas to Extend This

  • Multi-role variants — Extract content into a data.js file; maintain data-swe.js, data-de.js etc. and swap with one import line
  • GitHub Actions — Auto-generate and commit the latest resume.docx on every push so it's always current
  • PDF export — Add soffice --headless --convert-to pdf resume.docx after generation for a PDF copy
  • ATS keyword scorer — Extract text from the generated file and match against a job description
  • CLI flagsnode resume.js --role=backend to swap skill emphasis automatically

📰 Read the Full Article

A detailed walkthrough of the script design, ATS optimization decisions, and how to customize it for your own use:

👉 I Wrote a Node.js Script to Generate an ATS-Friendly Resume — Here's the Full Breakdown


🤝 Contributing

Contributions are welcome! If you have ideas for improvements — new sections, better ATS heuristics, CLI support — feel free to open an issue or submit a PR.

  1. Fork the repository
  2. Create your branch: git checkout -b feature/your-feature
  3. Commit your changes: git commit -m 'Add your feature'
  4. Push to the branch: git push origin feature/your-feature
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with ☕ by Shreyash Ghanekar

If this helped your job search, consider giving it a ⭐

About

No description, website, or topics provided.

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors