Tools
Specify a type system, export it, and audit one you inherited.
01System generator
Set the endpoints and the density; everything else derives. Density scales the spacing ladder only. The type scale holds, so one system serves both a dense dashboard and an open reading page.
CSS and JSON give the values. The written spec gives the rules that govern changing them, which is what gets lost when a system is handed over as a token file alone.
System auditor
Paste a set of roles, one per line. The parser reads size, weight, line height and measure from whatever numbers it finds.
Measure calculator
Converts between container width and character count using the real advance width of the loaded font. Works in both directions.
Typeface analyser
Reads x-height, cap height, average advance and digit width spread from the rendered font, then judges whether two faces are far enough apart to read as a deliberate pairing.
Contrast checker
Thresholds move with size and weight, so a ratio that passes for a heading can fail for the caption below it. Checks against the role rather than a single number.
Stress bench
Six cases every role should survive before it ships. The fixed-width case is the control: it is the one that fails.
Order of use
Faster in sequence than in isolation.
- Analyser. Pick the faces and confirm the pairing has enough separation before anything else depends on them. Check digit spread now, not after the tables are built.
- Generator. Set the endpoints from the largest thing on your busiest screen and the smallest thing anyone must read.
- Export the written spec as well as the tokens.
- Measure calculator, to turn role measures into container widths.
- Contrast checker, per role.
- Stress bench, on every role, before any of it reaches a component.
- Auditor, whenever you inherit a system.
Serving both a dense dashboard and an open reading page usually gets solved by building two systems. The alternative is one type scale with a switchable spacing factor. Roles never change, a component written once behaves on both surfaces, and the difference is a single multiplier.