Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Typography pass covering font choice, modular scale, tracking, leading, weight hierarchy, and micro-typography details. Use when fonts feel generic (default Inter with no reason), the scale is ad hoc, hierarchy is flat, or the user says "fix the typography" / "the text doesn't feel right". Invoke when the user asks for typeset on their UI, or mentions 'typeset' alongside design / UI / frontend work.
.claude/skills/educlopez-typeset/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 48% | 0% |
| case-05 | ✓→✗ | ▼ Worse | -37% | 0% |
| case-06 | ✓→✗ | ▼ Worse | -42% | 0% |
| case-09 | ✓→✗ | ▼ Worse | -35% | 0% |
<!-- HARNESS MIRROR — do not edit here. Canonical source: skills/ or commands/. After editing source, copy into cli/assets/<harness>/ and repo-root harness mirrors. -->
Context: this sub-skill is one lens of the broader ui-craft skill. If the ui-craft skill is also installed, read its SKILL.md first for Discovery + Anti-Slop + Craft Test, then apply the specific lens below.
Typeset the UI at $ARGUMENTS. Load the ui-craft skill and read references/typography.md.
Note: typeset is knob-agnostic — typography rules (no ALL CAPS on headings, tracking-tight ≥24px, one body font, etc.) are not tunable.
Apply, in order:
tracking-tight (-0.02em) or tighter for 40px+tracking-wide (+0.06em) + uppercase IS allowed here (the one exception)tabular-nums on every number you align (tables, stats, timestamps, prices)text-wrap: balance on headlines, text-wrap: pretty on body' / "), em dashes (—), en dashes (–), no double hyphens in brand names, between number + unit, and before final short words in headlinesfont-feature-settings or font-variant-* for opt-in features (ligatures, ss01, fractions)′, ″) for units, not quotesIf the UI is technically correct but forgettable, use typography as the weapon. Pick ONE element to carry signature (never two); boldness is typography, not color or decoration:
01, 02), an asymmetric supporting element, a distinctive list marker.Knob gating for amplification (CRAFT_LEVEL):
≤ 4 — skip. Boldness is a craft layer, not a baseline.5-7 — apply the type amplification only. No signature motif unless asked.8+ — type amplification + one signature detail (chosen at /craft first pass per references/craft-intent.md; /polish and /bolder strengthen it — never stack a second).Pre-check: if an accent is already overused or hierarchy is already loud, you don't have a tameness problem — you have a noise problem. Route to /distill (cut) or /colorize (reduce accents) instead.
Output: edit code directly. Print the Review Format table. Call out the single highest-impact change (usually: "font choice" or "tracking-tight on hero").
Next step: /polish — micro-details land best right after the type system is set (rung 1).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 20,823 | 4,890 | -77% | 1 | 1 | 0% | 3,994 | 1,389 | -65% | 0 | 0 | — |
case-02 | fail→fail | 4,465 | 4,879 | +9% | 1 | 1 | 0% | 201 | 1,394 | +594% | 0 | 0 | — |
case-03 | fail→fail | 5,241 | 5,141 | -2% | 1 | 1 | 0% | 324 | 1,402 | +333% | 0 | 0 | — |
case-04 | fail→fail | 4,516 | 8,857 | +96% | 1 | 1 | 0% | 200 | 2,022 | +911% | 0 | 0 | — |
case-05 | pass→fail | 12,777 | 4,856 | -62% | 1 | 1 | 0% | 2,296 | 1,446 | -37% | 0 | 0 | — |
case-06 | pass→fail | 16,529 | 5,978 | -64% | 1 | 1 | 0% | 2,846 | 1,654 | -42% | 0 | 0 | — |
case-07 | pass→pass | 10,563 | 5,039 | -52% | 1 | 1 | 0% | 1,891 | 1,990 | +5% | 0 | 0 | — |
case-08 | pass→pass | 5,231 | 4,735 | -9% | 1 | 1 | 0% | 866 | 1,983 | +129% | 0 | 0 | — |
case-09 | pass→fail | 12,677 | 5,562 | -56% | 1 | 1 | 0% | 2,285 | 1,493 | -35% | 0 | 0 | — |
case-10 | pass→fail | 13,604 | 4,528 | -67% | 1 | 1 | 0% | 2,444 | 1,324 | -46% | 0 | 0 | — |
case-11 | fail→fail | 6,002 | 6,308 | +5% | 1 | 1 | 0% | 1,134 | 1,539 | +36% | 0 | 0 | — |
case-12 | fail→fail | 34,900 | 7,349 | -79% | 1 | 1 | 0% | 7,402 | 1,870 | -75% | 0 | 0 | — |
case-13 | fail→pass | 15,948 | 6,492 | -59% | 1 | 1 | 0% | 2,585 | 2,200 | -15% | 0 | 0 | — |
case-14 | fail→fail | 15,980 | 5,633 | -65% | 1 | 1 | 0% | 2,802 | 1,476 | -47% | 0 | 0 | — |
case-15 | fail→fail | 4,144 | 5,954 | +44% | 1 | 1 | 0% | 225 | 1,523 | +577% | 0 | 0 | — |
case-16 | fail→pass | 12,465 | 11,904 | -5% | 1 | 1 | 0% | 2,237 | 3,309 | +48% | 0 | 0 | — |
case-17 | pass→fail | 13,950 | 5,298 | -62% | 1 | 1 | 0% | 1,782 | 1,434 | -20% | 0 | 0 | — |
case-18 | pass→pass | 11,154 | 9,068 | -19% | 1 | 1 | 0% | 1,620 | 2,650 | +64% | 0 | 0 | — |
case-19 | pass→pass | 14,129 | 15,781 | +12% | 1 | 1 | 0% | 2,401 | 3,866 | +61% | 0 | 0 | — |
case-20 | fail→fail | 37,778 | 4,526 | -88% | 1 | 1 | 0% | 240 | 1,405 | +485% | 0 | 0 | — |
case-21 | fail→fail | 4,760 | 3,767 | -21% | 1 | 1 | 0% | 190 | 1,345 | +608% | 0 | 0 | — |
case-22 | fail→fail | 5,502 | 5,026 | -9% | 1 | 1 | 0% | 283 | 1,446 | +411% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 6 counted toward the lift figure. The other 16 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -14 percentage points is the difference between those two pass rates over the 6 comparable cases. 9 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.