---
name: word-resume-builder
description: >-
  Builds Abinesh Haridoss's resume as a Microsoft Word file (.docx only, never PDF) tailored to a job description, specialized for Workday and other strict-ATS parsers (Taleo, iCIMS, Greenhouse, SuccessFactors).
  Use ONLY when the user wants Word, .docx, Microsoft Word, or Workday/strict-ATS output.
  Do NOT use for LaTeX, .tex, or Overleaf requests — use latex-resume-builder instead.
  Triggers: Word resume, docx resume, Microsoft Word resume, Workday resume, strict ATS resume, ATS optimize Word.
---

# Word Resume Builder — Abinesh Haridoss

Specialized for **Workday / strict-ATS parsing** (Taleo, iCIMS, Greenhouse, SuccessFactors) — not just generic "ATS-friendly" formatting.

## START HERE

### WHEN TO USE THIS SKILL

- User asks for **Word**, **.docx**, or **Microsoft Word** output
- User mentions **Workday**, **Taleo**, **iCIMS**, **Greenhouse**, **SuccessFactors**, or "strict ATS format"
- User says "build my resume in Word" or "save as docx"
- Triggers: Word resume, docx resume, Microsoft Word resume, Workday resume, strict ATS resume, ATS optimize Word

### WHEN NOT TO USE

- User wants **LaTeX**, **.tex**, or **Overleaf** → use **latex-resume-builder**
- User asks for PDF → deliver **.docx only**; never generate or suggest PDF export

### NON-NEGOTIABLES

1. All **6 sections** in fixed order (Contact → Summary → Professional Experience → Projects → Education → Technical Skills)
2. Fixed job titles, companies, and dates from candidate profile — never invent or change
3. **No fabrication** — reframe real experience only
4. Summary **must state 6+ years** of experience — never use 5+ years
5. Bold **JD keywords and metrics** in bullets — match LaTeX template density
6. Exactly **2 pages** in Word — no page 3, no trailing whitespace
7. Calibri/Arial 11pt, 1in margins, List Bullet style
8. **Strict ATS / Workday structural rules** (see **Strict ATS / Workday Compliance Rules** below) — single column, no tables/text boxes, contact in body (never header/footer), literal section headers, `Month YYYY` dates
9. **AI-recruiter scoring rubric** (`../shared/scoring-rubric.md`) — project links, complexity framing, open-source language, deduction avoidance

### IF JD MISSING

**STOP.** Ask the user to paste the job description (or URL). Do not tailor without a JD.

---

## Reference files (read when tailoring)

| When | Read |
| --- | --- |
| Before any edit | `../shared/candidate-profile.md` — fixed fields, experience index, project pool |
| Bullet editing | `../shared/bullet-strategy.md` — Step 0, edit vs add, verbs, page fill |
| Before output | `../shared/checklist.md` — single pre-output checklist |
| Baseline content | **Baseline Word Content** section below — structured starting text, `Month YYYY` dates |
| Build instructions | **Build Word Document (.docx)** section below — full python-docx build script, hyperlink helper, tab-stop headers |
| **Strict ATS / Workday rules** | **Strict ATS / Workday Compliance Rules** section below — structural rules, Notepad-test verification, compliance table |
| **AI-recruiter scoring rubric** | `../shared/scoring-rubric.md` — project selection, complexity framing, open-source language, deduction avoidance |

---

## Primary Workflow

When the user provides a **job description** and wants Word output:

### Step 0 — JD gate

**STOP** if no JD — ask user to paste it.

### Step 1 — READ candidate profile

**READ** `../shared/candidate-profile.md`. Do not invent roles, dates, locations, or employers.

### Step 2 — READ baseline content and ATS rules

**READ** **Baseline Word Content** below. Start from this content for every request. Preserve structure; modify Summary (keep **6+ years**), bullets, Projects, and Technical Skills only.

**READ** **Strict ATS / Workday Compliance Rules** below — apply every structural rule (single column, no tables/text boxes/headers-footers, literal section headers, `Month YYYY` dates) while building.

### Step 3 — WRITE Summary first

**WRITE Summary first** — mirror JD role title + **6+ years of experience** + 3–4 themes. Every Experience bullet must reinforce this narrative.

### Step 4 — EDIT bullets

**EDIT bullets** using priority:

1. **Minimal edit first** — weave missing JD keywords into existing bullets (one crisp line each)
2. **New bullet only** for true gaps where real work exists — add to most relevant role, distributed across roles
3. **Reorder Technical Skills** — JD tools first; candidate must actually use them

See `../shared/bullet-strategy.md` for Step 0 parsing, decision rules, and verb guidance.

### Step 5 — SELECT projects

**SELECT projects** from the pool in `../shared/candidate-profile.md`. Preserve project header line (name | tech | link); swap JD-relevant projects when tailoring.

### Step 6 — APPLY scoring rubric

**READ** `../shared/scoring-rubric.md` and verify before balancing pages:

- Every selected project has its real GitHub link — never omit
- No generic/tutorial project framing or names
- Project bullets foreground complexity and impact (not just "built X using Y")
- Personal repos are self projects — never labeled as open source contributions
- Experience bullets show production scale and measurable outcomes
- Technical Skills lists only defensible tools; JD Priority-1 keywords appear in bullets too

### Step 7 — BALANCE to exactly 2 pages

**BALANCE to exactly 2 pages.** If short, add crisp bullets evenly across roles (reframe real work). If long, trim oldest/least JD-relevant roles first. Never drop a section.

### Step 8 — VERIFY ATS compliance

**VERIFY** against **Strict ATS / Workday Compliance Rules** below before building: no tables/text boxes planned, contact info goes in the body (never header/footer), section headers are literal (`Professional Experience`, `Projects`, `Education`, `Technical Skills`), dates are `Month YYYY`.

### Step 9 — RUN NOW (build .docx)

**RUN NOW:**

```bash
pip install python-docx
```

1. Build document with **python-docx** using the full skeleton in **Build Word Document (.docx)** below (includes hyperlink helper, tab-stop job headers, defensive header/footer clearing)
2. Run the **Notepad-test** verification (`notepad_test()` in **Build Word Document (.docx)** below) — confirm text flows top-to-bottom in order and header/footer are empty
3. **SAVE** to `plugins/buildResume/Abinesh-Haridoss-Resume.docx`
4. Return **only the full file path** — no markdown resume, no LaTeX, no PDF

---

## User trigger phrases

- "Tailor my resume in Word for this JD"
- "Build my resume in docx"
- "Update my Word resume"
- "ATS optimize my Word resume"
- "Build a Workday-ready resume"
- "Format my resume for Taleo/iCIMS/Greenhouse/SuccessFactors"

If user says "tailor my resume" **without naming format**, ask: **LaTeX (.tex) or Word (.docx)?**

### Required user input

```
I'm applying for this job:

[paste job description or URL]
```

Background is embedded in reference files. **Do not ask the user to re-paste work history** unless they want to change roles, dates, or add experience.

---

## Keyword tailoring (summary)

| Section | Action |
| --- | --- |
| Summary | Rewrite first — sets narrative |
| Experience | Align with Summary + JD; crisp bullets with bold keywords and metrics |
| Projects | JD-relevant from pool; preserve header + bullet layout |
| Technical Skills | Reorder; add JD tools candidate actually uses |

### What NEVER to change

- Name, contact, URLs
- Job titles, companies, dates
- Section order and all 6 sections
- **6+ years** in Summary
- Document styles, margins, font
- Fabricated experience or metrics

---

## Word essentials

### Job header

```
[Bold] Full Stack Developer                    March 2020 – September 2021
[Italic] Tanishq & ProwessIQ Private Limited — Chennai, India
• Bullet with metric bold only — achieving 99.9% uptime on GKE.
```

Title left, dates **right-aligned** on the same line via paragraph tab stop (never a table — see **Build Word Document (.docx)** below). Dates use full `Month YYYY` format.

### Formatting rules

- `List Bullet` style — no empty paragraphs between bullets
- Tab stop for right-aligned dates — never a table for layout
- Contact info in the document **body**, first lines — **never** in a header/footer
- Literal section headers only (`Professional Experience`, `Projects`, etc.) — never creative alternatives
- Hyperlinks for email, GitHub, LinkedIn, portfolio — body only
- **Bold metrics only** — not tool names in bullets
- Dates in **`Month YYYY`** format everywhere (`December 2025`, not `Dec 2025`)

### Build method

| Element | python-docx |
| --- | --- |
| Bullets | `add_bullet()` — `List Bullet` style |
| Job header | `add_job_header()` — tab-stop paragraph, never a table |
| Metrics | Bold only on numeric segments |
| Links | `add_hyperlink()` — OXML helper, body only |

Full build script + hyperlink helper: **Build Word Document (.docx)** below. Structural ATS rules: **Strict ATS / Workday Compliance Rules** below.

---

## Page fill strategy (quick reference)

**Too much white space:** Add crisp bullets across roles — do not pad with empty paragraphs or long sentences.

**Over 2 pages:** Trim Tanishq → LTIMindtree → … first. Shorten wording; keep Action + Result.

Full rules: `../shared/bullet-strategy.md`

---

## DELIVER — final checklist

Run `../shared/checklist.md` internally, then confirm:

- [ ] All 6 sections present in order
- [ ] Summary states **6+ years** experience
- [ ] Job titles, companies, dates unchanged from candidate profile
- [ ] List Bullet style; no empty paragraphs between bullets
- [ ] Exactly 2 pages in Word
- [ ] **No tables, text boxes, or graphics anywhere in the document**
- [ ] **Contact info in the document body — header/footer left empty** (verified via `notepad_test()`)
- [ ] **Literal section headers** — `Professional Experience` / `Projects` / `Education` / `Technical Skills`
- [ ] **Dates in `Month YYYY` format** (e.g., `December 2025`), `Present` for current role
- [ ] Notepad-test passes — text flows top-to-bottom in order (see **Build Word Document (.docx)** below)
- [ ] Saved to `plugins/buildResume/Abinesh-Haridoss-Resume.docx`
- [ ] Returned file path only — **docx, never PDF**

---

## Output format

**Default:** Save `.docx` and return the file path. No markdown fences, no LaTeX, no PDF.

**If user asks for explanation:** After confirming file path, optionally append a keyword mapping table.

---

## Baseline Word Content

Structured starting text for every tailoring request. **Modify Summary (keep 6+ years), Experience bullets, Projects, and Technical Skills.** Preserve titles, companies, dates, and 6-section order.

**Job title line format:** `[Bold Title]` + tab + `[Dates]` — dates **right-aligned**. Company on next line in italics (no separate location line — matches LaTeX template).

**Dates use full `Month YYYY` format** — see **Strict ATS / Workday Compliance Rules** below.

### Contact Header (centered)

**Abinesh Haridoss**
+1 346-823-9553 | abinesha312@gmail.com | github.com/abinesha312 | linkedin.com/in/aharido/ | abineshharidoss.web.app/

### Summary

**Full Stack Engineer** with a Master's in Computer Science and **6+ years** of experience building and deploying **enterprise-grade web applications** using **.NET**, **C#**, and modern **Python frameworks** such as **FastAPI** and **Django**. Skilled in developing **AI-powered features**, integrating **machine learning models**, and optimizing **microservice architectures** across cloud platforms including **AWS**, **GCP**, and **Azure**. Proficient in **Angular**, **JavaScript**, and database design using **SQL** and **PostgreSQL**, with hands-on expertise in **TDD/BDD**, **DevOps**, and **CI/CD automation**. Demonstrated success in leading cross-functional teams, driving **proof-of-concepts**, and delivering **AI-driven, scalable solutions** that align with modern design and development best practices.

### Professional Experience

**LLM Trainer**	September 2025 – Present
_Turing_
• Designed and deployed LLM training data collection workflows with automated **annotation** and **validation** stages, improving labeling throughput by **25%** and cutting manual review time by **30%**.
• Leveraged **AWS Bedrock** with **LangChain** and **LangGraph** to orchestrate multi-modal **LLM training data** pipelines, boosting data throughput by **35%** and enabling regionally distributed dataset collection at scale.

**AI/ML Engineer**	July 2025 – September 2025
_Worlds Enterprise Inc._
• Designed and deployed **agentic AI workflows** with autonomous decision-making capabilities, automating complex pipelines and improving operational efficiency by **25%**.
• Leveraged **AWS Bedrock** with **LangChain** and **LangGraph** to orchestrate multi-modal data pipelines, boosting data throughput by **35%** and enabling regionally distributed AI deployments at scale.
• Implemented **generative AI-driven code assistants** using **LangFlow** and **LangSmith**, reducing manual coding effort by **40%** and accelerating release cycles.
• Engineered and deployed **high-performance RESTful APIs** using **FastAPI** with **asynchronous I/O**, achieving **low-latency** and **high-throughput** request handling in production systems.
• Designed **robust data models and validation layers** with **Pydantic** in FastAPI, ensuring data integrity, type safety, and fault-tolerant service interactions across microservices.
• Integrated **SQLAlchemy ORM** for efficient database operations, optimizing query execution and schema management in **PostgreSQL**-backed FastAPI applications.

**AI Engineer**	October 2023 – May 2025
_University of North Texas_
• Engineered advanced **agentic AI pipelines**, integrating **multi-agent coordination**, **context-aware reasoning**, and **workflow orchestration**, improving research automation efficiency by **30%**.
• Developed **generative AI solutions** for **code synthesis** and **academic tooling**, reducing implementation time for research prototypes by **35%**.
• Configured and optimized **MCP server deployments** for distributed AI experiments, enabling secure collaboration and increasing system throughput by **25%**.
• Containerized and automated FastAPI deployments using **Docker** and **CI/CD pipelines**, enabling consistent builds and rapid releases.
• Implemented **structured logging, monitoring, and observability** with FastAPI and **OpenTelemetry**, reducing debugging time by **30%**.
• Implemented **multi-GPU training pipelines** leveraging **PyTorch Distributed**, **FSDP**, and **NCCL**, achieving **45% reduction in latency** and **30% higher GPU utilization**.

**Associate Software Developer**	February 2023 – July 2023
_TransUnion_
• Designed a **microservices**-based credit generation ML model, improving prediction accuracy by **70%** and enabling more reliable risk assessment and credit approvals.
• Spearheaded **credit-score monitoring** deep learning models using **PyTorch**, achieving real-time fraud detection with latency under **200ms** and improving anomaly recall rates by **25%**.
• Integrated a **GraphQL** API layer into the **React Native** stack, synchronizing commercial data across five platforms and reducing data-fetching overhead by **40%**.
• Implemented **TypeScript** with a **micro-frontend** architecture, reducing feature delivery time by **20%**.

**Software Engineer**	October 2021 – February 2023
_Larsen and Toubro Infotech Mindtree_
• Oversaw a team of developers and conducted regular code reviews, ensuring deadlines were met ahead by **15%**.
• Engineered distributed caching with **Redis**, optimizing real-time data access speed by **3.2x** in benchmarks.
• Implemented **CI/CD pipeline** for **SaaS architecture** with **unit**, **integration**, and snapshot tests, achieving **92.4%** test coverage and enabling zero-downtime staging deployments.
• Utilized AngularJS and ReactJS for dynamic user interfaces with comprehensive test coverage achieving **92.4%**.
• Maintained deep system **observability** via **tracing**, centralized logs, and metrics across distributed runtime environments.
• Containerized compute-intensive workloads using **Kubernetes**, enabling horizontal scaling across **10-node** clusters.

**Full Stack Developer**	March 2020 – September 2021
_Tanishq & ProwessIQ Private Limited_
• Implemented **authentication mechanisms** with **OAuth2 and JWT**, reducing unauthorized access attempts by **30%** and ensuring enterprise security compliance.
• Designed and deployed an **AWS architecture** using EC2, S3, and **IAM roles**, supporting workloads for **10K+** daily API requests.
• Orchestrated **Infrastructure as Code (IaC)** with **Terraform**, achieving **100%** reproducible deployments and reducing deployment time by **60%**.

### Projects

**EKS - Knowledge distillation** | PyTorch, FSDP, DL Methods — Stealth
• Developed a knowledge distillation pipeline for the **GPT-OSS** model using **Qwen-3 1.5B**, implementing custom loss functions at the PyTorch layer.
• Architected **GPU clusters** using **A100 nodes** with **Kubernetes** and **Slurm** for large-scale **knowledge distillation workloads**.

**Shoplifting Detection using LSTM & Yolov11** | PyTorch, FSDP, DL Methods, NVIDIA Nsight — Stealth
• Trained a hybrid **Yolov11 & LSTM** pipeline with **FSDP** for spatio-temporal behavior detection from **CCTV video streams**.
• Deployed on **GPU-backed inference servers** with **Redis** caching and REST API, achieving sub-**200ms** detection latency.

**Fraud Folio** | AI, Fraud Detection, Meta Llama 3 — github.com/abinesha312/hack_unt_financial_fraud
• Engineered a **custom fraud detection pipeline** utilizing **Meta Llama 3** with CUDA optimization for real-time processing and anomaly detection.

**Hybrid Vision Transformer for Small-Scale Image Classification** | PyTorch, Transformers, MixUp, CutMix — github.com/abinesha312/vision-transformer-cifar
• Developed a **Hybrid Vision Transformer** combining **CNNs** and **transformers** for CIFAR-10 classification with attention visualization.

**TalentProbe: AI-Powered Interview Simulation Platform** | GPT, FAISS, Flask, React, Whisper, RunPod — talent-probe.vercel.app
• Built a **real-time interview practice app** with **FAISS** similarity search and **Whisper ASR** for voice analysis and dynamic feedback.

**TeamBinary - Personality Prediction** | PyTorch, DL Methods — github.com/abinesha312/TeamBinary02
• Built a **sentiment analysis model** using **MBTI-labeled data** with **XGBoost** to predict personality traits.

### Education

**Master of Science in Computer Science**	August 2023 – 2025
_University of North Texas_
Relevant Courses: Machine Learning, Algorithms, AI Software Development, Information Retrieval, Big Data and Data Science

**Bachelor of Engineering in Information Science and Engineering**	May 2021
_Panimalar Engineering College Affiliated to Anna University_
Relevant Courses: Operating Systems, Data Structures, DBMS, Computer Networks, Object Oriented Concepts, Deep Learning

### Technical Skills

• **Programming Languages:** Python, C++, JavaScript, TypeScript, Bash, PowerShell, Shell Scripting.
• **JavaScript Frameworks:** Angular, React.js, Vue, Redux, Node.js, Express.js, Socket.IO, Micro-Frontend Architecture
• **Back-End Technologies:** FastAPI, Flask, Django, gRPC, RabbitMQ
• **Python Libraries:** Pandas, NumPy, Scikit-learn, TensorFlow, Keras, PyTorch, Matplotlib, Seaborn, Plotly
• **Deep Learning & Distributed Training:** PyTorch (FSDP, DDP), HuggingFace Transformers, ONNX, LangChain, OpenAI, LLama-Stack, LLama Models.
• **Databases:** Redis, MongoDB (NoSQL), DynamoDB, Postgres, Databricks, MySQL
• **Cloud & DevOps:** AWS (Lambda, API Gateway, Step Functions, DynamoDB, S3, RDS, ECS, EKS, SageMaker, Transcribe, Polly, CDK), Docker, Terraform

---

## Strict ATS / Workday Compliance Rules

This skill is specialized to produce resumes that parse **cleanly and completely** in Workday and other strict ATS platforms (Taleo, iCIMS, Greenhouse, SuccessFactors). Apply every rule below in addition to **Build Word Document (.docx)** below. These are structural/parsing rules — they never override `../shared/candidate-profile.md` facts (titles, companies, dates, locations stay truthful).

### Why this matters

- Independent 2025–2026 benchmarks put Workday's **DOCX** parsing accuracy in the high-90% range vs. low-80s% for PDF. Always deliver `.docx` — never PDF.
- Workday reads the file in **strict top-to-bottom reading order** and maps extracted text into form fields (name, contact, employer, title, dates, skills). Anything outside that linear order — headers, footers, text boxes, tables — is frequently dropped, scrambled, or concatenated with the wrong field.
- A resume can look perfect visually and still fail silently: the upload succeeds but Workday shows fields as "[not detected]" or glues unrelated text together. These rules exist specifically to prevent that failure mode.

### Structural rules (never violate)

1. **Single column only** — no sidebars, no multi-column sections. Two-column layouts interleave sidebar text into the experience block.
2. **Contact info in the document body**, as the first 1–3 lines (name, phone, email) — **never** in a Word header or footer. Workday strips headers/footers on extraction; anything placed there disappears from the parsed profile.
3. **No text boxes, shapes, SmartArt, or floating objects.** Anything outside the main text flow is invisible to the parser.
4. **No tables anywhere** — not even for job-header layout. Use paragraph + tab-stop (see **Build Word Document (.docx)** below), never table cells. A 2-column skills grid fails to parse in the majority of tested ATS configurations.
5. **No skill-bar graphics, rating icons, or images containing text.**
6. **Standard section header tokens only** — literal text the parser's keyword scan expects:
   - `Professional Experience` (contains "Experience" — recognized)
   - `Education`
   - `Technical Skills`
   - `Projects`
   - Never use creative alternatives ("What I've Built", "Things I Know") — Workday cannot map them to form fields.
7. **Plain built-in Word bullets only** (`List Bullet` style, • character) — never custom glyphs, emoji, or Wingdings bullets.

### Formatting rules

- **Font:** Calibri or Arial, 11pt body (per **Build Word Document (.docx)** below).
- **Dates:** consistent `Month YYYY` format everywhere — e.g., `December 2025`, not `Dec 2025` or `12/25`. Use `Present` for the current role. This is a **display format** change only; the underlying date value in `../shared/candidate-profile.md` never changes (Dec 2025 and December 2025 mean the same date).
- **No underlines** except on hyperlinks.
- **Hyperlinks:** keep in the document body only (contact line, project links) — never inside a header/footer.
- **Filename:** save as `Abinesh-Haridoss-Resume.docx` — avoid generic names like `resume.docx`; Workday and recruiters both surface the filename.

### Build-time self-check ("Notepad test")

Before returning the file path, simulate copy-all-and-paste-into-Notepad:

1. Concatenate every paragraph's `.text` in document order (see verification snippet in **Build Word Document (.docx)** below).
2. Confirm it reads top-to-bottom exactly as intended: Name → Contact → Summary → Professional Experience → Projects → Education → Technical Skills.
3. Confirm no paragraph is empty where it shouldn't be, and no text is duplicated, truncated, or out of order.
4. Confirm `document.sections[0].header` and `.footer` contain **no** contact info or content — they must stay empty/default.

### Workday-specific gotchas

- Workday auto-fills application form fields from the parsed resume. Non-literal section headers or scrambled reading order leave fields blank even when the file looks fine visually — this hurts the application before a human ever reviews it.
- Broader strict-ATS platforms (Taleo, iCIMS, SuccessFactors, Greenhouse) share the same core constraints (single column, no tables/text boxes, contact in body). These rules keep the resume safe across all of them, not just Workday.
- Clean parsing beats visual polish. Workday weighs the parsed form fields more heavily than the uploaded file's appearance.

### Quick compliance table

| Rule | This skill's implementation |
| --- | --- |
| File format | `.docx` only, never PDF |
| Column layout | Single column — no tables/columns for layout |
| Contact location | Document body, first lines — never header/footer |
| Section headers | `Professional Experience` / `Projects` / `Education` / `Technical Skills` (literal) |
| Bullets | `List Bullet` style, plain • character |
| Dates | `Month YYYY` (e.g., `December 2025`), `Present` for current role |
| Tables / text boxes / graphics | None — paragraph + tab-stop layout only |
| Filename | `Abinesh-Haridoss-Resume.docx` |

---

## Build Word Document (.docx)

**Deliverable:** `.docx` only — never PDF, never LaTeX, never markdown pretending to be the resume. This document is specialized for **Workday / strict-ATS** parsing — read **Strict ATS / Workday Compliance Rules** above first; every rule there is mandatory here too.

### Setup

```bash
pip install python-docx
```

### Build steps

1. Start from **Baseline Word Content** above (structured starting text, already in `Month YYYY` date format).
2. Apply all tailoring edits to the document object in memory.
3. **Save** to `plugins/buildResume/Abinesh-Haridoss-Resume.docx` (or a user-specified path ending in `.docx`).
4. **Run the Notepad-test verification** (below) before returning.
5. Return **only the full file path** — that is the deliverable.

### Document setup (do not change)

| Setting | Value |
| --- | --- |
| Application | Microsoft Word (.docx) |
| Body font | Calibri 11 pt (or Arial 11 pt) |
| Name / contact | Calibri 16–18 pt bold, centered |
| Section headings | Calibri 12 pt bold, literal text (see **Strict ATS / Workday Compliance Rules** above) |
| Margins | 1 inch all sides |
| Line spacing | Multiple 1.08–1.15 |
| Page size | US Letter (8.5" × 11") |
| Layout | **Single column** — no tables, no text boxes, no headers/footers |
| Dates | `Month YYYY` (e.g., `December 2025`), `Present` for current role |

### Full build script skeleton

Adapt this end-to-end skeleton rather than writing python-docx calls from scratch — it already encodes every ATS-safety rule (no tables, no header/footer content, tab-stop job headers, working hyperlinks).

```python
from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_TAB_ALIGNMENT, WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
from docx.oxml import OxmlElement
from docx.opc.constants import RELATIONSHIP_TYPE as RT


def add_hyperlink(paragraph, url, text, bold=False):
    """python-docx has no native hyperlink API — this is the standard OXML workaround."""
    part = paragraph.part
    r_id = part.relate_to(url, RT.HYPERLINK, is_external=True)
    hyperlink = OxmlElement("w:hyperlink")
    hyperlink.set(qn("r:id"), r_id)
    run = OxmlElement("w:r")
    rpr = OxmlElement("w:rPr")
    if bold:
        rpr.append(OxmlElement("w:b"))
    color = OxmlElement("w:color")
    color.set(qn("w:val"), "0563C1")
    rpr.append(color)
    underline = OxmlElement("w:u")
    underline.set(qn("w:val"), "single")
    rpr.append(underline)
    run.append(rpr)
    text_el = OxmlElement("w:t")
    text_el.text = text
    run.append(text_el)
    hyperlink.append(run)
    paragraph._p.append(hyperlink)
    return hyperlink


def add_job_header(document, title, dates, company_location):
    """ATS-safe job header: paragraph + right tab stop — never a table."""
    p = document.add_paragraph()
    p.paragraph_format.tab_stops.add_tab_stop(Inches(6.5), WD_TAB_ALIGNMENT.RIGHT)
    p.paragraph_format.space_after = Pt(0)
    title_run = p.add_run(title)
    title_run.bold = True
    p.add_run(f"\t{dates}")
    company_p = document.add_paragraph()
    company_p.paragraph_format.space_after = Pt(4)
    company_run = company_p.add_run(company_location)
    company_run.italic = True
    return p, company_p


def add_bullet(document, text_segments):
    """text_segments: list of (text, is_bold) tuples — bold ONLY on metrics."""
    p = document.add_paragraph(style="List Bullet")
    for text, is_bold in text_segments:
        run = p.add_run(text)
        run.bold = is_bold
    return p


def add_section_heading(document, heading_text):
    """Literal, ATS-recognized heading text — never a creative alternative."""
    p = document.add_paragraph()
    p.paragraph_format.space_before = Pt(10)
    p.paragraph_format.space_after = Pt(4)
    run = p.add_run(heading_text)
    run.bold = True
    run.font.size = Pt(12)
    return p


def build_document():
    document = Document()

    # Margins + page size (US Letter, 1in all sides)
    for section in document.sections:
        section.top_margin = Inches(1)
        section.bottom_margin = Inches(1)
        section.left_margin = Inches(1)
        section.right_margin = Inches(1)
        # Defensive: ensure header/footer carry NO content (Workday strips them anyway,
        # but leaving stray text there is a common silent bug).
        section.header.is_linked_to_previous = True
        section.footer.is_linked_to_previous = True
        for p in list(section.header.paragraphs):
            p.text = ""
        for p in list(section.footer.paragraphs):
            p.text = ""

    # Base font
    style = document.styles["Normal"]
    style.font.name = "Calibri"
    style.font.size = Pt(11)

    # Contact header — MUST be in the body, first lines (never header/footer)
    name_p = document.add_paragraph()
    name_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    name_run = name_p.add_run("Abinesh Haridoss")
    name_run.bold = True
    name_run.font.size = Pt(18)

    contact_p = document.add_paragraph()
    contact_p.alignment = WD_ALIGN_PARAGRAPH.CENTER
    contact_p.add_run("+1 346-823-9553 | ")
    add_hyperlink(contact_p, "mailto:abinesha312@gmail.com", "abinesha312@gmail.com")
    contact_p.add_run(" | ")
    add_hyperlink(contact_p, "https://github.com/abinesha312", "github.com/abinesha312")
    contact_p.add_run(" | ")
    add_hyperlink(contact_p, "https://linkedin.com/in/aharido/", "linkedin.com/in/aharido/")
    contact_p.add_run(" | ")
    add_hyperlink(contact_p, "https://abineshharidoss.web.app", "abineshharidoss.web.app")

    # ... Summary, Professional Experience, Projects, Education,
    #     Technical Skills sections follow the same helper functions above,
    #     built from the tailored content (see Baseline Word Content above as the source
    #     structure and shared/bullet-strategy.md for bullet edits).

    return document


def notepad_test(document) -> str:
    """Concatenate all body paragraph text in document order for the flow check
    described in Strict ATS / Workday Compliance Rules above. Also asserts header/footer are empty."""
    for section in document.sections:
        for p in section.header.paragraphs:
            assert not p.text.strip(), "Header must stay empty — Workday strips it anyway."
        for p in section.footer.paragraphs:
            assert not p.text.strip(), "Footer must stay empty — Workday strips it anyway."
    return "\n".join(p.text for p in document.paragraphs if p.text.strip())


if __name__ == "__main__":
    doc = build_document()
    print(notepad_test(doc))  # manually eyeball top-to-bottom order before saving
    doc.save("plugins/buildResume/Abinesh-Haridoss-Resume.docx")
```

### python-docx style mapping (quick reference)

| Element | Approach |
| --- | --- |
| Contact block | Centered paragraph, bold name, `add_hyperlink()` for email/URLs — **never** in a header |
| Section title | `add_section_heading()` — literal ATS-recognized text, bold 12pt |
| Job title line | `add_job_header()` — paragraph + right tab stop at 6.5in, never a table |
| Company line | Italic paragraph; append location (e.g., `EXLServices — Texas, US`) |
| Bullets | `add_bullet()` — `List Bullet` style, one achievement each, bold on metric segments only |
| Metrics bold | Pass `(text, True)` only for numeric metrics (85%, 99.9%) in `add_bullet()` |
| Project links | `add_hyperlink()` to GitHub URLs |
| Skills | `List Bullet`; category label bold + colon + plain skills text |

### Formatting anti-patterns

```
❌ Empty paragraph between each bullet
❌ Tables or text boxes for job-header layout or skills grid
❌ Contact info, name, or page numbers in header/footer
❌ Multiple fonts or colors
❌ Title — Dates inline after em dash (must be right-aligned via tab stop)
❌ Abbreviated dates ("Dec 2025") — use Month YYYY ("December 2025")

✅ List Bullet style, consecutive items, no blank paragraphs
✅ Job header → bullets → 6pt gap → next job header
✅ Bold only on metrics: reducing manual intervention by 85%
✅ Header/footer left empty; all content in document body
```

### Page length

- Max **2 pages** in Word — no page 3, no trailing whitespace
- See `../shared/bullet-strategy.md` for fill/trim strategy

### Word safety rules

- Dates: `Month YYYY` everywhere (`December 2025 – Present`), never abbreviated or numeric
- Company names with `&` as plain text
- Hyperlinks via `add_hyperlink()` only — never plain-text URLs that look like links but aren't clickable, and never inside header/footer
- Save as `.docx` (Office Open XML) — not legacy `.doc`
- Filename: `Abinesh-Haridoss-Resume.docx`

### ATS rules

**DO:** List Bullet paragraphs, single column, bold metrics only, exact JD keywords where truthful, deliver `.docx`, run the Notepad-test check, keep header/footer empty.

**DON'T:** PDF, tables, text boxes, header/footer content, photos, fabricated experience, markdown instead of file, creative section header names.

Full Workday/strict-ATS rationale and checklist: **Strict ATS / Workday Compliance Rules** above.
