Add the North America managed services role to the resume

Implico role becomes "Team Lead, BTP Cloud & Mobile Apps and North
America Managed Services" with a bullet for the practice Greg took on
in June 2026. The resume PDF now tightens spacing when it just spills
onto a second page so it stays on one.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aSbo2D1qP8cMFQCykf7kx
This commit is contained in:
Claude
2026-10-12 04:07:36 +00:00
parent 5442a8d888
commit 10a7d0a878
4 changed files with 26 additions and 7 deletions
+12 -3
View File
@@ -55,7 +55,7 @@ interface Body {
* (and line spacing by a little less), so a short resume can be opened up to
* fill its one page instead of leaving the bottom empty.
*/
function renderBody(r: ResumeData, spread = 1): Promise<Body> {
export function renderBody(r: ResumeData, spread = 1): Promise<Body> {
const gapDown = (n: number) => doc.moveDown(n * spread);
const lg = (n: number) => n + (spread - 1) * 1.2;
const doc = new PDFDocument({
@@ -281,11 +281,20 @@ const LIMIT = 792 - PAGE.bottom;
/**
* A one-page resume that ends well above the footer is laid out again with
* wider gaps, up to twice as wide, so the page reads as full; the widest
* spread that still fits on one page wins. Longer resumes are left as they are.
* spread that still fits on one page wins. One that just spills onto a second
* page is laid out with gaps down to 70% when that brings it back to one.
* Longer resumes are left as they are.
*/
export async function fitBody(r: ResumeData): Promise<Body> {
const first = await renderBody(r);
if (first.pages > 1 || LIMIT - first.end < 24) return first;
if (first.pages > 1) {
for (const spread of [0.9, 0.8, 0.7]) {
const tight = await renderBody(r, spread);
if (tight.pages === 1) return tight;
}
return first;
}
if (LIMIT - first.end < 24) return first;
let best = first;
for (let spread = 1.1; spread <= 2.001; spread += 0.1) {
const next = await renderBody(r, spread);