repos
/ orchard main

orchard

mirror

Every site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.

blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics

2.0 KB · 47 lines · markdown Raw History
 1# resume
 2
 3One page, Letter, compiled by the Typst CLI and published at
 4`/static/pdfs/resume-isaac-bythewood.pdf`, linked from the About page.
 5
 6```
 7content.yml   every word of it, as data
 8resume.typ    the layout
 9```
10
11## Building it
12
13```sh
14make resume                          # from this site's directory
15make build SITE=isaacbythewood.com   # runs it as part of the site build
16```
17
18Either writes `frontend/public/pdfs/resume-isaac-bythewood.pdf`, which Vite
19copies into the bundle alongside the favicons. The output is gitignored; the two
20files above are the source. In the image it is a build stage, so no compiler
21ships at runtime.
22
23`make resume` skips with a warning when `typst` is not installed, the same way
24the blog treats its post PDFs. Only that one file is missing when it does.
25
26## Two things to know before editing it
27
28**The font is named `Liberation Sans` on purpose.** The design it was ported
29from asked for `"Helvetica Neue", Helvetica, Arial`, which resolved to
30Liberation Sans on the machine that produced the published PDF. Naming it
31directly is what keeps the metrics identical rather than merely similar. The
32Docker stage installs `ttf-liberation` for the same reason.
33
34**CSS `line-height` and Typst `leading` are not the same quantity**, and this is
35the one thing that will quietly ruin the layout. A CSS line box is the full
36`line-height` with the glyphs centred in it; Typst's is the font's own
37ascender-to-descender extent, and `leading` only adds space *between* lines.
38Mapping one to the other directly comes out cramped on every line and short on
39every margin. `line-box()` in `resume.typ` puts the half-leading back into the
40text edges, which lets `leading` be zero and every margin be the original
41number unchanged.
42
43The measurements are transcribed rather than reinterpreted, with one conversion
44applied throughout: a CSS pixel is 1/96in and a Typst point is 1/72in, so a CSS
45px is 0.75pt. `resume.typ` keeps a `px()` helper so those numbers still read as
46they were written.