Resume System Documentation

How Jack's Resume Pipeline Works

Every resume is built fresh from the same source materials, tailored to a specific job, generated as a Word document, and visually verified before it ever touches an application form.

40+ Resumes generated
3 Source documents
7 Steps in the pipeline
0 Fabricated skills
Source Documents (click to read)
๐Ÿ“„
Base Resume
Full career history. The raw content pool โ€” never sent anywhere as-is.
Click to read โ†’
๐Ÿ“
Optimization Rules
ATS philosophy, what to cut, how to avoid fabrication, 7-second-read principle.
Click to read โ†’
๐Ÿ—‚๏ธ
Skills Inventory
Confirmed skills only. Anything not here stays off every resume.
Click to read โ†’
๐Ÿ—’๏ธ
Content Wiki
Living log of job notes, reusable answers, and workflow decisions.
Click to read โ†’
โœ๏ธ
Example Output (Gusto)
The tailored markdown for the Gusto Senior Paid Social Lead role.
Click to read โ†’
๐Ÿ
DOCX Script (Gusto)
The Python script that builds the Word document for that role.
Click to read โ†’
The 7-Step Pipeline
1
Load source materials
Base Resume + Optimization Rules + Skills Inventory + Content Wiki

Every application starts from the same three source files. A prior job-specific resume is never used as a starting point for a new application โ€” existing tailored resumes are archival history only.

  • Base Resume โ€” 12 years of career history. The raw content pool.
  • Optimization Rules โ€” ATS and hiring-manager philosophy. The job description is the only filter.
  • Skills Inventory โ€” Confirmed skills only. If it's not here, it doesn't go on a resume, period.
  • Content Wiki โ€” Accumulated job notes, reusable application answers, and platform quirks.
2
Extract the job description
Keywords, responsibilities, seniority signals, required tools

Before writing a single word, the job description is broken into a checklist of every requirement, responsibility, skill, tool, and qualification it mentions. That checklist is the blueprint.

  • Pull exact phrases and keywords, not paraphrases.
  • Note the seniority level: IC contributor, manager, director, etc.
  • Flag any required skills that are not confirmed in the Skills Inventory. Those get flagged as gaps rather than added to the resume.
  • Note whether the role is in-house/brand-side or agency โ€” changes which experience to lead with.
3
Write the tailored markdown resume
Fresh file, job-specific copy, ATS keywords, no fabrication

A new .md file is created, named for the company and role. The resume is assembled from the base content with strict rules on what makes the cut:

  • Only bullets that map directly to the job posting blueprint are kept.
  • The summary is rewritten entirely from scratch for each role.
  • Most recent role: ~6 bullets. Second role: ~3 bullets. Older roles: 1-2 bullets or a single title/date line.
  • Exact job-description keywords are used where truthful. No flowery language, no AI-sounding filler words.
  • No skills, tools, or platforms that are not in the Skills Inventory, even if the posting asks for them.
  • Location formatted as New York, New York. No em dashes anywhere.
4
Generate the DOCX via Python
python-docx script, ATS-safe layout, single-column, no decorative elements

Each resume has a paired Python script that builds a Word document using the python-docx library. The content is hardcoded in the script, and running it outputs the final .docx. The formatting spec is fixed:

  • Font: Arial, 10.5pt body, 22pt name, 10.5pt bold section headers
  • Margins: 0.6โ€“0.65 inches (tighter than default to fit content without shrinking text)
  • Layout: Single-column only. No tables, text boxes, sidebars, images, or decorative lines.
  • Bullets: Standard round bullets via Word's List Bullet style
  • Section heads: All-caps, bold โ€” SUMMARY, SKILLS, EXPERIENCE, EDUCATION
  • Line spacing: 1.0 throughout with tight paragraph spacing (0-3pt before/after)
5
Visual render check
LibreOffice converts DOCX to PNG pages, each page inspected manually

The .docx is converted to page-by-page PNG images using LibreOffice (called via a render script, with the app bundle binary path added to PATH). These land in a folder like rendered_gusto_paid_social/page-1.png.

  • Every rendered page is inspected visually for clipping, cramped spacing, or bad pagination.
  • If anything looks off, the Python script is revised and rerun until the render is clean.
  • This step catches issues that Word's own preview hides โ€” particularly content overflowing the page or orphaned lines at the top of page 2.
โ›”
Human review gate
Hard stop โ€” nothing moves forward until Jack signs off

After generating and visually checking the resume, the process fully stops. The resume is not uploaded to any application form until explicit sign-off is given.

Mandatory on every single run, no exceptions
7
Application form autofill (optional)
Greenhouse / React forms filled via JS, .env as source of truth, second gate before submit

For supported application systems (mainly Greenhouse), a JavaScript autofill script fills standard form fields. A second hard stop fires before any final submission click.

  • Source of truth: .env file, not browser autofill (which can insert stale email addresses).
  • Legal name / Preferred name: Always "John" / "Jack" respectively.
  • React fields: Filled via native input value setters plus dispatched input/change events so React-controlled fields register the update.
  • Demographic dropdowns: Must be actually selected from the menu โ€” typing into the field is not sufficient in Greenhouse.
  • Country code dropdown: Always the "+1 / US" option.
  • Non-compete: Jack has confirmed no active non-competes โ€” answer is "No."
  • Second gate: Process stops at "filled and uploaded, no submit" until Jack confirms he's ready.
Standing Guardrails
  • Never reuse a prior job-specific resume as the starting point for a new application.
  • Never fabricate or imply a skill, tool, or platform that is not confirmed in the Skills Inventory.
  • Never include a personal website or portfolio URL unless explicitly overridden for a specific role.
  • Never use em dashes anywhere in resume copy.
  • Never upload a resume that has not passed the human review gate.
  • Never submit a final application without explicit confirmation โ€” only fill and stop.
  • Flag unconfirmed skills as gaps rather than assuming ownership.
  • Keep resume language tuned to the actual hiring audience โ€” no fancy technical padding unless the job asks for it.