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

1.4 KB · 27 lines · Typst Raw History
 1// The social card, compiled to a 1200x630 PNG at build time.
 2//
 3// A card is a build artifact exactly like the resume PDF beside it: nothing
 4// about it can change while the process runs, so there is no reason to render
 5// it per request, and the runtime image stays a FROM scratch binary with no
 6// typst in it.
 7//
 8// PNG rather than SVG. The design would have been happier as vector, but
 9// Facebook, X, LinkedIn, Slack, iMessage and Discord all refuse
10// image/svg+xml for og:image, so a vector card is a card nobody ever sees.
11//
12// At 72 ppi one Typst point is one pixel, so this page is literally the
13// 1200x630 that og:image:width and og:image:height promise.
14
15#set page(width: 1200pt, height: 630pt, margin: 0pt, fill: rgb("#20232e"))
16#set text(font: ("Geist", "Liberation Sans"), fill: white)
17
18// The site's own accent, and the same left rule the menu uses.
19#place(dx: 80pt, dy: 80pt, rect(width: 5pt, height: 160pt, fill: rgb("#ff2d2d")))
20
21#place(dx: 110pt, dy: 96pt, text(size: 82pt, weight: "bold", tracking: -2pt)[Isaac Bythewood])
22#place(dx: 110pt, dy: 200pt, text(size: 34pt, fill: rgb("#9aa3b2"))[Senior Solutions Architect])
23
24#place(dx: 80pt, dy: 470pt, line(length: 1040pt, stroke: 1pt + rgb("#3a3f4d")))
25#place(dx: 80pt, dy: 508pt, text(size: 26pt, fill: rgb("#c9cede"))[isaacbythewood.com])
26#place(dx: 80pt, dy: 552pt, text(size: 22pt, fill: rgb("#6f7789"))[Elkin, NC])