From harness-claude
Treats information density as a deliberate design variable — matching compact, comfortable, and spacious modes to user context and task type.
How this skill is triggered — by the user, by Claude, or both
Slash command
/harness-claude:design-content-densityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> Information density as a deliberate design variable — compact, comfortable, and spacious modes, matching density to user context, and the tradeoff between showing more and showing clearly
Information density as a deliberate design variable — compact, comfortable, and spacious modes, matching density to user context, and the tradeoff between showing more and showing clearly
Treat density as a design variable, not a bug. Density is not "how much content you crammed in" — it is a deliberate decision about information-per-viewport. Different contexts demand different densities:
Decision procedure: Ask two questions: (1) How expert is the user? (2) How many items must be compared simultaneously? Expert users comparing many items = high density. Novice users evaluating one thing = low density.
Apply Tufte's data-ink ratio. Edward Tufte's principle: maximize the share of ink (pixels) used to present data; minimize the share used for non-data decoration. This is a precision tool for density optimization:
Practical application: For any component, count the pixels devoted to actual information vs. everything else (borders, shadows, padding, backgrounds, icons). If a data table has 300px rows with 12px of actual text content, the density is wrong — either show more data or reduce the row height.
Define three density modes with specific values. When building a system that serves multiple contexts, define concrete parameters for each mode:
| Parameter | Compact | Comfortable | Spacious |
|---|---|---|---|
| Table row height | 32-36px | 40-48px | 52-64px |
| Card padding | 8-12px | 16-24px | 24-32px |
| List item height | 28-32px | 36-44px | 48-56px |
| Body font size | 13-14px | 14-16px | 16-18px |
| Line-height | 1.3-1.4 | 1.5-1.6 | 1.6-1.8 |
| Section padding | 24-32px | 40-64px | 80-128px |
| Items visible | 15-25 | 8-15 | 3-8 |
| Scroll required | Rarely | Sometimes | Frequently |
Gmail implements all three: Compact (row height 28px, ~25 emails visible), Comfortable (row height 40px, ~15 emails visible), Spacious (row height 52px, ~10 emails visible). The user chooses based on their workflow.
Match density to page purpose. Within a single product, different pages serve different purposes and should have different densities:
Implement progressive density. Show less at first, reveal more on demand. This respects both the scanner (who needs overview) and the reader (who needs detail):
Adjust density for responsive viewports. Smaller screens require density recalibration:
Real products mapped to the density spectrum:
| Product | Density | Row/Item Height | Items per Screen | Data-Ink Ratio |
|---|---|---|---|---|
| Bloomberg Terminal | Extreme | 18-22px | 40-60 | 0.85+ |
| VS Code | High | 22px | 40-55 | 0.75 |
| Gmail (compact) | High | 28px | 20-25 | 0.60 |
| GitHub Issues | Medium+ | 36px | 12-18 | 0.55 |
| Stripe Dashboard | Medium | 48px | 8-12 | 0.50 |
| Gmail (comfortable) | Medium | 40px | 12-15 | 0.50 |
| Notion | Medium- | 44px | 10-14 | 0.45 |
| Gmail (spacious) | Low+ | 52px | 8-10 | 0.40 |
| Vercel Homepage | Low | N/A (sections) | 1-2 ideas | 0.25 |
| Apple Product Page | Minimal | N/A (sections) | 1 idea | 0.15 |
When offering user-selectable density, implement it as a single CSS custom property cascade:
--density-unit as the base multiplier (compact: 4px, comfortable: 8px, spacious: 12px)padding: calc(var(--density-unit) * 2), gap: var(--density-unit), row-height: calc(var(--density-unit) * 5)One density for all contexts. Using marketing-page spacing on a data table (massive padding, spacious rows) wastes the screen — a table that should show 20 rows shows 5, forcing excessive scrolling. Conversely, using data-table density on a landing page creates information overload where the user expects a calm, guided experience. Stripe uses spacious density on its marketing site and compact-to-comfortable density on its dashboard — same brand, different contexts.
Density without hierarchy. Cramming content into a small space without establishing visual priority creates a wall of text. High density does not mean "everything the same size and weight" — it means more information with clear hierarchy. Bloomberg Terminal is extremely dense but uses color coding, bold text, borders, and spatial grouping to maintain scannability. Without these hierarchy tools, density becomes chaos.
User-hostile density. Defaulting to compact density with no option to increase spacing. Not all users are power users — new users, users with visual impairments, and users on touch devices need more space. Gmail defaults to "comfortable" and offers compact/spacious as options. Material Design 3 specifies that compact density should never be the default — it is an opt-in for experienced users.
Ignoring the scroll cost. Spacious density means more scrolling. For data comparison tasks, scrolling is expensive — the user loses context of items above the fold. A data table with 64px rows showing 5 items per screen forces constant scrolling to compare 20 items. For this context, 32px rows showing 15+ items reduces scroll cost by 60% and improves comparison efficiency.
Responsive density mismatch. Keeping desktop density on mobile. A comfortable-density dashboard (48px rows) on a 667px-tall mobile screen shows only 8-9 rows after accounting for navigation and header. Switching to compact (36px rows) shows 12-13 rows — a 40% increase in visible data that materially improves the mobile experience.
Bloomberg Terminal (Expert Density):
Stripe Dashboard (Balanced Density):
Apple Product Pages (Minimal Density):
This is a knowledge skill. When activated, its content is injected into the system prompt to guide density decisions. It does not execute code or modify files. Use alongside design-whitespace for spacing scale definition, design-readability for typography density interaction, and design-responsive-strategy for viewport-specific density adaptation.
npx claudepluginhub intense-visions/harness-engineering --plugin harness-claudeGuides designing interfaces with adjustable information density (compact, comfortable, spacious) for dashboards, data tables, feeds, inboxes, and settings panels. Includes density controls, viewport-based defaults, and accessibility constraints.
Guides UI spacing adjustments including padding, margins, content density, section gaps, vertical rhythm, and element separation using 4px/8px scale, macro/micro whitespace, and hierarchies preferring whitespace over borders.
Guides spacing and whitespace decisions for UI layouts: macro vs. micro whitespace, Gestalt grouping, spacing scales, and density control. Useful when designing padding, margins, or visual hierarchy.