Skip to main content

Resume markdown to print ready HTML for email or web

Project description

Build & Release CI PyPI version GitHub Release License: MIT Maintenance Downloads GitHub issues PRs Welcome Conventional Commits semantic-release: angular

Markdown Resume Generator

'Buy Me A Coffee'

A simple, lightweight tool to convert markdown-formatted resumes into beautiful, print-ready HTML documents styled with Tailwind CSS.

Resume-MD Example

Features

  • Convert Markdown to styled HTML resumes
  • Modern design with Tailwind CSS
  • Automatic header detection for contact information
  • ATS-friendly hidden information for keyword optimization
  • Print-optimized layout with page break support
  • No external dependencies (Python standard library only)
  • Responsive design for both screen and print

Installation

From PyPI

pip install resume-md

From Source

git clone git@github.com:SamCullin/resume-md.git
cd resume-md
pip install -e .

Development Setup

To set up the development environment:

git clone git@github.com:SamCullin/resume-md.git
cd resume-md
pip install -e ".[dev]"

Usage

Basic Usage

resume-md --input your_resume.md

This will generate an HTML file with the same name as your input file (e.g., your_resume.html).

Command Line Options

resume-md --help

Available options:

  • --input, -i: Path to input markdown file (default: resume.md)
  • --output, -o: Path to output HTML file (default: <input_name>.html)
  • --template, -t: Path to HTML template file (use built-in template if not specified)
  • --version, -v: Show version information and exit

Using as a Library

from resume_md.tokenizer import MarkdownTokenizer, read_markdown_file
from resume_md.component_factory import tokens_to_components
from resume_md.renderer import Renderer

# Read and tokenize markdown
markdown_text = read_markdown_file("resume.md")
tokenizer = MarkdownTokenizer(markdown_text)
tokens = tokenizer.tokenize()

# Convert tokens to components and render to HTML
components = tokens_to_components(tokens)
renderer = Renderer()
rendered = renderer.render_components(components)

# Access the header and content HTML
header_html = rendered["header"]
content_html = rendered["content"]

Markdown Format

The resume-md tool supports a specific markdown format designed for resumes. For examples, see:

Page Breaks

You can force a page break in your resume using the special markdown comment syntax:

This is content on the first page.

[page-break]: # 

This content will appear on a new page.

When the document is printed, a page break will be inserted at this location.

ATS-Specific Information

You can include ATS (Applicant Tracking System) specific information that will be hidden from the visual display but accessible to text extraction systems. This is useful for including additional keywords, skills, or metadata that ATS systems can parse.

[ats-info]: # Skills: Python, JavaScript, TypeScript, React, Node.js
[ats-info]: # + Tools: Git, GitHub, VS Code, Docker, Kubernetes


[ats-info]: # + Certifications: AWS Certified Solutions Architect
[ats-info]: # + Languages: English (Native), Spanish (Fluent)

ATS Export Example:

Skills: Python, JavaScript, TypeScript, React, Node.js + Tools: Git, GitHub, VS Code, Docker, Kubernetes + Certifications: AWS Certified Solutions Architect + Languages: English (Native), Spanish (Fluent)

The ATS-info comments follow the format: [ats-info]: # Content

This information will be rendered as hidden HTML elements that are:

  • Invisible to users viewing the resume
  • Accessible to ATS systems for keyword extraction

[!NOTE] The ATS-info comments once exported to pdf will collapse to a single line. This is because the pdf format cannot support fonts below 1.5pt and sees these smaller lines as a single line. Keep this in mind when formatting your ats-info comments.

Example usage in a resume:

# John Doe
Email: john@example.com | Phone: (555) 123-4567

[ats-info]: # Skills: Python, JavaScript, Machine Learning, Data Analysis
[ats-info]: # Tools: Git, Docker, AWS, Jenkins, Terraform
[ats-info]: # Frameworks: React, Django, Flask, Express.js

## Professional Experience
...

Development

Running Tests

pytest
# With coverage
pytest --cov=resume_md

Code Formatting

black resume_md
isort resume_md

Project Structure

  • resume_md/: Main package
    • __init__.py: Package initialization
    • main.py: CLI entry point
    • tokenizer.py: Markdown tokenizer
    • components.py: Component data classes
    • component_factory.py: Converts tokens to components
    • renderer.py: Renders components as HTML
    • template.html: HTML template
  • tests/: Test cases
  • .github/workflows/: CI/CD workflows

Repository

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

resume_md-1.2.1.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

resume_md-1.2.1-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

File details

Details for the file resume_md-1.2.1.tar.gz.

File metadata

  • Download URL: resume_md-1.2.1.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for resume_md-1.2.1.tar.gz
Algorithm Hash digest
SHA256 b0618fd122264c90d7fe4101e8d750a620fddeecbd4b18301c518b1be51ad6ce
MD5 e4612208f6f90fa506d9562cf1c29b0f
BLAKE2b-256 93ad013f13c06acd72e31513d7f60cd3d31a3a9f3ba70cbec314867d3274f4dd

See more details on using hashes here.

Provenance

The following attestation bundles were made for resume_md-1.2.1.tar.gz:

Publisher: publish.yml on SamCullin/resume-md

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file resume_md-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: resume_md-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 16.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.8

File hashes

Hashes for resume_md-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f733e64a4317e650bcb63189a0451d2d38097975f4e8ab6fd485b7dedd5c2c3f
MD5 5267eab28d7f980bb1aab1d28f86aea1
BLAKE2b-256 84018b7715b206988d808587e96af9f943cb49fc700db913dff2cd1193f28ca1

See more details on using hashes here.

Provenance

The following attestation bundles were made for resume_md-1.2.1-py3-none-any.whl:

Publisher: publish.yml on SamCullin/resume-md

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page