8.5 × 11 in
Resumes
Minimal resume
A single-column US Letter resume with a restrained typographic hierarchy: sections and entries come from data in the order given, dates are formatted as month and year, current roles read Present, and skills are listed by category.
Opens Dynamic Document API with this template preloaded in a free workspace.
Template language features
- Loops
- Conditionals
- Macros
- Filters
- Date formatting
Filters such as format_currency and qrcode are described in the template language reference.
Variables
Derived from the sample data: 4 top-level fields, 20 paths in total. Send the same shape as data.
| Path | Type | Example |
|---|---|---|
| person | object | |
| person.name | string | "Caleb Ashworth-Nguyen" |
| person.title | string | "Staff Data Engineer" |
| person.location | string | "Minneapolis, MN" |
| person.email | string | "caleb.an@example.com" |
| person.phone | string | "+1 202-555-0164" |
| person.links | array<string> · 2 | "caleb-an.example.net" |
| summary | string | "Data engineer with 13 years of experience buil…" |
| sections | array<object> · 3 | |
| sections[].title | string | "Experience" |
| sections[].entries | array<object> · 4 | |
| sections[].entries[].heading | string | "Staff Data Engineer" |
| sections[].entries[].organization | string | "Prairieline Energy Cooperative" |
| sections[].entries[].location | string | "Minneapolis, MN" |
| sections[].entries[].start_date | date | "2022-04-01" |
| sections[].entries[].end_date | date | "2022-03-01" |
| sections[].entries[].bullets | array<string> · 3 | "Lead a platform group of five engineers servin…" |
| skills | array<object> · 3 | |
| skills[].category | string | "Languages" |
| skills[].keywords | array<string> · 4 | "Python" |
Sample data
Fictional records used for previews. Replace them with your own data when you call the API.
{
"person": {
"name": "Caleb Ashworth-Nguyen",
"title": "Staff Data Engineer",
"location": "Minneapolis, MN",
"email": "caleb.an@example.com",
"phone": "+1 202-555-0164",
"links": ["caleb-an.example.net", "code.example.org/caleb-an"]
},
"summary": "Data engineer with 13 years of experience building reliable pipelines and warehouse models for energy, logistics and retail teams. I like boring, well-tested infrastructure, clear data contracts, and helping analysts ship their own work safely.",
"sections": [
{
"title": "Experience",
"entries": [
{
"heading": "Staff Data Engineer",
"organization": "Prairieline Energy Cooperative",
"location": "Minneapolis, MN",
"start_date": "2022-04-01",
"end_date": null,
"bullets": [
"Lead a platform group of five engineers serving 120 analysts across forecasting, billing and grid operations.",
"Moved 340 nightly batch jobs to event-driven loads, bringing meter data freshness from 24 hours to 15 minutes.",
"Introduced schema contracts and automated data quality checks that cut downstream incidents by 60% in a year."
]
},
{
"heading": "Senior Data Engineer",
"organization": "Bluestem Freight Analytics",
"location": "St. Paul, MN",
"start_date": "2018-08-01",
"end_date": "2022-03-01",
"bullets": [
"Designed the shipment event model used by pricing, customer reporting and carrier scorecards.",
"Rebuilt the ingestion service for 2,000 carrier feeds with retries, replay and per-feed alerting.",
"Reduced monthly compute spend by 38% through partitioning, file compaction and query reviews."
]
},
{
"heading": "Data Engineer",
"organization": "Lakewise Retail Group",
"location": "Chicago, IL",
"start_date": "2015-06-01",
"end_date": "2018-07-01",
"bullets": [
"Built daily sales and inventory marts for 210 stores and the online shop.",
"Wrote the team's first testing guide and review checklist for SQL transformations."
]
},
{
"heading": "Analytics Developer",
"organization": "Coralroot Health Partners",
"location": "Madison, WI",
"start_date": "2013-09-01",
"end_date": "2015-05-01",
"bullets": [
"Automated weekly operational reports that had previously been assembled by hand from four systems."
]
}
]
},
{
"title": "Selected projects",
"entries": [
{
"heading": "Schema diff command-line tool",
"organization": "Open source, maintainer",
"location": null,
"start_date": "2021-01-01",
"end_date": null,
"bullets": [
"Compares table schemas between environments and explains breaking changes in plain language. Used in the release checks of several teams."
]
},
{
"heading": "Data engineering mentoring circle",
"organization": "Twin Cities data meetup",
"location": null,
"start_date": "2019-02-01",
"end_date": "2023-06-01",
"bullets": [
"Ran monthly sessions pairing career changers with working engineers; 30 participants moved into data roles."
]
}
]
},
{
"title": "Education",
"entries": [
{
"heading": "B.S. Computer Science",
"organization": "Riverbend State University",
"location": "Duluth, MN",
"start_date": "2009-09-01",
"end_date": "2013-05-01",
"bullets": ["Minor in statistics. Teaching assistant for Introduction to Databases."]
}
]
}
],
"skills": [
{ "category": "Languages", "keywords": ["Python", "SQL", "Scala", "Go"] },
{ "category": "Data", "keywords": ["Batch and stream processing", "Dimensional modeling", "Columnar file formats", "Data quality testing"] },
{ "category": "Platform", "keywords": ["Workflow orchestration", "Infrastructure as code", "Containers", "Cost monitoring"] }
]
}Source
The body markup with Jinja, the stylesheet placed in <head>.
{#- Minimal single-column resume. Sections and their order come from data; an empty end date reads "Present". -#}
{%- macro date_range(start, end) -%}
{%- if start -%}
<span class="dates">{{ start | format_date("%b %Y") }} – {% if end %}{{ end | format_date("%b %Y") }}{% else %}<span class="present">Present</span>{% endif %}</span>
{%- endif -%}
{%- endmacro %}
<header class="header">
<h1>{{ person.name }}</h1>
<p class="title">{{ person.title }}</p>
<ul class="contact">
<li>{{ person.location }}</li>
<li>{{ person.email }}</li>
<li>{{ person.phone }}</li>
{%- for link in person.links %}
<li>{{ link }}</li>
{%- endfor %}
</ul>
</header>
{%- if summary %}
<section class="section summary">
<h2>Summary</h2>
<p>{{ summary }}</p>
</section>
{%- endif %}
{%- for section in sections %}
<section class="section">
<h2>{{ section.title }}</h2>
{%- for entry in section.entries %}
<article class="entry{{ ' last' if loop.last else '' }}">
<div class="entry-line">
<h3>{{ entry.heading }}{% if entry.organization %}<span class="org">{{ entry.organization }}</span>{% endif %}</h3>
{{ date_range(entry.start_date, entry.end_date) }}
</div>
{%- if entry.location %}
<p class="where">{{ entry.location }}</p>
{%- endif %}
{%- if entry.bullets %}
<ul>
{%- for bullet in entry.bullets %}
<li>{{ bullet }}</li>
{%- endfor %}
</ul>
{%- endif %}
</article>
{%- endfor %}
</section>
{%- endfor %}
{%- if skills %}
<section class="section">
<h2>Skills</h2>
<dl class="skills">
{%- for group in skills %}
<dt>{{ group.category }}</dt>
<dd>{{ group.keywords | join(", ") }}</dd>
{%- endfor %}
</dl>
</section>
{%- endif %}<title>{{ person.name }} – Resume</title>
<style>
:root {
--ink: #171717;
--body: #2f2f2f;
--muted: #6f6f6f;
--hairline: #d6d6d6;
--accent: #7c1f2c;
}
* { box-sizing: border-box; }
html { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
body {
margin: 0;
color: var(--body);
font-family: "Source Sans 3", "Liberation Sans", Arial, sans-serif;
font-size: 9.8pt;
line-height: 1.42;
}
h1, h2, h3, p, ul, dl, dd { margin: 0; padding: 0; }
.header { padding-bottom: 5mm; }
.header h1 {
font-size: 30pt;
font-weight: 300;
line-height: 1.05;
letter-spacing: -0.015em;
color: var(--ink);
}
.title {
margin-top: 1.8mm;
font-size: 9.5pt;
font-weight: 600;
letter-spacing: 0.24em;
text-transform: uppercase;
color: var(--accent);
}
.contact { margin-top: 3mm; font-size: 8.8pt; color: var(--muted); list-style: none; }
.contact li { display: inline; }
.contact li + li::before { content: "/"; margin: 0 2.2mm; color: var(--hairline); }
.section { padding-top: 4.2mm; border-top: 0.25mm solid var(--hairline); margin-top: 3mm; }
.section h2 {
margin-bottom: 2.6mm;
font-size: 7.8pt;
font-weight: 700;
letter-spacing: 0.26em;
text-transform: uppercase;
color: var(--accent);
break-after: avoid;
page-break-after: avoid;
}
.summary p { max-width: 160mm; font-size: 10.4pt; line-height: 1.5; color: var(--ink); }
.entry { margin-bottom: 3.6mm; break-inside: avoid; page-break-inside: avoid; }
.entry.last { margin-bottom: 1.5mm; }
.entry-line { display: flex; justify-content: space-between; align-items: baseline; gap: 6mm; }
.entry h3 { font-size: 11pt; font-weight: 600; line-height: 1.3; color: var(--ink); }
.org { font-weight: 400; color: var(--body); }
.org::before { content: ""; display: inline-block; width: 2.4mm; height: 0.25mm; margin: 0 2mm; background: var(--muted); vertical-align: middle; }
.dates { flex: none; font-size: 9pt; color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
.present { font-weight: 600; color: var(--accent); }
.where { font-size: 8.8pt; font-style: italic; color: var(--muted); }
.entry ul { margin-top: 1mm; list-style: none; }
.entry li { position: relative; margin-bottom: 0.6mm; padding-left: 4.5mm; }
.entry li::before { content: "–"; position: absolute; left: 0.6mm; color: var(--muted); }
.skills { display: grid; grid-template-columns: 22mm 1fr; gap: 1.2mm 4mm; }
.skills dt { font-weight: 600; color: var(--ink); }
</style>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": "Caleb Ashworth-Nguyen",
"title": "Staff Data Engineer",
"location": "Minneapolis, MN",
"email": "caleb.an@example.com",
"phone": "+1 202-555-0164",
"links": [
"caleb-an.example.net",
"code.example.org/caleb-an"
]
},
"summary": "Data engineer with 13 years of experience building reliable pipelines and warehouse models for energy, logistics and retail teams. I like boring, well-tested infrastructure, clear data contracts, and helping analysts ship their own work safely.",
"sections": [
{
"title": "Experience",
"entries": [
{
"heading": "Staff Data Engineer",
"organization": "Prairieline Energy Cooperative",
"location": "Minneapolis, MN",
"start_date": "2022-04-01",
"end_date": null,
"bullets": [
"Lead a platform group of five engineers serving 120 analysts across forecasting, billing and grid operations.",
"Moved 340 nightly batch jobs to event-driven loads, bringing meter data freshness from 24 hours to 15 minutes."
]
},
{
"heading": "Senior Data Engineer",
"organization": "Bluestem Freight Analytics",
"location": "St. Paul, MN",
"start_date": "2018-08-01",
"end_date": "2022-03-01",
"bullets": [
"Designed the shipment event model used by pricing, customer reporting and carrier scorecards.",
"Rebuilt the ingestion service for 2,000 carrier feeds with retries, replay and per-feed alerting."
]
}
]
},
{
"title": "Selected projects",
"entries": [
{
"heading": "Schema diff command-line tool",
"organization": "Open source, maintainer",
"location": null,
"start_date": "2021-01-01",
"end_date": null,
"bullets": [
"Compares table schemas between environments and explains breaking changes in plain language. Used in the release checks of several teams."
]
},
{
"heading": "Data engineering mentoring circle",
"organization": "Twin Cities data meetup",
"location": null,
"start_date": "2019-02-01",
"end_date": "2023-06-01",
"bullets": [
"Ran monthly sessions pairing career changers with working engineers; 30 participants moved into data roles."
]
}
]
}
],
"skills": [
{
"category": "Languages",
"keywords": [
"Python",
"SQL"
]
},
{
"category": "Data",
"keywords": [
"Batch and stream processing",
"Dimensional modeling"
]
}
]
},
"output": {
"format": "pdf",
"filename": "resume-minimal.pdf"
}
}'const response = await fetch("https://api-eu.dynamicdocumentapi.com/v1/renders", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.DYNAMIC_DOCUMENT_API_KEY}`,
"Content-Type": "application/json",
"Idempotency-Key": crypto.randomUUID(),
},
body: JSON.stringify({
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C"
},
"data": {
"person": {
"name": "Caleb Ashworth-Nguyen",
"title": "Staff Data Engineer",
"location": "Minneapolis, MN",
"email": "caleb.an@example.com",
"phone": "+1 202-555-0164",
"links": [
"caleb-an.example.net",
"code.example.org/caleb-an"
]
},
"summary": "Data engineer with 13 years of experience building reliable pipelines and warehouse models for energy, logistics and retail teams. I like boring, well-tested infrastructure, clear data contracts, and helping analysts ship their own work safely.",
"sections": [
{
"title": "Experience",
"entries": [
{
"heading": "Staff Data Engineer",
"organization": "Prairieline Energy Cooperative",
"location": "Minneapolis, MN",
"start_date": "2022-04-01",
"end_date": null,
"bullets": [
"Lead a platform group of five engineers serving 120 analysts across forecasting, billing and grid operations.",
"Moved 340 nightly batch jobs to event-driven loads, bringing meter data freshness from 24 hours to 15 minutes."
]
},
{
"heading": "Senior Data Engineer",
"organization": "Bluestem Freight Analytics",
"location": "St. Paul, MN",
"start_date": "2018-08-01",
"end_date": "2022-03-01",
"bullets": [
"Designed the shipment event model used by pricing, customer reporting and carrier scorecards.",
"Rebuilt the ingestion service for 2,000 carrier feeds with retries, replay and per-feed alerting."
]
}
]
},
{
"title": "Selected projects",
"entries": [
{
"heading": "Schema diff command-line tool",
"organization": "Open source, maintainer",
"location": null,
"start_date": "2021-01-01",
"end_date": null,
"bullets": [
"Compares table schemas between environments and explains breaking changes in plain language. Used in the release checks of several teams."
]
},
{
"heading": "Data engineering mentoring circle",
"organization": "Twin Cities data meetup",
"location": null,
"start_date": "2019-02-01",
"end_date": "2023-06-01",
"bullets": [
"Ran monthly sessions pairing career changers with working engineers; 30 participants moved into data roles."
]
}
]
}
],
"skills": [
{
"category": "Languages",
"keywords": [
"Python",
"SQL"
]
},
{
"category": "Data",
"keywords": [
"Batch and stream processing",
"Dimensional modeling"
]
}
]
},
"output": {
"format": "pdf",
"filename": "resume-minimal.pdf"
}
}),
});
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const result = await response.json();
console.log(result);import os
import uuid
import requests
response = requests.post(
"https://api-eu.dynamicdocumentapi.com/v1/renders",
headers={
"Authorization": f"Bearer {os.environ['DYNAMIC_DOCUMENT_API_KEY']}",
"Idempotency-Key": str(uuid.uuid4()),
},
json={
"input": {
"type": "template",
"template_id": "tpl_01J9ZK3M7Q8V5W2X4Y6Z8A0B1C",
},
"data": {
"person": {
"name": "Caleb Ashworth-Nguyen",
"title": "Staff Data Engineer",
"location": "Minneapolis, MN",
"email": "caleb.an@example.com",
"phone": "+1 202-555-0164",
"links": ["caleb-an.example.net", "code.example.org/caleb-an"],
},
"summary": "Data engineer with 13 years of experience building reliable pipelines and warehouse models for energy, logistics and retail teams. I like boring, well-tested infrastructure, clear data contracts, and helping analysts ship their own work safely.",
"sections": [
{
"title": "Experience",
"entries": [
{
"heading": "Staff Data Engineer",
"organization": "Prairieline Energy Cooperative",
"location": "Minneapolis, MN",
"start_date": "2022-04-01",
"end_date": None,
"bullets": ["Lead a platform group of five engineers serving 120 analysts across forecasting, billing and grid operations.", "Moved 340 nightly batch jobs to event-driven loads, bringing meter data freshness from 24 hours to 15 minutes."],
},
{
"heading": "Senior Data Engineer",
"organization": "Bluestem Freight Analytics",
"location": "St. Paul, MN",
"start_date": "2018-08-01",
"end_date": "2022-03-01",
"bullets": ["Designed the shipment event model used by pricing, customer reporting and carrier scorecards.", "Rebuilt the ingestion service for 2,000 carrier feeds with retries, replay and per-feed alerting."],
},
],
},
{
"title": "Selected projects",
"entries": [
{
"heading": "Schema diff command-line tool",
"organization": "Open source, maintainer",
"location": None,
"start_date": "2021-01-01",
"end_date": None,
"bullets": ["Compares table schemas between environments and explains breaking changes in plain language. Used in the release checks of several teams."],
},
{
"heading": "Data engineering mentoring circle",
"organization": "Twin Cities data meetup",
"location": None,
"start_date": "2019-02-01",
"end_date": "2023-06-01",
"bullets": ["Ran monthly sessions pairing career changers with working engineers; 30 participants moved into data roles."],
},
],
},
],
"skills": [
{
"category": "Languages",
"keywords": ["Python", "SQL"],
},
{
"category": "Data",
"keywords": ["Batch and stream processing", "Dimensional modeling"],
},
],
},
"output": {
"format": "pdf",
"filename": "resume-minimal.pdf",
},
},
timeout=90,
)
response.raise_for_status()
print(response.json())