Building My Markdown CV Workflow: One Source, Multiple Formats


As someone in the face of a turbulent job market I quickly found myself grappling with an unexpected but recurring frustration: my CV. Not the content itself, but the process of managing it. I needed different versions for different contexts: a clean markdown version is nice to write, but I need a neatly typeset PDF for job applications, a Word Docx for recruiters, and a simple, readable web version I could share as a link. And each time I updated one, I had to manually replicate those changes across the others.

This small pain point gradually became more than just an irritation. It became an opportunity for an automation project…

Automation, xkcd

Automation, XKCD #1319

The Problem: Format Fragmentation

Over the past few years, I’ve maintained a CV in Google Docs, a LaTeX version for academic use, and a stripped-down plain-text version for job boards or technical applications. Keeping them in sync was tedious. Sometimes I’d update the Google Doc, forget to update the LaTeX file, and end up submitting a version that was months out of date.

Worse still, each format had its own quirks: spacing and formatting in LaTeX, markdown rendering issues on GitHub, and limited styling options in plain HTML. I wanted a workflow that gave me one single source of truth, from which I could generate all the required formats: PDF, markdown, and a web-friendly version.

The Solution: A Single-Source CV Repository

I decided to treat my CV like a software project: version-controlled, modular, and automated.

The result is my CV workflow repository. At its core, it’s a small, structured codebase that builds my CV in multiple formats from a single markdown file. Here’s how it works:

CV workflow diagram

  1. CV Content in Markdown
    I write and maintain the actual CV content in a human-readable markdown file (creatively titled cv.md). This keeps it portable, lightweight, and easy to edit in any text editor. A small YAML header gives variables like author’s name, email, social media handles that can be injected into different format templates.

  2. Format conversions Pandoc handles the various conversions using format templates. I have templates for HTML (with a simple CSS stylesheet), DOCX (with a simple font styles --reference-doc, because DOCX doesn’t support templating), and a TEX template for rendering the LaTeX version that is in turn used to create the PDF version. These produce clean, professional documents with consistent formatting every time.

  3. Live Web Version
    By setting up the repo to be hosted with GitHub Pages, the HTML version gives me a live, public-facing CV at a consistent URL—always up-to-date and readable on any device.

  4. Auto-updating and CI With GitHub Actions, I’ve set up automation so that every push to the main branch triggers a rebuild of the web version and regenerates the other version. It commits these back to the outputs/ folder (as well as the Action’s Artifacts) so I can easily access or point to them. The master branch will always be the most up-to-date version.

All I have to do is update the markdown and commit—it’s fully hands-off after that.

Want to Use It? I Made a Template

If this kind of workflow would be useful to you, I’ve made it easy to get started: I’ve turned my setup into a template repository you can fork. It comes preconfigured with everything you need:

  • A clean markdown structure for your content
  • Scripts to generate web and PDF versions
  • GitHub Actions for automated builds
  • Styling that’s easy to customise

You can fork it directly, plug in your own details, and deploy your own live CV in just a few minutes.

Why This Was Worth Doing

Aside from being an immediately useful tool for managing my own CV, this project ended up doing a lot more:

  • Version control lets me track changes over time and tailor versions for different types of roles.
  • Live shareability means I can send someone a URL instead of a file.
  • Reusability makes it adaptable for other document workflows: cover letters, portfolios, or academic bios.
  • Showcase: It’s also a nice project to point to when applying for roles—demonstrating templating, markdown processing, static site generation, CI/CD pipelines, and PDF export.

Final Thoughts

What started as a simple attempt to clean up my CV workflow turned into a genuinely helpful tool—and one that I hope others will find useful too. If you’re looking to streamline your CV management, feel free to check out the template on GitHub.

The best kind of project is one that solves your own problems—and can then go on to solve someone else’s too.