Slop Tells
The specific defaults this vault does not want. Read by
.claude/skills/inspiration-library/SKILL.md as hard negative constraints, and
published at design-hub.wanessalabs.com/slop.
Every entry names a concrete tell: something you could point at in a rendered page and agree was or was not there. “Feels generic” is not an entry. “Hero section with a gradient background” is.
Scope matters. vault applies to every surface. lists30 applies only to the
Lists of 30 family, where the constraint comes from the brand rather than from taste.
An agent applying a lists30 tell to TutorHub is making an error in the opposite
direction.
Precedence, always: the target project’s design/brand.md outranks this file. If a
brand file asks for something listed here, the brand file wins and the tell does not
apply. This resolves the same way the Lora font conflict does.
Surface and structure
| # | id | Tell | Why | Scope |
|---|---|---|---|---|
| 1 | hero-gradient | Hero section with a gradient background | Gradients signal “we made it look expensive.” Flat is more honest and ages better. | vault |
| 2 | glassmorphism | Glassmorphism or frosted-glass cards | Paper on a desk, not liquid on glass. Same failure as the gradient, one layer up. | vault |
| 3 | card-drop-shadow | Drop shadows on content cards | Separation comes from borders and whitespace. A shadow reads as elevation, which promises interactivity the card may not have. Checked 2026-07-30: this is already unanimous. Every brand token file that mentions shadow does so only to ban it (Wanessa Labs “borders-only: NO shadow tokens here by design”, CampPing “No shadows, ever”, the Book and App brands “Elevation: BORDERS, NOT SHADOWS”). One caveat: TutorHub declares no custom shadow tokens but inherits shadcn defaults, so its cards do carry a shadow this tell does not currently reach. | vault |
| 4 | icon-heading-cta-card | The four-part card: icon, heading, gray body text, CTA | The single most recognizable generated-UI shape. If every card on a page has this skeleton, the page was not designed. | vault |
| 5 | feature-bullet-grid | Feature bullet grids | Reads as SaaS marketing. A list here has to feel authored, not enumerated. | lists30 |
Color
| # | id | Tell | Why | Scope |
|---|---|---|---|---|
| 6 | pure-black-white | Pure #000000 body text, or pure #FFFFFF as the page background | Both are defaults nobody chose. Warm off-white reads as uncoated paper; near-black with a trace of warmth removes the clinical edge. Picking the extreme is picking nothing. Checked 2026-07-30: CampPing states it outright (--ink: /* warm near-black text, never #000 */). Two legitimate exceptions exist and are not violations: pure white for raised surfaces (--color-surface: #FFFFFF in the Book and App brands, for cards and inputs) and pure white for print (--print-bg in the CampPing litepaper variant, where warm paper would waste toner). | vault |
| 7 | blue-primary-accent | Blue as the primary accent | Blue means institutional, trustworthy, product. These surfaces are personal. | lists30 |
Typography
| # | id | Tell | Why | Scope |
|---|---|---|---|---|
| 8 | three-plus-fonts | More than two font families | Manrope plus Lora is the ceiling. A third breaks the register regardless of how well it is chosen. Checked 2026-07-30: this is a Lists of 30 rule only. Wanessa Labs, Kalimba Easy (Bricolage Grotesque, Archivo, Barlow Condensed) and CampPing (Bricolage Grotesque, Hanken Grotesk, Spline Sans Mono) each declare three deliberately. | lists30 |
| 9 | generic-fintech-headline | A bold sans-serif headline that would work unchanged on a fintech landing page | If the type could belong to anyone, it belongs to no one. | vault |
Imagery and copy
| # | id | Tell | Why | Scope |
|---|---|---|---|---|
| 10 | stock-emotion-photo | Stock photography carrying emotion | Nobody in the photograph has any relationship to the product. | vault |
| 11 | emoji-as-ui | Emoji as UI decoration, outside of content | Breaks the editorial register. Emoji inside authored content is fine; emoji as an icon system is not. | vault |
| 12 | uplift-multiple-copy | Uplift copy that promises a multiple, in the “10x your productivity” shape | Lead with the honest admission, not the outcome. Never promise a number you cannot show. | vault |
| 13 | em-dash | An em dash, anywhere | Non-negotiable vault rule. Periods, colons, commas, or parentheses. The humanize skill states it as “zero, all modes” and defines neutral mode to include docs, READMEs, PRDs, wiki, and lineage, so internal files are covered too, not just published copy. Older vault files predating that gate still use one as a heading separator; they are drift, not precedent. | vault |
Writing about design
| # | id | Tell | Why | Scope |
|---|---|---|---|---|
| 14 | generic-design-adjectives | The adjectives clean, modern, sleek, intuitive, seamless, elegant, minimalist, polished, refined, sophisticated, delightful, stunning, beautiful, premium, visually appealing, user-friendly used as positive description | Every one survives deletion with no loss of meaning. The test: could you have written this sentence without ever seeing the thing? Then it says nothing. Quoting one as a foil (“they could have gone clean and modern, and instead…”) is fine. | vault |
Provenance
Nothing here is invented. Entries 1, 2, 3, 5, 7, 8, 9, 10, 11, and 12 come from the
Anti-Patterns table in .claude/skills/clemens-design-taste/SKILL.md, which scopes them
to the Lists of 30 brand. Widening any of them to vault is a claim about the other six
brands, so it has to be checked rather than assumed.
Checked against the seven brand token files on 2026-07-30:
| Tell | Result |
|---|---|
| 1 gradients | Holds. Zero linear-gradient or radial-gradient in any brand token file. |
| 2 glassmorphism | Holds. Zero backdrop-filter in any brand token file. |
| 3 shadows | Holds, unanimously and explicitly. Caveat recorded in the row. |
| 6 pure black and white | Holds for page background and body text. Two exceptions found and recorded. |
| 8 two font families | Failed. Three of seven brands declare three families on purpose. Rescoped to lists30. |
Entries 4, 9, 10, 11, and 12 are about page composition and copy rather than token
values, so no token file can confirm or refute them. They stand on owner judgment and
are marked vault on that basis, not on evidence. Treat them as weaker than the five
above until a rendered-page check exists.
Other sources. Entry 4 is the anti-reference in
wanessalabs-astro/.impeccable.md. Entry 3 also draws on the elevation comment in wanessalabs-astro/design/tokens.css. Entry 6 is
from the color rationale in clemens-design-taste. Entry 13 is the vault brand rule
in .claude/rules/brand-voice.md, as enforced by the humanize skill’s “zero, all
modes” clause. Entry 14 is the banned-adjective list from taste-skill’s own anti-slop
pass, which applies to this library’s own prose.
Adding an entry
Three tests. It has to pass all three.
- Pointable. Could you point at a rendered page and get agreement that it is or is not present?
- Not universal. Is it wrong here, for a reason you can state, rather than wrong everywhere? A tell that is just bad design belongs in a linter.
- Scoped to what actually enforces it.
vaultorlists30. Check the reach of the rule or gate the tell comes from, then match it. Narrowing a tell because some old files violate it is as wrong as widening one past its source: existing drift is not evidence of scope.