Skip to content

Building a Composable Resume with AI and Git

Published: at 07:46 PM

Working on a Composable Resume

I have a guideline when working on repetitive tasks; if I do it more than three times then I’m gonna automate it. Imagine my chagrin when I found myself making similar edits to my core resume when applying to certain jobs more than three times.

Before I continue, I feel like I need to make this very clear in this day and age of fraudulent resumes that employers are being flooded with. The edits that I make to my resume are in no way, shape, or form making stuff up to fit the job description. I’m simply re-ordering, re-wording or deleting things to make it easier for the hiring team to parse my resume.

Now that’s out of the way, let’s get into the build.

Splitting My Resume

I took my resume from Google docs, exported it to a PDF and then had OpenAI’s Codex (now rebranded as ChatGPT Codex) break it up into smaller Markdown files with the following structure:

cv/
|-- contact.md
|-- summary.md
|-- skills.md
|-- projects.md
`-- experience/
    |-- independent.md
    |-- nationbuilder.md
    |-- taxjar.md
    |-- planet-argon-combined.md
    |-- planet-argon-developer.md
    |-- planet-argon-director-of-development.md
    `-- rmls.md

The Markdown files are pretty simple Markdown with some frontmatter sections if appropriate. Some examples:

nationbuilder.md

---
company: NationBuilder
title: Lead Software Engineer
start: 5-2018
end: 9-2024
location: Remote
---

- Built and scaled a Ruby on Rails automation system powering event-driven email campaigns delivering hundreds of thousands of messages daily.
- Built and maintained internal and customer-facing REST API endpoints that exposed backend workflow state, supported operational tooling, and helped teams reason about customer-impacting behavior.

projects.md

- skills: Authored a suite of Claude Code / Codex agent skills for generating evidence-graded code-change reports and delivering interactive, staged walkthroughs of codebase changes (github.com/eddorre/skills).
- c2pa-ruby: Released a Ruby gem implementing the C2PA content provenance standard for authenticating and verifying digital media.
- sidekiq-status: Implemented Sidekiq 8.x compatibility in PR #58, providing the foundational work that was merged into the project's 4.0 release.
- yt RubyGem Contributor: Added etag support across endpoints, enabling smarter caching and more efficient API usage.

You might be asking yourself, “What’s the point in this?” and I totally get that. The purpose of doing that is becomes apparent when introducing Git and Github.

The Repo

Once I had my resume in the composable pieces that I wanted, I created a Git repository, added the files and committed them and then created a v1 tag. If I learn a new skills or learn a new tool, I’ll commit that and make a new tag for that.

When I’m applying for a job, I’ll open up Codex, tell it to create a branch with the date, the name of the company, and the position. Then I will have it make suggested edits, commit them and open up a pull request. We can then collaborate on the edits using the pull request just like I would do with code.

If you’ve ever had to review a big PR you know the pain of having to look at a huge file with a bunch of changes in it. This is where breaking my resume into chunks makes it much easier to review and collaborate on edits since I’m not having to work with the entire document at once.

Once I’m satisfied with the changes, I’ll simply close the PR so that it doesn’t get merged into main (and overwrite my core resume).

Shipping

There is one more step though. I can’t realistically send off a bunch of Markdown files off as my resume, so I have to recombine them in order to ship the final artifact.

In order to do this, I installed Pandoc and WeasyPrint as the PDF engine and simply told Codex to combine the pieces into a PDF using my original PDF menu as the template.

Summary

This makes my personal workflow for applying to jobs much easier and I get to work in a way that is not that different from how I work with code normally.


Next Post
My Boots on the Ground Review of Anthropic's Fable