feat: DOCX-first resume pipeline with visual QC and recruiter-driven restructure#152
Conversation
…restructure
The shipped DOCX was unstyled pandoc output that embedded the site nav
('← jonbogaty.com Download PDF Download DOCX') as body text — pandoc
ignores CSS entirely and nothing ever looked at the artifact. This
replaces the whole pipeline and kills the PDF target: the DOCX is the
resume.
Toolchain (scripts/resume/):
- template.ts: Word-semantics HTML (borderless tables for title/date
alignment, inline styles, Georgia/Calibri, print accent #996B1D)
- build-docx.ts: @turbodocx/html-to-docx compile, no Astro build needed
- qc.ts: renders the actual DOCX via LibreOffice headless → PNG pages
so the artifact gets READ before it ships
- tests/unit/resume-docx.test.ts: structural gate (no nav text, every
position present, styled fonts, no template artifacts)
Data: src/content/resume.json → resume.ts (typed, commented, multiline
prose, onResume/resumeDescription fields for site-vs-resume divergence).
Content restructure per docs/resume-review/recruiter-review-2026-06-09.md
(facts unchanged, framing rebuilt):
- One searchable headline, pipe-stack removed
- Work history ends on strength: Flipside (5yr) / GoHealth / Symbiont;
Independent and ClassPass are site-only entries
- Flipside highlights lead with the $100K/mo cost win and tm_cli
- Earlier career condensed to a single consulting-arc paragraph
- OSS reduced to a compact section pointing at jonbogaty.com
- Skills condensed to 7 JD-matching categories
- LLM-tell phrases removed and regression-tested (battle-tested,
production-ready, Track record of, spearheaded, departureContext)
Resume is now 2 pages (was 3+ unstyled). PDF removed from scripts, site
links, workflows, and release assets.
Decision: DOCX compiled from typed TS data via turbodocx, not pandoc or raw docx lib
Why: pandoc drops CSS; docx lib broke Apple Pages previously (fdcd220); turbodocx was the validated path and QC now guards it
Resolves: user directive to make DOCX the sole, properly-styled distributable
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Warning Review limit reached
More reviews will be available in 43 minutes and 57 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (32)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
Resume DOCX has been automatically regenerated from updated source files. |
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
There was a problem hiding this comment.
Code Review
This pull request replaces the previous JSON-based resume and PDF generation pipeline with a TypeScript-based resume data module and a DOCX-first compilation pipeline using @turbodocx/html-to-docx. It also introduces a visual quality control script that renders the compiled DOCX to PNGs via LibreOffice, along with structural unit tests to verify the document's integrity. The resume content has been rewritten to remove LLM-like writing tells and focus on a single professional identity. The review feedback highlights opportunities to improve cross-platform compatibility and robustness, specifically by replacing the external unzip CLI command in tests with the Node-native jszip library, wrapping the external pdftoppm execution in a try-catch block to handle missing dependencies gracefully, and fixing a layout bug in the HTML template where an empty edu.honors array would still render an empty paragraph tag.
Important
The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
…s, data-derived test dates Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
|
Resume DOCX has been automatically regenerated from updated source files. |
pull_request paths filters match the whole PR diff, so the workflow re-ran on its own regenerate commits, and the DOCX zip is not byte-deterministic so the diff was always dirty — 11 bot commits in a row. Guard on the bot author and diff word/document.xml content instead of zip bytes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Why
Feedback: DOCX quality control had collapsed. Investigation confirmed it: the shipped DOCX was unstyled pandoc output whose first line was the site nav text ('← jonbogaty.com Download PDF Download DOCX') — pandoc ignores CSS and no process ever looked at the artifact. Separately, the resume was 3+ pages with known LLM-tell copy.
What
Toolchain (
scripts/resume/) — the DOCX is now the resume; the PDF target is removed everywhere (scripts, site links, workflows, release assets):pnpm resume:build— compilespublic/Jon_Bogaty_Resume.docxfrom typed data, no Astro build neededpnpm resume:qc— renders the actual DOCX via LibreOffice headless → per-page PNGs so the artifact gets read before shippingtests/unit/resume-docx.test.ts— structural gate: no nav text, every position present, styled fonts, no template artifacts, no LLM-tell phrasesData —
resume.json→src/content/resume.ts: typed, commented, multiline prose,onResume/resumeDescriptionfields so site and resume can diverge without forking data.Content restructure (per
docs/resume-review/recruiter-review-2026-06-09.md— full recruiter/copy-editor/career-coach review included; facts unchanged, framing rebuilt):Result: 2 clean pages (QC-verified screenshots), down from 3+ unstyled.
Verification
astro check+ tsc green; biome cleanpnpm resume:qcpages visually reviewed at every iteration🤖 Generated with Claude Code