Resume Templates
The document template system — the twelve built-in templates (7 resume, 5 cover letter), the dual-engine model, and how to add your own.
Resume Templates
VeriWorkly separates professional data (your Master Profile and documents) from visual presentation (the template). Switching templates never modifies or loses data, so you can cycle through the whole library to compare layouts.
Resume templates
All seven resume templates and five cover letter templates are free. There is no template lock on resumes or cover letters.
Executive Clarity
A polished single-column layout with refined spacing, strong section rhythm, and ATS-safe
structure. Tagged: one column, ATS-friendly, modern, professional. Default accent #0ea5e9.
Precision ATS
A dense, recruiter-friendly single-column layout for longer resumes, built for parsing accuracy
above all else. Tagged: one column, ATS-friendly, compact, simple. Default accent #10b981.
Modern Minimal
A rule-free layout with generous whitespace and small uppercase section labels, for resumes where
the writing should carry the page. Default accent #6366f1.
Timeline Focus
Dates sit in a fixed left gutter so a reviewer can scan an entire chronology in one pass. Best for
long tenures and multi-page histories. Default accent #0f766e.
Corporate Brief
A split letterhead — identity left, contact right — with accent-barred section headings that read
like an internal business brief. Default accent #1d4ed8.
Bold Impact
A centered, uppercase masthead over a heavy accent rule, with accent-underlined section headings.
For applications where the first impression has to carry weight. Default accent #b91c1c.
VeriWorkly Special
A modern high-impact layout with distinct accent rules, structured badges, and balanced typographic hierarchy. Default accent #2563eb.
Every resume template is single-column and ATS-safe by design — they differ in density, header treatment, and typographic breathing room, not in parseability.
Cover letter templates
Professional
Formal letterhead, strong subject treatment, and conservative recruiter-safe spacing. Template id
professional.
VeriWorkly Special
A branded layout with an identity rail, clean letterhead, and structured proof points. Template id
veriworkly-special.
Minimalist
An ultra-clean, distraction-free typographic layout focusing entirely on clarity. Template id
minimalist.
Executive
Sophisticated executive styling with premium letterhead and refined typography. Template id
executive.
ATS Essential
Streamlined, high-density format engineered specifically for automated parsing. Template id
ats-essential.
See Cover Letter Builder.
Portfolio templates are separate
The four portfolio templates — Signal, Atelier, Nimbus, and Cipher — belong to the portfolio builder, not the document builder, and two of them are premium. See Portfolio: Templates.
Dual-engine rendering
Each template is implemented twice against the same data:
- Web engine (
web.tsx) — React and Tailwind CSS 4, powering the live paged preview. - PDF engine (
pdf.tsx) —@react-pdf/rendererprimitives, producing the exported PDF with embedded fonts and real vector text.
Both read the same ResumeCustomization object, which is what keeps the preview and the export
visually aligned. See Export Pipeline.
Source reference
| Template | Web engine | PDF engine |
|---|---|---|
| Precision ATS | web.tsx | pdf.tsx |
| Executive Clarity | web.tsx | pdf.tsx |
| Modern Minimal | web.tsx | pdf.tsx |
| Timeline Focus | web.tsx | pdf.tsx |
| Corporate Brief | web.tsx | pdf.tsx |
| Bold Impact | web.tsx | pdf.tsx |
| VeriWorkly Special (resume) | web.tsx | pdf.tsx |
| Professional (cover letter) | web.tsx | pdf.tsx |
| VeriWorkly Special (cover letter) | web.tsx | pdf.tsx |
| Minimalist (cover letter) | web.tsx | pdf.tsx |
| Executive (cover letter) | web.tsx | pdf.tsx |
| ATS Essential (cover letter) | web.tsx | pdf.tsx |
The registry that wires templates into Studio is
apps/studio/templates/index.ts.
Template metadata
Each template exports a meta.ts describing itself to the picker:
export const precisionAtsMeta = {
id: "precision-ats",
name: "Precision ATS",
documentType: "RESUME",
description: "A dense, recruiter-friendly layout …",
accentColor: "#10b981",
previewImage: "/templates/resume/precision-ats.png",
tags: ["One column", "ATS-friendly", "Compact", "Simple"],
} satisfies TemplateMeta;Customisation
Every template honours the same customisation object:
- Colours — accent, body text, muted text, page background, section background, borders, and section headings, each independently set.
- Typography — font family (which drives PDF font embedding) plus body and heading line heights.
- Spacing — section spacing and page padding.
- Structure — per-section visibility and ordering, and for two-column templates, a left/right column assignment per section.
See Resume Schema for the full field list.
Adding a template
-
Create
apps/studio/templates/resume/{your-template}/containingmeta.ts,skin.ts,web.tsx, andpdf.tsx. Every template is built withcreateResumeWebTemplate/createResumePdfTemplatefromapps/studio/templates/resume/shared/, which handle section ordering, item content, spacing, and pagination — a skin only supplies a type scale, a header, and a section heading.Put every number in
skin.ts(the type scale plus ageometryobject) and read it from bothweb.tsxandpdf.tsx. Sizes must never be written twice. -
Register the metadata and web renderer in
apps/studio/templates/index.ts. -
Register the PDF component in
apps/studio/templates/resume/pdf/index.ts. -
Add the metadata to
apps/studio/features/documents/core/template-catalog.ts(the picker) and a preview asset atapps/studio/public/templates/resume/{your-template}.(svg|png). -
Verify against
/pdf-debug/resume/{your-template}, the internal PDF rendering debugger.
tests/contracts/template-render.contract.test.tsx fails if steps 2–4 fall out of sync, so a
half-registered template cannot ship, and template-geometry.contract.test.tsx lays the PDF out
and checks its real boxes against the scale.
A bare number in a react-pdf style means points
@react-pdf/stylesheet returns unitless values untouched, and even the string "3px" is
converted with a default DPI of 72 — so both mean 3pt, which is 4 CSS pixels. Every spatial value
in a pdf.tsx must go through pxToPt. Three more differences the shared engine already
neutralises: react-pdf inherits a computed line height (CSS re-multiplies the unitless factor),
align-items: baseline resolves to bottom alignment, and Yoga shrinks a flexShrink: 0 box when
a sibling's minimum content width does not fit.
Keep the DOM contract
The live preview paginates by walking the direct children of #resume-container, expecting each
<section> to be exactly [heading, itemsContainer]. A template that wraps sections in extra
containers — or introduces a full-height sidebar — will not split across pages correctly. The
shared engine enforces this shape automatically.
New templates are welcome contributions — see the Contributing Guide.