fonts

Reference for selecting distinctive typography. Includes font recommendations by vibe, category, archetype, and pairing guidelines for Next.js projects.

$ Installer

git clone https://github.com/JacbK/persona /tmp/persona && cp -r /tmp/persona/.agent/skills/fonts ~/.claude/skills/persona

// tip: Run this command in your terminal to install the skill


name: fonts description: Reference for selecting distinctive typography. Includes font recommendations by vibe, category, archetype, and pairing guidelines for Next.js projects.

Skill: Fonts

Reference for selecting distinctive typography. Avoid overused fonts (Helvetica, Arial, Roboto, Open Sans, Montserrat, Playfair Display, Poppins, Lato).

All fonts below are free via Google Fonts and work with next/font/google.


By Vibe

VibeFonts
Editorial/LiteraryNewsreader, Lora, EB Garamond, Cormorant, Spectral
Luxury/FashionCormorant Garamond, Bodoni Moda, Libre Bodoni, Fraunces
Modern CleanSpace Grotesk, DM Sans, Plus Jakarta Sans, Manrope
Bold/ImpactBricolage Grotesque, League Spartan, Syne, Outfit
PlayfulRubik, Nunito, Comfortaa, Quicksand
Technical/FutureSpace Mono, JetBrains Mono, Fira Code, IBM Plex Mono
UnderstatedMulish, Chivo, Proza Libre, Work Sans

Serif

FontUse Case
CormorantHigh-contrast elegance, editorial headers, luxury feel
Cormorant GaramondSophisticated authority, refined editorial
LoraElegant body text, blog content, readable at small sizes
EB GaramondClassic book typography, long-form reading
NewsreaderMagazine/editorial layouts, journalistic feel
SpectralBalanced body text with character
FrauncesModern variable serif with personality, 9 weights
Bodoni ModaDidone-style headlines, fashion/luxury
Libre BodoniClean Bodoni alternative, display use
Libre BaskervilleLiterary feel (Mrs Eaves alternative)
Young SerifContemporary headlines with warmth
Instrument SerifModern refined serif, editorial
AlegreyaDistinctive letterforms, sophisticated portfolios
BioRhymeSlab serif for editorial layouts, 7 weights

Sans Serif

FontUse Case
Space GroteskContemporary branding, geometric personality
DM SansHumanist design, Futura alternative, distinctive "G"
Plus Jakarta SansModern UI, distinctive character
ManropeClean geometric sans, 7 weights
OutfitGeometric humanist, modern portfolios
Bricolage GrotesqueBold headlines, expressive with personality
SyneTactile uniqueness, creative portfolios
ChivoVersatile workhorse, 9 weights
Work SansScreen-optimized, friendly professional
MulishHumanist-geometric hybrid, variable font
EpilogueGeometric with warmth
Proza LibreUnderstated sophistication, editorial
League SpartanCondensed geometric, impactful headers
InterUI-focused, excellent legibility (use sparingly - becoming common)

Display

FontUse Case
Bricolage GrotesqueExpressive headlines, bold personality
FrauncesVariable serif with dramatic weight range
Instrument SerifModern editorial headlines
Young SerifWarm contemporary headers
Abril FatfaceBold Didone-style display
Rubik GlitchExperimental/tech aesthetic
SilkscreenRetro pixel/terminal aesthetic
AboretoDistinctive display style
Red RoseExpressive headlines

Monospace

FontUse Case
Space MonoDeveloper portfolios, distinctive style
JetBrains MonoCode display, excellent legibility
Fira CodeProgramming with ligatures
IBM Plex MonoTechnical documentation, professional
InconsolataClassic code aesthetic
Source Code ProClean, versatile monospace

By Archetype

PersonDirection
Writer/EditorNewsreader, Lora, EB Garamond, Spectral
DesignerSpace Grotesk, Bricolage Grotesque, Fraunces
DeveloperSpace Mono, JetBrains Mono, IBM Plex Mono
StrategistCormorant Garamond, Chivo, DM Sans
ArtistSyne, Rubik, Instrument Serif
Luxury/FashionBodoni Moda, Cormorant, Libre Bodoni

Recommended Pairings

StyleDisplay + Body
EditorialInstrument Serif + DM Sans
ModernBricolage Grotesque + Space Grotesk
LiteraryCormorant + Spectral
TechSpace Mono + Inter
LuxuryBodoni Moda + Manrope
CreativeFraunces + Work Sans
MinimalYoung Serif + Plus Jakarta Sans

Usage in Next.js

import { Space_Grotesk, Newsreader } from 'next/font/google';

const heading = Space_Grotesk({
  subsets: ['latin'],
  variable: '--font-heading'
});

const body = Newsreader({
  subsets: ['latin'],
  variable: '--font-body'
});

Pairing Rules

  • Contrast categories: serif display + sans body (or reverse)
  • One dominant, one supporting (never compete for attention)
  • Match x-heights when possible for visual harmony
  • Limit to 3 fonts maximum per site