A static resume site with two variants built from shared content:
- leadership β the default, published at ryanjohnson.ca
- ic β senior IC framing, PDF-only by default (never uploaded, never linked)
.
βββ build.js renders both variants + PDFs into dist/
βββ src/
β βββ template.html design shell (HTML + inline CSS + inline JS) with slots
β βββ content.js ALL resume content: shared facts + per-variant framing
βββ fonts/ self-hosted woff2 (Inter, JetBrains Mono, Source Serif 4)
βββ deploy.sh uploads dist/index.html + fonts to S3, invalidates CloudFront
βββ dist/ generated output (gitignored)
βββ index.html published variant
βββ leadership/index.html preview (noindex)
βββ ic/index.html preview (noindex)
βββ Ryan_Johnson_Engineering_Leader.pdf
βββ Ryan_Johnson_Senior_Engineer.pdf
Everything lives in src/content.js:
- Shared facts (contact, employers, titles, dates, skills, education) live in
sharedβ edit once, both variants update. - Variant framing (tagline, chip, Director-role lede and bullets, earlier-experience summary) lives in
variants.leadershipandvariants.ic.
Rules enforced by the build: no em dashes in resume prose (use commas, colons, parentheses, or periods; date-range en dashes are fine). Titles, dates, and metrics are shared values so they cannot drift between variants.
Design changes (CSS, layout, chrome) go in src/template.html.
npm run buildRenders both HTML variants and exports both PDFs via headless Chrome (uses your installed Google Chrome; override with CHROME_BIN=/path/to/chrome, or skip PDFs with SKIP_PDF=1).
The variant published at the site root defaults to leadership; override with:
PUBLISHED_VARIANT=ic npm run buildnpm run devServes dist/ at http://localhost:3000. Previews: /leadership/ and /ic/.
npm run deployBuilds, then uploads dist/index.html + fonts to the S3 bucket behind the CloudFront distribution and invalidates /index.html. The IC preview and the PDFs are intentionally never uploaded.
Both PDFs are regenerated on every build via the print stylesheet (US Letter, two pages at comfortable type):
dist/Ryan_Johnson_Engineering_Leader.pdfdist/Ryan_Johnson_Senior_Engineer.pdf