Fifteen ATS-strict CV and cover-letter theme pairs for career-ops, ported from the Reactive Resume template designs and reimplemented as single-column, parser-safe HTML.
Each theme is a CV template and a matching cover-letter template that share a masthead, face, accent, and density. Every template is single-column, uses system font stacks only (no webfonts), carries no images, tables, or icons, and uses at most one grayscale-safe accent that never appears in body or bullet copy. The point is to pass ATS text extraction reliably while still reading as a designed, distinct document. Fourteen themes are ATS-clean with no caveats; Gazette is marked design-forward and carries an honest disclosure in its own header.
This pack is passive data. career-ops renders your cv.md through a chosen
template; it never executes anything here. It is built on the
template scaffold,
which carries the authoring guide and the design-lever taxonomy behind these
choices.
Installing is copying the theme's two files into your career-ops checkout:
cp templates/cv-template.ledger.html /path/to/career-ops/templates/
cp templates/cover-letter-template.ledger.html /path/to/career-ops/templates/career-ops discovers templates by filename convention and reads each file's own
<!-- career-ops-template --> meta block, then lists them when you generate a PDF
or a cover letter. Copy as many themes as you want to try.
| Theme | Origin | Face | Header treatment | Accent | Register | ATS risk |
|---|---|---|---|---|---|---|
| Ledger | rhyhorn | Georgia | full-width rule | monochrome | law / finance / academe | none |
| Slate | onyx | Helvetica | full rule, heavy name rule | monochrome | engineering classic | none |
| Meridian | kakuna | Georgia | centered, flanked rules | bronze (#7A5C1E) | ceremonial / board / gov | none |
| Cadence | meowth | Helvetica | uppercase letterspaced + rule | indigo (#33356B) | modern corporate / tech mgmt | none |
| Beacon | scizor | Trebuchet MS | page-top letterhead bar | steel-blue (#2B4A63) | consulting / strategy | none |
| Gazette | bronzor | Verdana | left-gutter section labels | monochrome | editorial | design-forward |
| Tempo | lapras | Calibri | short accent tab | ocean-blue (#1E5F74) | product / design-adjacent | none |
| Harbor | glalie | Cambria | small-caps, text underline | teal (#0F5E5E) | calm senior professional | none |
| Fern | chikorita | Tahoma | small-caps + hairline | forest (#2D5A27) | scientific / methodical | none |
| Regent | gengar | Palatino | small-caps, no rule | plum (#5B2A5E) | distinguished senior IC | none |
| Herald | ditto | Helvetica | name-band over heavy rule | burgundy (#6E1E2B) | communications / sales | none |
| Compass | ditgar | Verdana | uppercase, no rule | slate-navy (#2C3E60) | operations / logistics | none |
| Bastion | leafish | Calibri | shaded header bars | deep-pine (#1E4D40) | structured enterprise | none |
| Laurel | pikachu | Times | gold top hairline, small-caps | antique-gold (#806000) | prestige / legal / academia | none |
| Wayfarer | azurill | Helvetica | thin rules, left spine | azure (#1B5E8A) | program mgmt / journey | none |
Face names above are the design intent; each template ships a full system font
stack (for example Calibri renders through Carlito on Linux). Accent hex values
are recorded in pack.json with their measured white-background contrast, all at
or above 4.5:1, all still legible in grayscale.
Gazette is design-forward because its section labels sit in a left gutter. The DOM order stays strictly linear (label then content), so linear-parsing ATS read it correctly, but a minority of position-based parsers could misread the gutter. A labels-above fallback is documented in the Gazette template header.
Each theme, CV and cover letter. Full-size PNGs live in templates/previews/.
Regenerate them (after editing any template, or when adding a theme):
npm run previews:setup # one-time: installs Playwright + Chromium (not saved as a dependency)
npm run previews # renders every template in pack.json; pass ids to scope: npm run previews ledgerThe previews are rendered from sample-cv.json (non-personal sample data) at 1224x1584. They approximate the authoritative career-ops render (generate-pdf.mjs, which uses @page margins and preferCSSPageSize); the script mimics the print margin with a screen-only padding rule, so the result is close, not pixel-for-pixel. Playwright is installed on demand and is never a dependency, so the pack stays passive data.
| Theme | CV | Cover letter |
|---|---|---|
| Ledger | ||
| Slate | ||
| Meridian | ||
| Cadence | ||
| Beacon | ||
| Gazette | ||
| Tempo | ||
| Harbor | ||
| Fern | ||
| Regent | ||
| Herald | ||
| Compass | ||
| Bastion | ||
| Laurel | ||
| Wayfarer |
npm install # dev tooling only (Prettier, commitlint); the pack has no runtime dependencies
npm run validate # shape, ATS, and render checks against pack.json
npm test # the validator's unit tests
npm run smoke # the pack must validate against its own manifest
npm run format:checkMIT. See LICENSE. The theme designs are derived from Reactive Resume by Amruth Pillai (MIT); the templates here are independent, ATS-safe reimplementations.