Skip to content
LpdfDocsv0.24-r1004.10

Lpdf is pre-release. The XML schema and SDK APIs can change between releases.

Résumé

A one-page résumé: colours and sizes named once as tokens, two columns, wrapping tags.

document.xml

A one-page résumé. What this adds to the letter:
tokens name a colour or a size once, use the name everywhere. Change a <color> below
and the whole page follows. Sizes work the same way: gap="m" and font-size="s"
each read their own scale, so m is a different number for a gap and for a font
assets declare the fonts you use, then pick one with font="..."
layout split puts two columns side by side, flank puts a label beside a value,
cluster wraps tags onto new lines, grid makes equal columns
<lpdf version="1">
<!--
A one-page résumé. What this adds to the letter:
tokens name a colour or a size once, use the name everywhere. Change a <color> below
and the whole page follows. Sizes work the same way: gap="m" and font-size="s"
each read their own scale, so m is a different number for a gap and for a font
assets declare the fonts you use, then pick one with font="..."
layout split puts two columns side by side, flank puts a label beside a value,
cluster wraps tags onto new lines, grid makes equal columns
-->
<assets>
<!-- a serif for headings against a sans-serif for text; these two are built into every PDF.
To use your own font, declare it here: <font name="brand" src="fonts/Brand.ttf" /> -->
<font name="body" core="Helvetica" />
<font name="heading" core="Times-Bold" />
</assets>
<tokens>
<colors>
<color name="primary" value="#0f766e" />
<color name="surface" value="#ffffff" />
<color name="surface-alt" value="#f0f5f4" />
<color name="text-muted" value="#5f6b6a" />
<color name="rule" value="#cfdcda" />
</colors>
<space xs="2pt" s="5pt" m="9pt" l="16pt" xl="24pt" xxl="36pt" />
<text-size xs="7.5pt" s="9pt" m="10.5pt" l="14pt" xl="24pt" xxl="30pt" />
</tokens>
<document size="letter" margin="0pt" font="body">
<meta title="Résumé: Jordan Ellis" author="Jordan Ellis" />
<section background="surface">
<layout>
<split gap="0pt" height="full">
<!-- sidebar: its own background, as tall as the page -->
<stack width="190pt" height="full" padding="l" gap="l" background="surface-alt">
<stack gap="xs">
<text font="heading" font-size="xl" color="primary">Jordan Ellis</text>
<text font-size="s" color="text-muted">Senior Software Engineer</text>
</stack>
<divider color="rule" thickness="xs" />
<stack gap="s">
<text font="heading" font-size="m">Contact</text>
<text font-size="s" color="text-muted">jordan.ellis@example.com</text>
<text font-size="s" color="text-muted">+1 555 0142</text>
<text font-size="s" color="text-muted">Portland, OR</text>
<text font-size="s" color="text-muted">github.com/jordan-ellis</text>
</stack>
<divider color="rule" thickness="xs" />
<!-- a cluster wraps its children onto new lines, like words in a paragraph -->
<stack gap="s">
<text font="heading" font-size="m">Skills</text>
<cluster gap="s">
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">Rust</text></frame>
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">TypeScript</text></frame>
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">WebAssembly</text></frame>
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">PostgreSQL</text></frame>
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">Kubernetes</text></frame>
<frame padding="s" border="xs primary" radius="s"><text font-size="xs" color="primary">Go</text></frame>
</cluster>
</stack>
<divider color="rule" thickness="xs" />
<stack gap="s">
<text font="heading" font-size="m">Education</text>
<stack gap="xs">
<text font-size="s" bold="true">B.S. Computer Science</text>
<text font-size="s" color="text-muted">Oregon State University, 2014</text>
</stack>
</stack>
<divider color="rule" thickness="xs" />
<stack gap="s">
<text font="heading" font-size="m">Languages</text>
<text font-size="s" color="text-muted">English (native)</text>
<text font-size="s" color="text-muted">Spanish (professional)</text>
</stack>
</stack>
<!-- main column -->
<stack padding="xl" gap="l" height="fill">
<stack gap="s">
<text font="heading" font-size="l" color="primary">Profile</text>
<divider color="primary" thickness="xs" />
<text font-size="m">
Software engineer with ten years of experience building fast, reliable systems.
I like small teams, clear interfaces and code that is easy to delete.
</text>
</stack>
<!-- a grid makes equal columns: three figures, one per cell -->
<grid cols="3" gap="m">
<stack gap="xs">
<text font="heading" font-size="xl" color="primary">10 yrs</text>
<text font-size="s" color="text-muted">in production systems</text>
</stack>
<stack gap="xs">
<text font="heading" font-size="xl" color="primary">50M</text>
<text font-size="s" color="text-muted">events a day, one pipeline</text>
</stack>
<stack gap="xs">
<text font="heading" font-size="xl" color="primary">-40%</text>
<text font-size="s" color="text-muted">p99 latency after the rewrite</text>
</stack>
</grid>
<stack gap="m">
<text font="heading" font-size="l" color="primary">Experience</text>
<divider color="primary" thickness="xs" />
<stack gap="l">
<!-- end="true": the first child takes the space, the others sit at the right edge.
A bullet is a flank too: a narrow marker, then text that fills the rest -->
<stack gap="s">
<flank end="true" gap="m" align="center">
<text bold="true">Staff Engineer, Northwind Data</text>
<text font-size="s" color="text-muted">2021 to present</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Led the design of a streaming pipeline that handles fifty million events a day.</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Cut p99 latency by forty percent with a custom allocator and lock-free queues.</text>
</flank>
</stack>
<stack gap="s">
<flank end="true" gap="m" align="center">
<text bold="true">Senior Engineer, Brightside Labs</text>
<text font-size="s" color="text-muted">2017 to 2021</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Built a multi-tenant platform that serves eight thousand customers.</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Moved a monolith to services and cut deploys from forty-five minutes to three.</text>
</flank>
</stack>
<stack gap="s">
<flank end="true" gap="m" align="center">
<text bold="true">Software Engineer, Orion Systems</text>
<text font-size="s" color="text-muted">2014 to 2017</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Wrote firmware for IoT sensors in C and Rust.</text>
</flank>
<flank gap="s">
<text width="8pt" color="primary">•</text>
<text>Shipped the cloud SDKs that three enterprise customers adopted in the first year.</text>
</flank>
</stack>
</stack>
</stack>
<!-- cards: a grid of boxes, each a stack with its own background and border -->
<stack gap="m">
<text font="heading" font-size="l" color="primary">Selected projects</text>
<divider color="primary" thickness="xs" />
<grid cols="2" gap="m">
<stack gap="xs" padding="m" background="surface-alt" radius="s">
<text bold="true">tinyqueue</text>
<text font-size="s" color="text-muted">A lock-free queue for Rust, used by four open-source projects.</text>
</stack>
<stack gap="xs" padding="m" background="surface-alt" radius="s">
<text bold="true">pgwatch</text>
<text font-size="s" color="text-muted">A small tool that explains slow PostgreSQL queries in plain words.</text>
</stack>
<stack gap="xs" padding="m" background="surface-alt" radius="s">
<text bold="true">Edge cache talk</text>
<text font-size="s" color="text-muted">Gave a conference talk on tail latency and what causes it.</text>
</stack>
<stack gap="xs" padding="m" background="surface-alt" radius="s">
<text bold="true">Mentoring</text>
<text font-size="s" color="text-muted">Mentor in a program that places career changers in engineering roles.</text>
</stack>
</grid>
</stack>
</stack>
</split>
</layout>
</section>
</document>
</lpdf>