Sant Fonts

A free editorial catalog of every open-source typeface on the Google Fonts library. 1,938 families, hand-curated pairings, custom-text specimen rendered in the actual face. Built in Christchurch, Aotearoa New Zealand. No accounts, no tracking, no bills.

Families
1,938
License
OFL · Apache
Routes
~1,940
Status
Live
Sant Fonts type pad: Lato specimen rendering the editorial phrase 'Reading is invisible'
What We Built

A catalog that shows the voice, not the name.

Every typeface is rendered live in its own face. Type your own phrase, watch it set. Pairings are hand-curated, one editorial composition at a time. Variable axes load when the family supports them. Copy a CSS @import and ship. Static export, deployed as plain HTML to Vercel free tier.

Why We Built It

Google Fonts is a list. You don't see the voice.

The source catalog is comprehensive but quiet. Small previews, generic phrases, no editorial point of view. Picking a typeface from a thumbnail grid is like picking a wine from the label.

We rebuilt the surface. Custom phrases at full display size. Hand-curated pair-of-the-day compositions. Variable axes you can drag. Type, with intent.

The Three Pillars

Catalog, pair, specimen. Three lenses on the same library.

01

The Catalog

1,938 families

Filter by sans, serif, mono, display. Live preview rendered in the actual face. Live custom text. Type a phrase, see it set across every face. No login, no rate limit, no tracking.

02

The Pairings

Hand-curated

Every catalog site can list typefaces. Few tell you what to put one beside. The pairings index is editorial. One composition at a time, lead font as the headline, pair as the body. Shuffle for serendipity, filter by role.

03

The Specimen

Live + variable

One static page per font, generated at build (~1,940 routes). Custom text input, weight slider, variable-axis controls when supported. Copy a CSS @import or grab the CSS class names. That's it, ship.

Sant Fonts type pad in dark mode: same Lato specimen, terracotta accent on bone-on-ink

Light or dark, the palette stays editorial. Bone, ink, terracotta. One accent, used once.

The Pairings

Most catalogs list. This one composes.

Each pairing is its own editorial spread. Display face for the headline, body face for the column. Lead, body, and code blocks are all live, all in the actual typeface. Shuffle for serendipity, or filter by role.

  • Hand-curated, not algorithmic
  • Roles: Display, Body, Code, Accent
  • Headline, paragraph, caption. Three voices on one spread
  • License visibility front and centre (OFL or Apache)
Sant Fonts pairings page: 'Quiet conversations on the page', Bricolage Grotesque + Source Serif
Sant Fonts search spotlight: 1,938 typefaces searchable from one keyboard shortcut
Search

Press /.
Find any typeface.

A keyboard-first search spotlight reads the full catalog with Fuse.js fuzzy match. Names render in their own face inside the dropdown. Even before you click through, you can see what each one looks like.

Indexed in the browser. No server round-trip, no rate limit.

How It Ships

Static at 1,940 routes.

Build pipeline

An ingestion script pulls the full Web Fonts Developer API response, normalises into a FontRecord shape, and writes the manifest to public/fonts.json. Hand-curated overrides (designer attribution, editorial blurbs) live in the same script.

Static export

Next.js App Router with output: 'export'. One static HTML file per typeface. ~1,940 routes deploy to Vercel free tier as plain HTML and CSS. No server, no API routes, no database.

Lazy font loading

The Google Fonts CSS API loads dynamically. One <link> per visible family. The catalog uses Tanstack Virtual to keep the grid windowed, so only what's on screen actually loads its face.

Zero tracking

No analytics on the public assets, no accounts, no cookies. The whole site is HTML, a slim React bundle, and dynamic Google Fonts links. Open the dev tools. There is nothing to look at.

Coming Next

CLI and MCP. Same trick as Sant Icons.

The catalog is shipped, the pairings are live, the specimen works. Next on the bench: a CLI for the terminal and a Model Context Protocol server so coding assistants can pick a typeface without leaving the editor. Same architecture pattern that worked for icons.

@santfonts/cli

npx santfonts search 'editorial serif'. List, preview, and copy CSS imports from the terminal. Manifest bundled in the package, works offline.

@santfonts/mcp

An MCP server giving Claude Code, Cursor, and friends a search and recommend tool over the full catalog. Ask for a pairing, get a CSS import.

What This Proved

Editorial restraint scales.

Voice over volume

Show the typeface in its own voice and it sells itself. Generic Lorem ipsum at thumbnail size doesn't.

Curate where it counts

1,938 fonts is a list. 36 hand-curated pairings is an opinion. The opinion is the value.

Static is the right default

1,940 routes, no backend, no bills. The static export model is the answer for almost any catalog problem.

Try It

1,938 typefaces.
One quiet catalog.

Free, no signup, no tracking. Pick a typeface, set your voice.