I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser

Every time I started a new design system, the same ritual: open a calculator, pick a base size, choose a modular ratio, hand-compute every step, paste into CSS variables – then do it all over again when the designer changed the base from 16px to 17px.


This content originally appeared on DEV Community and was authored by Bilal Malik

Every time I started a new design system, the same ritual: open a calculator, pick a base size, choose a modular ratio, hand-compute every step, paste into CSS variables - then do it all over again when the designer changed the base from 16px to 17px.

There are type scale tools out there, but none of them exported to Tailwind v4 @theme syntax, Style Dictionary JSON, and let me preview my actual Google Font pairing - all in one place. So I built one.

Live demo: typoscale.vercel.app - open source, MIT licensed.

Table of Contents

  • The Problem
  • What It Does
  • Token Output Examples
  • My Favourite Detail — Shareable URLs
  • WCAG Contrast Badges
  • Tech Stack
  • Run It Locally
  • Contributing

The Problem

Typography scales follow a simple formula - multiply a base size by a ratio repeatedly. But in practice:

  • You end up Googling "perfect fourth type scale calculator" every project
  • You copy-paste values and lose them when requirements change
  • You switch font pairings and have no idea how the scale actually looks in those fonts
  • You need tokens in a specific format (Tailwind v4? Style Dictionary?) and no existing tool exports it

TypoScale solves all of that in one place.

What It Does

Modular Scale Generation

Pick from 9 built-in ratios — Minor Second, Major Second, Perfect Fourth, Golden Ratio, and more — or enter any custom ratio. Set your base size, add steps above and below independently.

Google Fonts Pairing

Search and preview 1000+ Google Fonts. Separate pickers for display, body, and monospace. Fonts load on demand — no bloat.

Live Editorial Preview

A real editorial layout showing every scale step rendered in your chosen fonts. Drag to resize and see fluid behaviour. WCAG AA/AAA contrast badge per step.

Four Export Formats

  • CSS Custom Properties
  • Tailwind CSS v3 (theme.extend.fontSize)
  • Tailwind CSS v4 (@theme)
  • Style Dictionary JSON

One-click copy or download per format.

Shareable URLs

Full config encoded in query params. Share your exact scale with teammates - no account needed.

Token Output Examples

Using Perfect Fourth (1.333) ratio with a 16px base:

CSS Custom Properties

:root {
  --font-display: 'Playfair Display', Georgia, serif;
  --font-body: 'Source Sans 3', system-ui, sans-serif;
  --font-size-sm:   0.75rem;   /* 12px  */
  --font-size-base: 1rem;      /* 16px  */
  --font-size-lg:   1.333rem;  /* 21.3px */
  --font-size-xl:   1.777rem;  /* 28.4px */
  --font-size-2xl:  2.369rem;  /* 37.9px */
  --font-size-3xl:  3.157rem;  /* 50.5px */
}

Tailwind v4

@import "tailwindcss";

@theme {
  --font-family-display: 'Playfair Display', Georgia, serif;
  --font-size-base: 1rem;
  --font-size-lg:   1.333rem;
  --font-size-xl:   1.777rem;
  --font-size-2xl:  2.369rem;
}

Tailwind v3

module.exports = {
  theme: {
    extend: {
      fontSize: {
        base: ['1rem',      { lineHeight: '1.5' }],
        lg:   ['1.333rem',  { lineHeight: '1.4' }],
        xl:   ['1.777rem',  { lineHeight: '1.3' }],
        '2xl':['2.369rem',  { lineHeight: '1.2' }],
      },
    },
  },
}

Style Dictionary JSON

{
  "typography": {
    "scale": {
      "base": { "value": "1rem",     "type": "fontSizes" },
      "lg":   { "value": "1.333rem", "type": "fontSizes" },
      "xl":   { "value": "1.777rem", "type": "fontSizes" },
      "2xl":  { "value": "2.369rem", "type": "fontSizes" }
    }
  }
}

My Favourite Detail - Shareable URLs

The entire config — base size, ratio, font selections, step count — is encoded into the URL using Zustand's URL persistence.

Tune a scale → copy the URL → send it to your designer. They open it and see exactly what you built. No account. No database. No backend.

This is the kind of thing that sounds like a small detail but completely changes the collaboration workflow.

WCAG Contrast Badges

Every scale step shows a live AA / AAA pass/fail badge calculated against your chosen background colour. Tiny type that barely clears AA gets flagged inline — no opening a separate contrast checker tab.

Tech Stack

Tool Purpose
React + Vite UI and build tooling
TypeScript (strict) Type safety throughout
Tailwind CSS Utility-first styling
Zustand State management + URL persistence
Lucide React Icon set
Vercel Deployment

The scale math lives in a pure scaleAlgorithms.ts utility — no framework coupling, easy to unit test. Token generation is isolated in tokenGenerators.ts. Both are great targets for contributions.

Run It Locally

git clone https://github.com/byllzz/typoscale.git
cd typoscale
npm install
npm run dev

Open http://localhost:5173.

A Google Fonts API key is optional — without one it falls back to a curated list of 28 popular fonts. To add one:

cp .env.local.example .env.local
# Add your key → VITE_GOOGLE_FONTS_KEY=your_key_here

Contributing

Contributions are welcome! Good first issues:

  • [ ] New scale ratio presets
  • [ ] Unit tests for scaleAlgorithms.ts and tokenGenerators.ts
  • [ ] Fluid type scale preview mode
  • [ ] ARIA labels and keyboard navigation improvements
git checkout -b feat/your-feature
# make changes
npm run type-check
npm run lint
git commit -m "feat: your short description"

If TypoScale saved you from hand-calculating 1.333rem for the hundredth time - a ⭐ on the GitHub repo means a lot. And drop any feedback in the comments below!


This content originally appeared on DEV Community and was authored by Bilal Malik


Print Share Comment Cite Upload Translate Updates
APA

Bilal Malik | Sciencx (2026-06-03T04:01:54+00:00) I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser. Retrieved from https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/

MLA
" » I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser." Bilal Malik | Sciencx - Wednesday June 3, 2026, https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/
HARVARD
Bilal Malik | Sciencx Wednesday June 3, 2026 » I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser., viewed ,<https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/>
VANCOUVER
Bilal Malik | Sciencx - » I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/
CHICAGO
" » I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser." Bilal Malik | Sciencx - Accessed . https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/
IEEE
" » I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser." Bilal Malik | Sciencx [Online]. Available: https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/. [Accessed: ]
rf:citation
» I built a type scale generator that exports CSS, Tailwind v3/v4 & Style Dictionary tokens – all in the browser | Bilal Malik | Sciencx | https://www.scien.cx/2026/06/03/i-built-a-type-scale-generator-that-exports-css-tailwind-v3-v4-style-dictionary-tokens-all-in-the-browser/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.