typography slop
Thirteen type patterns that mark a page as rushed or machine-generated, each shown live next to the fix. The rule behind all thirteen: type carries hierarchy, and hierarchy is a decision. A page that lets a default decide (the eyebrow, the huge hero, the uppercase paragraph) tells the reader nobody did. Pattern source: impeccable.style/slop; the reasoning, demos and samples are ours.
label above heading
A tiny uppercase category label sits above a heading that already says it. The rule: a heading names its section; a label above it must add information the heading does not carry, or it is noise. The cost is real even when it is small: the reader parses two texts to receive one idea, and every section of the page grows a redundant preamble, so nothing stands out anymore.
A: the label repeats the heading
features
Everything you need to ship
Builds, previews and deploys from one command, with a URL for every branch.
the reader reads 'features', then reads a heading that says the same thing in eleven more words.
B: the heading stands alone
Everything you need to ship
Builds, previews and deploys from one command, with a URL for every branch.
same content, one text. the section starts where meaning starts.
<h3 class="text-base text-zinc-100">Everything you need to ship</h3><p class="pt-2 text-sm text-zinc-400">Builds, previews and deploys from one command, with a URL for every branch.</p>
tiny interface text
Metadata and captions set below 12px. The rule: 12px is the floor for any text a reader must actually read, because mono and condensed faces fall apart below it and low-vision readers lose it entirely. The slop is a metadata line at 10px "to make it quiet". Quiet comes from color, not from size: the same line at 12px in zinc-500 recedes just as far and stays legible.
A: 10px metadata
deploy complete
build #4812 · ran 2m 14s · deployed by ci
legible on a retina display at arm's length, gone on anything else.
B: 12px, quiet by color
deploy complete
build #4812 · ran 2m 14s · deployed by ci
same recede, same content, readable.
<p class="pt-2 text-xs text-zinc-500">build #4812 · ran 2m 14s · deployed by ci</p>
flat hierarchy
Title, lede and body all set at one size and one color, so the eye has no entry point. The rule: a text block needs at least two visible steps (size or color) between its title and its body, because a reader decides whether to read by scanning the title first. Flat hierarchy costs the scan: every block reads at the same priority, which is the same as having no priority.
A: one size, one color
Rollbacks take one click
Every deploy is immutable. The last ten builds stay warm, so restoring a previous version is a click, not a rebuild. Rollbacks run in under a second because the artifacts never left the edge.
nothing leads; the title and the third sentence carry the same weight.
B: title leads, body recedes
Rollbacks take one click
Every deploy is immutable. The last ten builds stay warm, so restoring a previous version is a click, not a rebuild. Rollbacks run in under a second because the artifacts never left the edge.
two steps: the title is larger and brighter, the body muted. the scan works.
<h3 class="text-base text-zinc-100">Rollbacks take one click</h3><p class="pt-2 text-sm text-zinc-400">Every deploy is immutable...</p>
icon tile above heading
A rounded gradient square with an icon, stacked above a heading, repeated per card. The rule: an icon that decorates its own tile before a heading is filler; it adds a shape the reader must parse but no information the heading lacks. It is the fingerprint of generated card grids: every card gets a tile, so every card looks the same, so none is readable as a choice. The cost is vertical space and sameness.
A: the tile is the card's opening act
Instant previews
Every branch gets a URL the moment it pushes.
a quarter of the card is a decoration; the three cards below it would look identical.
B: the heading opens the card
Instant previews
Every branch gets a URL the moment it pushes.
same content, the icon earns its place only when it sits beside the meaning it marks.
<h3 class="flex items-center gap-2 text-base text-zinc-100">Instant previews<svg class="size-4 text-zinc-500" ...></svg></h3><p class="pt-2 text-sm text-zinc-400">Every branch gets a URL the moment it pushes.</p>
italic serif display
Headlines set in an italic serif "for elegance". The rule: italic display type is harder to read at exactly the sizes display type exists for, and an italic headline plus an upright body is a second family smuggled in through posturing. The cost: the page's loudest text is its least legible, and the pairing reads as a template, not a decision.
A: italic serif headline
The quiet engine behind fast teams
Deploys, previews and rollbacks from one command.
the letters lean; the reader's eye does extra work at the one size built for scanning.
B: upright
The quiet engine behind fast teams
Deploys, previews and rollbacks from one command.
same family, same size, no lean. the words carry the tone.
<p class="font-serif text-2xl leading-snug text-zinc-100">The quiet engine behind fast teams</p>
badge above headline
A small pill ("new", "v2", "beta") stacked above a hero headline. The rule: a status badge is a property of the thing the headline names, so it belongs on the headline's own line, where the reader meets it in context. Stacked above, it becomes an eyebrow (see the first pattern) and costs a line of the hero's height on every screen.
A: the badge previews the headline
Pipelines: build once, deploy anywhere
One config produces every environment.
the hero spends its first line on three letters.
B: the badge rides with the headline
Pipelines: build once, deploy anywherenew
One config produces every environment.
same content, one line taller headline, and the badge reads as the headline's state.
<p class="flex flex-wrap items-center gap-3 text-2xl leading-tight text-zinc-100">Pipelines: build once, deploy anywhere<span class="rounded border border-emerald-500/40 bg-emerald-500/10 px-2 py-0.5 text-xs font-normal text-emerald-300">new</span></p>
oversized hero headline
The hero headline set at 60-80px, wrapping to three lines and pushing every real sentence below the fold. The rule: a headline is sized by how much it must say, not by how much space it can take; at reading widths that means display sizes in the 24-40px range, not the 64px+ of a poster. The cost is measurable: everything the visitor actually needs starts one to two viewports lower.
A: 72px poster type
Ship with speed
Deploys, previews and rollbacks from one command.
five words fill the card; the sentence that says what the product does is nearly off-screen.
B: 30px, one line
Ship with speed
Deploys, previews and rollbacks from one command.
same words, the whole promise visible at once, the body sentence directly under it.
<p class="text-3xl leading-tight text-zinc-100">Ship with speed</p>
crushed tracking
Display text with letter-spacing tightened past about -0.02em, so letters touch. The rule: tight tracking only pays off on very large, very short all-caps runs, and even there it borrows legibility; on anything set at reading sizes it makes neighboring letters collide. The cost is misreading: "onboarding" reads as "onboa rding" at scan speed.
A: tracking tightened to collision
onboarding
the r and d nearly share a stem; the word needs a second look to parse.
B: the face's own spacing
onboarding
the mono face already ships even rhythm; zero adjustment reads cleaner and faster.
<p class="text-3xl text-zinc-100">onboarding</p>
overused font
The whole page set in the same default sans every unconfigured project ships, because choosing a face felt like a decision for later. The rule: the family is part of the page's voice; a deliberate, consistently applied face (even a quiet one) reads as authored, and the default nobody chose reads as template. The cost is not ugliness, it is sameness: the page is indistinguishable from ten thousand others.
A: the default nobody chose
Release notes, week 38
Faster cold starts, a quieter deploy log, and rollbacks from the header menu.
nothing wrong with it; that is the problem. it matches every placeholder page ever shipped.
B: one deliberate family
Release notes, week 38
Faster cold starts, a quieter deploy log, and rollbacks from the header menu.
this site's own stance: one monospace, applied everywhere, so the page sounds like its author.
/* one family, declared once, used everywhere */--font-sans: "MonoLisa Nerd Font", "MonoLisa", ui-monospace, monospace;
all-caps body
Paragraphs (not labels) set in uppercase. The rule: lowercase word shapes are what fast reading uses; uppercase removes the ascenders and descenders that make words recognizable at a glance, so every sentence must be read letter by letter. A short all-caps run works as a label; a sentence of it is a wall. The cost is reading speed, immediately and for every reader.
A: the paragraph shouts
Deployments are immutable and every build stays warm, so a rollback is one click and takes under a second.
try to skim it. you cannot; every word has the same rectangular shape.
B: sentence case
Deployments are immutable and every build stays warm, so a rollback is one click and takes under a second.
same sentence, readable at scan speed. emphasis comes from weight or color if needed.
<p class="text-sm text-zinc-400">Deployments are immutable and every build stays warm, so a rollback is one click.</p>
wide tracking on body
Body text with letter-spacing stretched apart, usually to look "airy" or "editorial". The rule: wide tracking belongs to tiny uppercase labels, where it keeps small caps from merging; applied to sentence-case prose it breaks the word shapes readers use and drags the eye across gaps between letters that carry no meaning. The cost is slower reading and a page that tries too hard.
A: letters pushed apart
Every build stays warm for a week, so a rollback is one click.
the eye stumbles over every gap; the sentence reads at half speed.
B: default spacing
Every build stays warm for a week, so a rollback is one click.
the face's rhythm carries the line; airy comes from line-height and margins, not letterspacing.
<p class="text-sm text-zinc-400">Every build stays warm for a week.</p><!-- wide tracking only on tiny uppercase labels --><p class="text-xs uppercase tracking-widest text-zinc-500">status</p>
tight line height
Multi-line prose set under about 1.4 line-height, so lines of body text nearly touch. The rule: the eye needs air between lines to find the start of the next one; display sizes can survive 1.1-1.2 because their lines are short, but body text at 14px needs 1.5-1.7. The cost is rereading: on a dense paragraph the eye drops to the same line or skips one.
A: lines pressed together
Every deploy is immutable and the last ten builds stay warm. Restoring a previous version is a click, not a rebuild, because the artifacts never left the edge network. Rollbacks run in under a second even at peak traffic.
read the third line: at this leading the eye lands back on the second as often as the fourth.
B: 1.625 leading
Every deploy is immutable and the last ten builds stay warm. Restoring a previous version is a click, not a rebuild, because the artifacts never left the edge network. Rollbacks run in under a second even at peak traffic.
same paragraph; each line has a clear lane and the paragraph reads at full speed.
<p class="text-sm leading-relaxed text-zinc-400">Every deploy is immutable and the last ten builds stay warm...</p>
justified text
Body text justified to both margins on a web page. The rule: justification is a print tool that works when a typesetter can adjust every space and hyphenate every word; a browser stretches whatever gaps it has, so lines develop rivers of white that pull the eye down the page instead of across it. The cost is visible on almost any justified paragraph: ragged word spacing that reads as damage.
A: flush both edges
Every deploy is immutable and the last ten builds stay warm. Restoring a previous version is a click, not a rebuild, because the artifacts never left the edge network closest to the visitor who requested them.
follow the white gaps: some lines pack words, others scatter them. the river runs through line three.
B: flush left, ragged right
Every deploy is immutable and the last ten builds stay warm. Restoring a previous version is a click, not a rebuild, because the artifacts never left the edge network closest to the visitor who requested them.
even word spacing on every line; the ragged edge is the honest cost of even spacing.
<!-- left-aligned is the default; do not reach for text-justify --><p class="text-sm text-zinc-400">Every deploy is immutable...</p>
Pattern source: impeccable.style/slop. Read design for the rest of the design bank.