21st

Compiled from the 21st project history: personal core + project profile (v9).

type text-sm scalevibe classical ordercolor near-white + electric bluemotion 150-200ms easedradius rounded-mddensity high, compactcontrast muted body

v2 · updated 2026-06-11

the spec — files of this taste raw
core.md

Personal core

Transferable invariants confirmed by edit requests in ≥2 projects (21st-private-1, eval-hub-app). Read together with the project taste.md; on conflict the project wins, except antipatterns — those are never overridden.

Taste axis: classical (order, density, restraint) — 14/15 core rules on the classical axis.

Antipatterns (permanent)

  • Hide actions/buttons when the action is impossible in the current context
  • Remove decorative or unnecessary icons
  • Don't show empty, null or placeholder content — hide the element when there is no data (confidence: medium)
  • Remove redundant labels/headers when meaning is obvious from context (confidence: medium)

Craft norms (violation = bug)

  • Match the rest of the app's established style and design system for any component
  • Keep elements properly aligned; crooked/misaligned layout reads as a bug
  • Prevent layout shifts; skeleton loaders must match the final rendered state
  • Match the design mock exactly (confidence: medium)
  • Keep text and element sizing consistent across the interface (confidence: medium)
  • Group and structure content for fast readability instead of a wall of text (confidence: low)

Personal preferences

  • Default to a meaningful view/content rather than an empty or 'all' state (confidence: medium)
  • Use muted text for body content and highlight only meaningful elements like links (confidence: medium)
  • Place confirm buttons and limit values inside the input field on the right (confidence: medium)

Meta-preferences

  • Reuse existing components and patterns instead of creating new ones
  • Animate state changes and transitions with smooth morphing, consistent with the rest of the app

installed verbatim by tastefile sync — agents read exactly this

versions
v22026-06-11
v12026-06-11

the same probe pages every taste renders — differences are the taste