Building a resume website with eleventy
okay, so itâs that time iâve been dreading: i need to brush off my resume and start applying to jobs. i was waiting to see how the election turned out before deciding on my next career moves, but⊠well⊠you saw what happened đ. so here we are, time to dust off the resume and fill in the last few years like a proper grown-up.
i went digging into the archives and pulled out my trusty âresume-final-2.pdfâ from my last job hunt (back in 2019!). turns out, i didnât save the original editable file, so i couldnât just tweak it. love that for me.
so what does a developer who wants to do literally anything but work on their resume do? build a website, obviously đ. inspired by michael engen and max böck, i spun up a small eleventy site that makes a nice, clean resume website and generates a pdf. you can see the final result at eleventy-basic-resume.keith.is and check out the code on github.
the output is just a simple index.html
file, which you can host pretty much anywhere.
this thing is incredibly basic, but it got the job done for me and might be a great starting point if you want to build your own.
why bother with a website?
you own it
sure, there are about a billion resume generators out there. canva templates, figma guides, you name it. but none of those are truly yours. with your own website, you control the code, the look, and everything else. itâs all yours.
eleventy makes something like this super easy to throw together in an afternoon. iâm using the shiny new webc templating language, but you could just as easily use liquid.
fully customizable
i put the basics into a resume.json
file (check it out here), but itâs easy to extend. the css for each component lives inside the components themselves, so tweaking styles is a breeze.
in the index.webc
template, iâve set up css custom properties, so you can tweak things like page layout and colors without much hassle.
:root {
--page-width: 60rem;
--page-margin: 2rem;
--section-spacing: 2.5rem;
--grid-left-column: 12rem;
--text-primary: lch(20 0 0);
--text-secondary: lch(35 0 0);
--text-muted: lch(55 0 0);
--border-color: lch(92 0 0);
--background-color: lch(100 0 0);
--accent-color: lch(45 35 250);
--surface-color: lch(98 0 0);
--breakpoint-sm: 20rem;
--breakpoint-md: 40rem;
--breakpoint-lg: 60rem;
font-family:
Inter,
-apple-system,
BlinkMacSystemFont,
'Segoe UI',
Roboto,
sans-serif;
font-feature-settings:
'liga' 1,
'calt' 1;
font-size: 14pt;
line-height: 1.5;
color: var(--text-primary);
background-color: var(--background-color);
}
write it once
once youâve set up your resume.json
, youâve basically built a reusable block of data. make a microsite every year, theme it for different jobs, whatever. the hard partâwriting about yourselfâis done. from there, itâs just building fun websites on top of it.
seo and discoverability
your resume should help people find you. hosting it on your own website means itâll show up in search engines and crawlers. iâve baked in the h-resume microformat, as well as meta tags and json-ld schema for the resume. the robots will love you.
pdf generation
obviously, some job forms wonât let you just link a website (rude!). but donât worryâthis github repo comes with a small script, print.js, that uses playwright to turn your site into a proper print-ready pdf.
import {chromium} from 'playwright';
async function printPDF() {
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto('http://localhost:8080/', {waitUntil: 'networkidle'});
await page.pdf({format: 'Letter', path: './resume.pdf'});
await browser.close();
}
await printPDF();
run that with npm run start && node print.js
and đ„ youâve got a new resume.pdf
in the same folder.
the print styles remove most of the styling to keep it simple
npx playwright install
if you donât use playwright day to day. Itâll download the chromium binary it needs to browse your development site.
Shoutouts
big thanks to michael engen for inspiring this with his blog post, and to max böck for the idea a few years back.