Skip to content

210 × 297 mm

Resumes

Two-column resume

An A4 two-column resume: a coloured sidebar with contact details, skill level bars drawn from a 1–5 rating, languages and interests, and a main column with a Markdown profile, a timeline of roles with highlights, and education with formatted dates.

A4 portraitLocale en-GBHTML + Jinja

Opens Dynamic Document API with this template preloaded in a free workspace.

Template language features

  • Loops
  • Conditionals
  • Macros
  • Filters
  • Date formatting
  • Markdown

Filters such as format_currency and qrcode are described in the template language reference.

Variables

Derived from the sample data: 7 top-level fields, 30 paths in total. Send the same shape as data.

PathTypeExample
personobject
person.namestring"Anouk Delacroix-Hart"
person.initialsstring"AD"
person.headlinestring"Senior Product Designer"
person.locationstring"Manchester, United Kingdom"
person.emailstring"anouk.hart@example.com"
person.phonestring"+44 20 7946 0321"
person.websitestring"anoukhart.example.net"
person.availabilitystring"Open to hybrid roles in the North West from No…"
profilestring"Product designer with **more than ten years of…"
skillsarray<object> · 8
skills[].namestring"Interaction design"
skills[].levelnumber5
languagesarray<object> · 3
languages[].namestring"English"
languages[].levelstring"Native"
interestsarray<string> · 3"Risograph printing"
experiencearray<object> · 4
experience[].rolestring"Senior Product Designer"
experience[].companystring"Lanternfish Health"
experience[].locationstring"Manchester"
experience[].start_datedate"2022-03-01"
experience[].end_datedate"2022-02-01"
experience[].highlightsarray<string> · 3"Led the redesign of appointment booking for 40…"
educationarray<object> · 2
education[].qualificationstring"MA Interaction Design"
education[].institutionstring"Northgate School of Art"
education[].start_datedate"2014-09-01"
education[].end_datedate"2015-09-01"
education[].detailstring"Distinction. Thesis on paper prototyping with …"

Sample data

Fictional records used for previews. Replace them with your own data when you call the API.

data.json
{
  "person": {
    "name": "Anouk Delacroix-Hart",
    "initials": "AD",
    "headline": "Senior Product Designer",
    "location": "Manchester, United Kingdom",
    "email": "anouk.hart@example.com",
    "phone": "+44 20 7946 0321",
    "website": "anoukhart.example.net",
    "availability": "Open to hybrid roles in the North West from November 2026"
  },
  "profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
  "skills": [
    { "name": "Interaction design", "level": 5 },
    { "name": "Design systems", "level": 5 },
    { "name": "Prototyping", "level": 4 },
    { "name": "Usability research", "level": 4 },
    { "name": "Accessibility (WCAG 2.2)", "level": 4 },
    { "name": "Workshop facilitation", "level": 4 },
    { "name": "Information architecture", "level": 3 },
    { "name": "HTML and CSS", "level": 3 }
  ],
  "languages": [
    { "name": "English", "level": "Native" },
    { "name": "French", "level": "Fluent" },
    { "name": "Dutch", "level": "Conversational" }
  ],
  "interests": ["Risograph printing", "Fell running", "Community garden volunteering"],
  "experience": [
    {
      "role": "Senior Product Designer",
      "company": "Lanternfish Health",
      "location": "Manchester",
      "start_date": "2022-03-01",
      "end_date": null,
      "highlights": [
        "Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.",
        "Built and documented a library of 60 accessible components now shared by four product teams.",
        "Mentor two junior designers and run fortnightly design critiques open to the whole product group."
      ]
    },
    {
      "role": "Product Designer",
      "company": "Cobbleworks Logistics",
      "location": "Leeds",
      "start_date": "2019-01-01",
      "end_date": "2022-02-01",
      "highlights": [
        "Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.",
        "Ran more than 50 usability sessions with drivers and depot staff across three regions.",
        "Worked with engineering to replace a legacy desktop application with a responsive web product."
      ]
    },
    {
      "role": "UX Designer",
      "company": "Paperkite Studio",
      "location": "Manchester",
      "start_date": "2016-06-01",
      "end_date": "2018-12-01",
      "highlights": [
        "Delivered websites and service prototypes for charities, universities and local councils.",
        "Introduced a short accessibility review to every project before handover."
      ]
    },
    {
      "role": "Junior Designer",
      "company": "Harbour & Vale Print Co.",
      "location": "Liverpool",
      "start_date": "2015-09-01",
      "end_date": "2016-05-01",
      "highlights": [
        "Prepared print and digital layouts for independent publishers and arts venues."
      ]
    }
  ],
  "education": [
    {
      "qualification": "MA Interaction Design",
      "institution": "Northgate School of Art",
      "start_date": "2014-09-01",
      "end_date": "2015-09-01",
      "detail": "Distinction. Thesis on paper prototyping with older adults."
    },
    {
      "qualification": "BA (Hons) Graphic Communication",
      "institution": "University of Westmere",
      "start_date": "2011-09-01",
      "end_date": "2014-06-01",
      "detail": "First-class honours."
    }
  ]
}

Source

The body markup with Jinja, the stylesheet placed in <head>.

{#- Two-column resume: sidebar for contact, skills and languages; main column for profile, experience and education. -#}
{%- set date_pattern = "%b %Y" -%}

{%- macro period(start, end) -%}
{{ start | format_date(date_pattern) }} – {% if end %}{{ end | format_date(date_pattern) }}{% else %}Present{% endif %}
{%- endmacro -%}

{%- macro icon(name) -%}
<svg class="icon" viewBox="0 0 16 16" aria-hidden="true" fill="none" stroke="#7dd3b0" stroke-width="1.3" stroke-linecap="round" stroke-linejoin="round">
  {%- if name == "email" %}<rect x="1.5" y="3.5" width="13" height="9" rx="1.5"/><path d="M2 4.5l6 4.5 6-4.5"/>
  {%- elif name == "phone" %}<path d="M4.2 1.8l2 3.1-1.4 1.4a8 8 0 0 0 4.9 4.9l1.4-1.4 3.1 2-.9 2.1c-.3.6-1 .9-1.6.7A13 13 0 0 1 1.3 6c-.2-.6.1-1.3.7-1.6z"/>
  {%- elif name == "web" %}<circle cx="8" cy="8" r="6.5"/><path d="M1.5 8h13M8 1.5c2 2 2.6 4.2 2.6 6.5S10 12.5 8 14.5C6 12.5 5.4 10.3 5.4 8S6 3.5 8 1.5z"/>
  {%- else %}<path d="M8 14.5s5-4.6 5-8.3A5 5 0 0 0 3 6.2c0 3.7 5 8.3 5 8.3z"/><circle cx="8" cy="6.3" r="1.8"/>
  {%- endif %}
</svg>
{%- endmacro %}

<div class="sheet">
  <main class="main">
    <header class="intro">
      <h1>{{ person.name }}</h1>
      <p class="headline">{{ person.headline }}</p>
      {%- if person.availability %}
      <p class="availability">{{ person.availability }}</p>
      {%- endif %}
    </header>

    <section class="profile">
      <h2 class="main-title">Profile</h2>
      {{ profile | markdown }}
    </section>

    <section>
      <h2 class="main-title">Experience</h2>
      <div class="timeline">
        {%- for job in experience %}
        <article class="entry{{ ' current' if not job.end_date else '' }}">
          <div class="entry-head">
            <h3>{{ job.role }}</h3>
            <span class="dates">{{ period(job.start_date, job.end_date) }}</span>
          </div>
          <p class="org">{{ job.company }} · {{ job.location }}</p>
          <ul class="highlights">
            {%- for point in job.highlights %}
            <li>{{ point }}</li>
            {%- endfor %}
          </ul>
        </article>
        {%- endfor %}
      </div>
    </section>

    <section>
      <h2 class="main-title">Education</h2>
      {%- for study in education %}
      <article class="study">
        <div class="entry-head">
          <h3>{{ study.qualification }}</h3>
          <span class="dates">{{ period(study.start_date, study.end_date) }}</span>
        </div>
        <p class="org">{{ study.institution }}{% if study.detail %} · <span class="detail">{{ study.detail }}</span>{% endif %}</p>
      </article>
      {%- endfor %}
    </section>
  </main>

  <aside class="sidebar">
    <div class="monogram" aria-hidden="true">{{ person.initials }}</div>

    <section class="side-section">
      <h2>Contact</h2>
      <ul class="contact">
        <li>{{ icon("email") }}<span>{{ person.email }}</span></li>
        <li>{{ icon("phone") }}<span>{{ person.phone }}</span></li>
        <li>{{ icon("web") }}<span>{{ person.website }}</span></li>
        <li>{{ icon("location") }}<span>{{ person.location }}</span></li>
      </ul>
    </section>

    <section class="side-section">
      <h2>Skills</h2>
      <ul class="skills">
        {%- for skill in skills %}
        <li>
          <span class="skill-name">{{ skill.name }}</span>
          <span class="bar" role="img" aria-label="{{ skill.level }} out of 5"><span class="fill" style="width: {{ (skill.level / 5 * 100) | round | int }}%"></span></span>
        </li>
        {%- endfor %}
      </ul>
    </section>

    <section class="side-section">
      <h2>Languages</h2>
      <ul class="languages">
        {%- for language in languages %}
        <li><span>{{ language.name }}</span><span class="lang-level">{{ language.level }}</span></li>
        {%- endfor %}
      </ul>
    </section>

    {%- if interests %}
    <section class="side-section">
      <h2>Interests</h2>
      <p class="interests">{{ interests | join(" · ") }}</p>
    </section>
    {%- endif %}
  </aside>
</div>

Render it with the API

After adding the template to your workspace, render it by ID and pass your data. Arrays are shortened here.

curl -X POST https://api-eu.dynamicdocumentapi.com/v1/renders \
  -H "Authorization: Bearer $DYNAMIC_DOCUMENT_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "input": {
    "type": "template",
    "template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
  },
  "data": {
    "person": {
      "name": "Anouk Delacroix-Hart",
      "initials": "AD",
      "headline": "Senior Product Designer",
      "location": "Manchester, United Kingdom",
      "email": "anouk.hart@example.com",
      "phone": "+44 20 7946 0321",
      "website": "anoukhart.example.net",
      "availability": "Open to hybrid roles in the North West from November 2026"
    },
    "profile": "Product designer with **more than ten years of experience** shaping everyday services, from appointment booking for community clinics to planning tools for logistics teams. I work side by side with researchers and engineers, turn messy problems into prototypes that can be tested within days, and care about accessible, well-documented design systems.",
    "skills": [
      {
        "name": "Interaction design",
        "level": 5
      },
      {
        "name": "Design systems",
        "level": 5
      }
    ],
    "languages": [
      {
        "name": "English",
        "level": "Native"
      },
      {
        "name": "French",
        "level": "Fluent"
      }
    ],
    "interests": [
      "Risograph printing",
      "Fell running"
    ],
    "experience": [
      {
        "role": "Senior Product Designer",
        "company": "Lanternfish Health",
        "location": "Manchester",
        "start_date": "2022-03-01",
        "end_date": null,
        "highlights": [
          "Led the redesign of appointment booking for 40 community clinics, cutting abandoned bookings by 23% in six months.",
          "Built and documented a library of 60 accessible components now shared by four product teams."
        ]
      },
      {
        "role": "Product Designer",
        "company": "Cobbleworks Logistics",
        "location": "Leeds",
        "start_date": "2019-01-01",
        "end_date": "2022-02-01",
        "highlights": [
          "Designed route-planning tools that cut the time to build a daily dispatch plan from 90 to 35 minutes.",
          "Ran more than 50 usability sessions with drivers and depot staff across three regions."
        ]
      }
    ],
    "education": [
      {
        "qualification": "MA Interaction Design",
        "institution": "Northgate School of Art",
        "start_date": "2014-09-01",
        "end_date": "2015-09-01",
        "detail": "Distinction. Thesis on paper prototyping with older adults."
      },
      {
        "qualification": "BA (Hons) Graphic Communication",
        "institution": "University of Westmere",
        "start_date": "2011-09-01",
        "end_date": "2014-06-01",
        "detail": "First-class honours."
      }
    ]
  },
  "output": {
    "format": "pdf",
    "filename": "resume-two-column.pdf"
  }
}'