The engineering blog

Space Grotesk for headings · Source Serif 4 for body · IBM Plex Mono for code — all three set live below.

Display · Space Grotesk 700

Details make the difference

Body · Source Serif 4 400

Good type pairing is quiet craft: a display face with character, a body face that gets out of the way, and a monospace that keeps code honest. Set them together and a page finds its rhythm — headings announce, paragraphs settle, and the details stay precise.

Mono · IBM Plex Mono 400
function pair(display, body, mono) {
  return { display, body, mono }; // three roles, one system
}

Why these three

An engineering blog wants a headline with technical character, a serif that makes long explanations pleasant, and a mono that behaves inside dense code. Space Grotesk's slightly mechanical bold signals that the writer builds things, giving post titles a fitting edge. Source Serif 4 carries the argument with a calm, screen-optimized reading rhythm that holds up across a long post with equations and asides. IBM Plex Mono handles the listings — its modest contrast and humanist warmth pair naturally with a serif body, so switching from prose to code feels like one continuous voice.

Copy the CSS

CSS — all three roles
:root {
  --font-display: 'Space Grotesk', 'Courier New', Helvetica, sans-serif;
  --font-body: 'Source Serif 4', Georgia, 'Times New Roman', serif;
  --font-mono: 'IBM Plex Mono', 'Courier New', Courier, monospace;
}

h1, h2, h3 {
  font-family: var(--font-display);
  font-weight: 700;
}

body {
  font-family: var(--font-body);
  font-weight: 400;
}

code, pre, kbd {
  font-family: var(--font-mono);
  font-weight: 400;
}

Read more

More about each face: Space Grotesk · Source Serif 4 · IBM Plex Mono

Choosing type for this? Fonts for blogs