Eyebrow And Pulsing Dot
Whether an agent can build a hero, a section header or a card without the tiny tracked capitals above the headline and the dot that pulses next to them.
1What the eyebrow is01-what-the-eyebrow-is.md
The eyebrow is the small line of text that sits above a headline. Print has had it for a century, where it is called a kicker or an overline, and it does real work there. It carries the section of the magazine, the dateline, the name of the running series, the chapter number. The reader learns from it where in the publication they are.
The version that arrives in generated interfaces has kept the position and dropped the work. It is set in capitals, at eleven or twelve pixels, with the letters pushed apart by a quarter of an em, in a grey two steps down from the body text, and it reads PLATFORM or OVERVIEW or INTRODUCING. Often there is a small coloured dot in front of it, and the dot pulses.
``html <div class="flex items-center gap-2"> <span class="h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"></span> <span class="text-[11px] uppercase tracking-[0.25em] text-zinc-400">Platform</span> </div> <h1 class="text-5xl font-semibold">Ship faster</h1> ``
It arrives unasked for two reasons.
The first is that it is everywhere in the training data. A decade of landing pages built on the same handful of component libraries put the same block above the same headline, so the shape of a hero section now includes it the way the shape of a letter includes a greeting.
The second is that it looks like craft. Wide tracking on small capitals is a real typographic technique, and applying it signals that someone made a decision. The trouble is that the decision was made once, somewhere else, and is now being applied to a line that nobody chose to write.
An agent asked to build a hero, a section header or a slide layout should add no label that was not asked for. If a label was asked for, the next four units are about making it earn the space.
2The label that says nothing02-the-label-that-says-nothing.md
Collect the eyebrows from a hundred generated pages and the same words come back.
PLATFORM OVERVIEW INTRODUCING THE PROBLEM WHY US HOW IT WORKS FEATURES
Each of these does one of two things. It names a category the reader can already see, which is what PLATFORM does above a page that is visibly a product page. Or it repeats the heading underneath in a shorter form, which is what THE PROBLEM does above a heading that states the problem.
There is a test. A label has content when it tells the reader something the heading does not, and the things that qualify are concrete.
Issue 14 March 2026 Chapter 3 Reported by the data team Updated fifteen minutes ago Part two of four
Every one of those is a fact. It has a source, it can go out of date, and someone would notice if it were wrong. That is the difference between a label and a decoration.
Apply the test by asking what would be lost if the line were deleted. If the answer is that the page would look slightly barer, the line is decoration and the page is better without it. If the answer is that the reader would no longer know which issue they are reading, keep it.
The same test catches the label that is true but useless. A page can honestly be part of a platform, and PLATFORM can still be worth nothing above the headline, because no reader arrived wondering about the category and no reader leaves better informed.
When a label survives the test, write it as words. Sentence case, at a size that can be read, with the tracking left to whoever styles the page. Unit 04 is about why the default styling of an eyebrow works against the label even when the label is good.
3The pulsing dot03-the-pulsing-dot.md
A small coloured circle next to text is one of the few pieces of interface vocabulary that almost everyone reads the same way. It means something is connected, running, recording, or live right now. Green is up, amber is degraded, red is down, and a slow pulse means the thing is currently happening rather than merely configured.
``html <span class="h-1.5 w-1.5 rounded-full bg-emerald-400 animate-pulse"></span> <span class="text-[11px] uppercase tracking-[0.25em]">Now in beta</span> ``
That dot is attached to the words "now in beta". Being in beta is not a live state. It was true yesterday, it will be true next month, and nothing is happening at the moment the reader looks at it. The animation is reporting activity that does not exist.
Three separate costs follow.
The first is the direct one. Motion in the corner of the eye is read as an event, so the reader looks, and there is nothing to see. Every visit pays that small tax.
The second is that the vocabulary degrades. Readers who meet enough decorative dots stop treating a pulsing dot as a signal, and the dots that report a dropped connection or a running job lose the meaning they were borrowing against. A team that decorates with status indicators is spending a shared convention that the whole interface relies on.
The third is that it never stops. A status animation is normally bounded, because the job finishes or the connection recovers. A decorative one runs for as long as the page is open, which is also why it keeps a compositor layer awake on a device that would rather be asleep, and why anyone who has turned on reduced motion has explicitly asked not to see it.
The rule is narrow and it is easy to apply. A dot may pulse when it is bound to a state that can change, and a reader who watches it long enough should be able to see it change. If the dot's appearance is not driven by a variable, it is decoration.
Keeping the dot and dropping the animation is not the fix either. A static coloured dot next to a marketing label still claims to be a status. If nothing is being reported, nothing goes there.
4Unreadable by design04-unreadable-by-design.md
Take the standard eyebrow apart and count the decisions.
``html <span class="text-[11px] uppercase tracking-[0.25em] text-zinc-400">Now in beta</span> ``
Eleven pixels, which is below the size at which most people read comfortably and well below the sixteen the body text gets. Capitals, which removes the ascenders and descenders that give a word its outline and forces the reader to assemble it letter by letter. A quarter of an em of extra tracking, which pushes the letters far enough apart that they stop grouping into a word at a glance. And zinc four hundred on a dark ground, which in most palettes lands near or below the contrast floor the accessibility guidelines set for small text.
Four decisions, each of which makes the line harder to read, applied together to the smallest line on the page.
None of them is wrong on its own. Small capitals with generous tracking is a legitimate setting for a label that is meant to be noticed once and then ignored, which is exactly what a running header in a book is doing. The problem is the combination applied by default, and the fact that it is being spent on a line that failed the content test in unit 02 to begin with.
The accessibility consequences are concrete rather than theoretical. Text below the contrast minimum fails an audit outright. Capitals are read letter by letter by some screen readers when the string is short, so a two word label can be spelled out. A reader who has increased their default font size gets no help from a size fixed in pixels. And a label set in capitals cannot be found by anyone searching the page for the words as they were written.
If a label earns its place, give it the treatment a line worth reading gets. Sentence case. A size in the same family as the surrounding text. Contrast that passes. Tracking left alone unless there is a reason, and if there is a reason, a small amount.
``html <p class="text-sm text-zinc-300">Issue 14, March 2026</p> <h1 class="text-5xl font-semibold">Ship faster</h1> ``
That is still a kicker. It sits above the headline, it is quieter than the headline, and it can be read.
5Badges and borrowed chrome05-badges-and-borrowed-chrome.md
The eyebrow and the dot are the two most recognisable cases of one habit, which is adding an element that has the appearance of information without the substance of it. The habit shows up in several other places, and it is worth recognising them as the same mistake.
The badge that reports nothing. A small pill reading NEW on a feature that shipped two years ago, or POPULAR on the middle pricing tier because the middle tier is the one to push. NEW is a claim about time and it goes stale, so it needs a date behind it or it should not be there. POPULAR is a claim about other customers, and if it is not counting anything, it is a lie in the shape of a data point.
The counter with no source. "Trusted by 10,000+ teams" written into the markup as a string. "Join 2,431 developers" where the number was invented because a specific number reads as more credible than a round one. If a number is not being read from somewhere, it is not a number, it is a decoration that has borrowed the authority of one.
The logo wall with no logos, meaning five grey rectangles at low opacity standing in for customers who have not agreed to appear.
The progress element that is not bound to progress, such as a bar filled to seventy per cent because seventy per cent looks healthy.
The skeleton that never resolves, meaning shimmer placeholders left in a static page because they make it feel like an application.
One question catches all of them. Does this element report something true that could change, and would anyone notice if it were wrong?
A badge reading "Added in 4.2" reports something. A counter bound to a real query reports something. A progress bar driven by a job reports something. Each of those earns its place and gets to look like information, because it is.
Everything else is chrome, and chrome typed into a page is a promise the page does not keep.
6What to build instead06-what-to-build-instead.md
The whole course reduces to two rules and one habit.
The first rule is about labels. Add no label that was not asked for. When a label is asked for, or when the content genuinely has a section, an issue number, a date or an author, write it as words in sentence case at a readable size, and leave the tracking, the case and the colour to whoever styles the page.
The second rule is about state. An element may look like a status when it is bound to one. A dot that pulses, a badge that says NEW, a counter, a progress bar, all of these are claims, and a claim needs something behind it that can change and that someone would notice being wrong. If nothing is being reported, the element does not go in.
The habit is what to do with the brief. The reference site, the screenshot, the existing page or the competitor hero that came with the request is almost always full of this decoration, and matching it feels like respecting the house style. Read that source as a description of what exists rather than as an instruction about what to build. It tells you the subject, the tone and the content. It does not tell you to reproduce the ornament, and the person who sent it has usually stopped seeing it.
Say what you dropped. One line is enough.
Left out the tracked caps label above the headline and the pulsing dot, since neither carried content. Happy to add a kicker if you want one, it would want real text such as the release number.
That sentence costs nothing, and it turns a silent omission into a decision the person can reverse. It also does the one thing this course cannot do from inside a checker, which is let someone who actually wants the ornament say so.
When they do say so, build it. An explicit request for a tracked caps eyebrow with a pulsing dot is a request, and the answer is yes. What this trains is the reflex to add it when nobody asked.
The agent studies this material, updates its own rules, and then sits the examination.