Author: Shashank Bangalore Lakshman
A lightweight, zero-dependency web app that renders a Markdown resume as a print-ready PDF in the browser — hosted for free on GitHub Pages.
Write your resume once in Markdown. Share a link. Download a perfect PDF anytime.
- Auto-detects and loads the latest resume from
resume_md/by filename date - Serif / Sans-serif font toggle
- One-click PDF export via browser print
- LaTeX-inspired typography with Computer Modern font
- No build step, no frameworks — just HTML, CSS, and vanilla JS
- Write your resume in Markdown and place it in the
resume_md/folder - The app automatically picks up the newest file based on the date in the filename (e.g.
Resume_7th.April.2026.md) - Click Save as PDF to export
YourName_Resume_7th.April.2026.md
YourName_Resume_Apr2026.md
The app parses the date from the filename and always loads the most recent one.
- Fork or use this repo as a template
- Add your resume as a Markdown file in
resume_md/ - Enable GitHub Pages on
mainin your repo settings - Share your link — done
The app maps standard Markdown headings and elements to resume sections:
| Markdown | Renders as |
|---|---|
| Plain paragraphs at the top (before any heading) | Centered resume header (name, contact info) |
## Section |
Section title with horizontal rule (e.g. Experience, Skills) |
### Company Name |
Company / institution name |
#### Job Title |
Role title in italics |
* bullet |
Bullet point (10pt) |
**bold** |
Bold text |
*italic* |
Italic text |
[text](url) |
Hyperlink (opens in new tab) |
$small text$ |
9pt indented text (for dates, subtitles) |
Tips:
- Extra blank lines between sections add visual breathing room
- Links are auto-detected — bare
email@example.comis converted to amailto:link - The PDF export respects page breaks; headings are kept with their content
Serve with any static file server — opening index.html directly won't work because the app fetches Markdown over HTTP.
# Python
python3 -m http.server 8080
# Node
npx serve .Then open http://localhost:8080 in your browser.
Address already in use? Another process is holding port 8080. Free it and retry:
lsof -ti :8080 | xargs kill