Modern typography on a clean workspace

Building a Professional Blog with Modern Typography

A deep dive into type scales, spacing systems, and the details that make content feel polished and readable.

Good typography is invisible. When it’s done right, readers don’t notice the font choices, the line heights, or the careful spacing between elements. They just read, effortlessly absorbing the content without friction.

This is what we’re aiming for with this template—a foundation that gets out of the way and lets your writing breathe. The choices here aren’t arbitrary; they’re the result of studying what works across the best editorial sites on the web.

The Foundation: Geist

We’re using Geist, Vercel’s typeface designed specifically for developers and technical content. It strikes a balance between warmth and precision that’s hard to find in other fonts.

The key features that make Geist work well for long-form content:

  • Generous x-height for readability at smaller sizes
  • Clean, open letterforms that don’t fatigue the eye
  • A monospace companion that shares the same DNA
  • Multiple stylistic sets for customization

Type Scale

The body text is set at 18px—slightly larger than the typical 16px default. This isn’t just preference; research consistently shows that larger body text improves reading speed and comprehension, especially on screens.

“The best font size is the one your reader doesn’t notice. If they’re squinting or scrolling too much, you’ve failed.”

The heading scale uses a 1.25 ratio, which creates a subtle but clear hierarchy without the dramatic jumps you see on marketing sites. For a blog, restraint wins.

Code Blocks

Technical blogs need solid code presentation. Here’s what a typical code block looks like:

// Example: A simple utility function
function formatDate(date: Date): string {
  return new Intl.DateTimeFormat('en-US', {
    year: 'numeric',
    month: 'long',
    day: 'numeric'
  }).format(date);
}

// Usage
const published = formatDate(new Date());
console.log(published); // "January 4, 2025"

Inline code like const x = 42 is styled to stand out just enough without breaking the flow of the sentence.

Spacing and Rhythm

The vertical rhythm here is intentional. Paragraphs have generous bottom margins (1.5em), headings have more space above than below to visually group with their content, and code blocks get extra breathing room.

The content width is capped at 42rem (672px), keeping line lengths between 65–75 characters. This is the sweet spot for comfortable reading—long enough to avoid excessive line breaks, short enough that your eye can easily track back to the start of the next line.


What’s Next

This template gives you a solid foundation. From here, you might want to add:

  1. Dark mode support with CSS custom properties
  2. Syntax highlighting for code blocks (Shiki or Prism)
  3. An RSS feed for subscribers
  4. SEO metadata and Open Graph tags

But honestly? You could ship this as-is and focus on what actually matters—the writing.