R
personalOpen Source

ResumeCraft

A Python library and CLI that turns a single JSON or YAML file into a polished Word document or PDF resume. Designed for both standalone use and embedding in web apps. Features strict Pydantic validation, style presets, ATS-friendly output, and a clean factory-method API for in-memory exports from web request handlers.

Tech Stack

PythonPYPIOpen SourceTyperCLIPydanticPyPIpython-docxdocx2pdfwatchfilespyyaml
  • Renders polished DOCX or PDF resumes from JSON or YAML - auto-bold keywords inside bullet points, right-aligned dates via tab stops, clickable hyperlinks for email and project URLs, and smart page breaks that keep section headings with their content
  • Pydantic v2 strict validation rejects field-name typos via extra='forbid', enforces non-empty contact fields (location, email, phone), validates section_order against allowed names, rejects duplicates, and surfaces friendly error messages with full field paths
  • Style system without raw RGB - 7 fonts (Calibri, Arial, Garamond, Georgia, Helvetica, Times, Cambria), 6 color themes (black, navy, forest, maroon, slate, royal), 3 spacing presets, plus an ATS-friendly mode that strips tab stops, colored tech lines, and bordered headings for cleaner ATS parsing
  • Section-oriented architecture - a SECTION_REGISTRY dispatches to 9 self-contained Section classes (Header, Summary, Experience, Projects, Skills, Education, Certifications, Awards, Languages); adding a new section type only adds a class, no modification of the builder needed
  • Multi-format factories (from_jsonfile, from_json, from_bytes, from_dict, from_yamlfile, from_yaml) plus to_docx_bytes() / to_pdf_bytes() for in-memory streaming responses in FastAPI, Flask, or Django - handles UTF-8 BOM and rejects binary input cleanly
  • CLI commands build / validate / init / watch with friendly error messages instead of Python tracebacks; watch mode defaults to PDF output to avoid the file-lock issue when editing live next to an open Word window
  • Custom section ordering and renamed headings via JSON, JSON Schema shipped at the repo root for $schema editor autocomplete in VS Code/IntelliJ, and an _version metadata key on init templates for tracking which library version produced the file
  • Published on PyPI with full type hints (py.typed), mypy --strict clean, ruff-linted, 100+ pytest tests at 94% coverage, CI across Python 3.10–3.14 on Linux and Windows, Dependabot for dependency updates, and Codecov for coverage reporting