CV / Resume

A simple black & white CV with profile, experience, education, and skills sections.

  • Resume
  • A4
  • Minimal
How to use
How to use

Render the template, then convert it to PDF

Download the prepared Handlebars template, render it with runtime params, and send the final HTML to the html2pdf.app API.

import fs from 'fs';
import axios from 'axios';
import Handlebars from 'handlebars';

const templateSource = fs.readFileSync('./templates/cv.hbs', 'utf8');
const template = Handlebars.compile(templateSource);

const params = {
  name: 'Jordan Lee',
  role: 'Senior Product Designer',
  contact: [
    '[email protected]',
    '+1 (415) 555-0142',
    'San Francisco, CA',
    'jordanlee.design',
  ],
  profile: 'Product designer with 9+ years of experience.',
  experience: [
    {
      title: 'Senior Product Designer - Northwind Labs',
      period: 'Jul 2022 - Present',
      location: 'San Francisco - Hybrid',
      bullets: [
        'Led redesign of the onboarding flow.',
        'Established the cross-product design system.',
      ],
    },
  ],
  education: {
    degree: 'BFA, Visual Communication',
    period: '2012 - 2016',
    school: 'Rhode Island School of Design',
  },
  languages: [{ name: 'English', level: 'Native' }],
  primarySkills: [{ name: 'Interaction design', level: 'Expert' }],
  secondarySkills: [{ name: 'Accessibility', level: 'Proficient' }],
  footerNote: 'References available on request.',
};

const html = template(params);

const response = await axios.post(
  'https://api.html2pdf.app/v1/generate',
  { html },
  {
    responseType: 'arraybuffer',
    headers: {
      'X-API-Key': process.env.HTML2PDF_API_KEY,
    },
  },
);

fs.writeFileSync('./cv.pdf', response.data);