
Data-Dense Design
FreeMaximize information density with expert interfaces.
Free · Opens the source repo
What Data-Dense Design does
Data-Dense Design is a specialized guide aimed at developers and designers who need to create interfaces that prioritize information density and usability for expert users. This skill emphasizes the importance of compact layouts, where every pixel serves a purpose and unnecessary whitespace is minimized. It is particularly relevant for applications that require high utility, such as trading platforms or data analysis tools, where quick access to information is crucial.
The core principles of Data-Dense Design include the use of tight margins and padding, typically ranging from 2px to 4px, and the alignment of tabular data using monospace fonts. This ensures that numbers align perfectly, enhancing readability and reducing cognitive load for users who need to process large amounts of data quickly. The design aesthetic leans towards high contrast color schemes and dark themes, which are easier on the eyes during extended use.
For implementation, the skill provides specific CSS and SwiftUI examples, demonstrating how to create dense layouts using tables, CSS Grid, and Flexbox. The provided code snippets illustrate how to achieve the desired compactness in both web and app environments, ensuring that developers can easily integrate these principles into their projects. By following the guidelines, users can create interfaces that not only look professional but also function efficiently for expert users who value speed and clarity over decorative elements.
This skill is particularly beneficial for developers and designers working on applications that require high information density, such as financial dashboards, data visualization tools, or any interface where reducing clicks and maximizing data presentation is essential. It is not intended for general-purpose design tasks or applications targeting casual users, where a more spacious and visually appealing layout may be more appropriate.
When to use it
Use this skill when developing applications for expert users who require dense data presentation, such as financial or analytical tools.
When not to use it
This skill may not be suitable for applications aimed at casual users or those that prioritize aesthetic design over functional density.
What you can build with it
Financial Dashboard Development
When building a trading platform, use Data-Dense Design to create an interface that allows users to view stock prices and market data at a glance.
Data Analysis Tool Creation
For applications that visualize large datasets, apply the principles of Data-Dense Design to ensure that users can quickly interpret and manipulate data.
Expert User Interface Design
If you're designing tools for data scientists or analysts, leverage this skill to enhance usability through compact and efficient layouts.
How to install Data-Dense Design
View source1. Install with the skills CLI
npx skills add sickn33/agentic-awesome-skills/data-dense-design --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by sickn33Data-Dense Design
"Density is a feature. For expert users, reducing clicks is more important than whitespace."
When to Use
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.
Core Principles
- Compact Layouts: Extremely tight margins and padding (often 2px to 4px).
- Monospace & Tabular Data: Numbers must align vertically perfectly.
- High Utility: Every pixel serves a functional purpose. Minimal purely decorative elements.
Visual DNA
- Colors: Industrial Chic (high contrast) or Minimalist Slate. Avoid bright backgrounds. Dark themes are heavily preferred to reduce eye strain over 8-hour sessions.
- Typography: Small base sizes (
11px-13px). Strict use of monospace fonts (Fira Code,JetBrains Mono) for data. - Borders: Thin
1pxborders (#333or#e0e0e0) are used extensively to separate tiny cells of data.
Web Implementation
- Tables, CSS Grid, and Flexbox with zero gap.
- CSS Example:
body {
background-color: #1e1e1e; /* IDE Dark */
color: #cccccc;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
font-size: 12px; /* Very small */
margin: 0;
}
.dense-toolbar {
display: flex;
background-color: #2d2d2d;
border-bottom: 1px solid #3c3c3c;
padding: 2px 4px;
}
.dense-btn {
background: transparent;
color: #ccc;
border: 1px solid transparent;
padding: 2px 8px;
border-radius: 2px;
cursor: pointer;
}
.dense-btn:hover {
background-color: #3c3c3c;
border-color: #555;
}
/* Dense Data Table */
.data-table {
width: 100%;
border-collapse: collapse;
font-family: 'JetBrains Mono', monospace;
}
.data-table th, .data-table td {
padding: 4px 8px;
border: 1px solid #3c3c3c;
text-align: right; /* Numbers align right */
}
.data-table tr:nth-child(even) { background-color: #252526; }
.data-table tr:hover { background-color: #094771; color: #fff; } /* Selection highlight */
App Implementation
SwiftUI
struct DataDenseView: View {
var body: some View {
ScrollView([.horizontal, .vertical]) {
Grid(horizontalSpacing: 0, verticalSpacing: 0) {
// Header Row
GridRow {
HeaderCell("SYM")
HeaderCell("BID")
HeaderCell("ASK")
HeaderCell("CHG")
}
// Data Rows
DataRow(sym: "AAPL", bid: "173.40", ask: "173.45", chg: "+0.12", isPos: true)
DataRow(sym: "MSFT", bid: "320.10", ask: "320.15", chg: "-0.45", isPos: false)
DataRow(sym: "GOOG", bid: "135.20", ask: "135.30", chg: "+0.02", isPos: true)
}
.border(Color.gray.opacity(0.3), width: 1)
}
.background(Color(white: 0.12)) // Dark IDE background
}
}
struct HeaderCell: View {
let text: String
init(_ text: String) { self.text = text }
var body: some View {
Text(text)
.font(.system(size: 11, weight: .bold, design: .monospaced))
.foregroundColor(.gray)
.padding(4)
.frame(minWidth: 60, alignment: .leading)
.border(Color.gray.opacity(0.3), width: 0.5)
.background(Color(white: 0.18))
}
}
struct DataRow: View {
let sym, bid, ask, chg: String
let isPos: Bool
var body: some View {
GridRow {
Cell(sym, color: .white)
Cell(bid, color: .white, align: .trailing)
Cell(ask, color: .white, align: .trailing)
Cell(chg, color: isPos ? .green : .red, align: .trailing)
}
}
}
struct Cell: View {
let text: String
let color: Color
let align: Alignment
init(_ text: String, color: Color, align: Alignment = .leading) {
self.text = text; self.color = color; self.align = align
}
var body: some View {
Text(text)
.font(.system(size: 12, design: .monospaced))
.foregroundColor(color)
.padding(4)
.frame(minWidth: 60, alignment: align)
.border(Color.gray.opacity(0.3), width: 0.5)
}
}
- Use
Gridwith0spacing. - Font must be
.system(..., design: .monospaced). - Use a
.border()with0.5width on every single cell to recreate the dense spreadsheet look.
Flutter
class DataDenseScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xFF1E1E1E),
body: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Theme(
// Override theme specifically to make the table hyper-dense
data: Theme.of(context).copyWith(
dividerColor: Colors.grey[800],
),
child: DataTable(
headingRowHeight: 28, // Extremely dense
dataRowMinHeight: 24,
dataRowMaxHeight: 24, // Extremely dense
columnSpacing: 16,
border: TableBorder.all(color: Colors.grey[800]!, width: 1),
columns: const [
DataColumn(label: Text('SYM', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono'))),
DataColumn(label: Text('BID', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono')), numeric: true),
DataColumn(label: Text('ASK', style: TextStyle(color: Colors.grey, fontSize: 11, fontFamily: 'RobotoMono')), numeric: true),
],
rows: [
_buildRow('AAPL', '173.40', '173.45'),
_buildRow('MSFT', '320.10', '320.15'),
_buildRow('GOOG', '135.20', '135.30'),
],
),
),
),
),
);
}
DataRow _buildRow(String sym, String bid, String ask) {
const style = TextStyle(color: Colors.white, fontSize: 12, fontFamily: 'RobotoMono');
return DataRow(
cells: [
DataCell(Text(sym, style: style)),
DataCell(Text(bid, style: style)),
DataCell(Text(ask, style: style)),
],
);
}
}
- Flutter's
DataTableis perfect, but you must manually crush theheadingRowHeightanddataRowHeightdown from their Material defaults (which are huge). - Wrap in dual
SingleChildScrollViewto allow panning around large data sets.
React Native
const DataDenseScreen = () => {
return (
<ScrollView style={{ backgroundColor: '#1E1E1E', flex: 1 }}>
<ScrollView horizontal>
<View style={{ borderWidth: 1, borderColor: '#333' }}>
{/* Header */}
<View style={{ flexDirection: 'row', backgroundColor: '#2D2D2D' }}>
<HeaderCell text="SYM" width={60} />
<HeaderCell text="BID" width={80} align="right" />
<HeaderCell text="ASK" width={80} align="right" />
<HeaderCell text="CHG" width={60} align="right" />
</View>
{/* Rows */}
<DataRow sym="AAPL" bid="173.40" ask="173.45" chg="+0.12" isPos={true} />
<DataRow sym="MSFT" bid="320.10" ask="320.15" chg="-0.45" isPos={false} />
</View>
</ScrollView>
</ScrollView>
);
};
const HeaderCell = ({ text, width, align = 'left' }) => (
<View style={{ width, padding: 4, borderWidth: 0.5, borderColor: '#333' }}>
<Text style={{ color: '#999', fontSize: 11, fontFamily: 'monospace', textAlign: align, fontWeight: 'bold' }}>
{text}
</Text>
</View>
);
const DataRow = ({ sym, bid, ask, chg, isPos }) => (
<View style={{ flexDirection: 'row' }}>
<Cell text={sym} width={60} />
<Cell text={bid} width={80} align="right" />
<Cell text={ask} width={80} align="right" />
<Cell text={chg} width={60} align="right" color={isPos ? '#4CAF50' : '#F44336'} />
</View>
);
const Cell = ({ text, width, align = 'left', color = '#CCC' }) => (
<View style={{ width, padding: 4, borderWidth: 0.5, borderColor: '#333' }}>
<Text style={{ color, fontSize: 12, fontFamily: 'monospace', textAlign: align }}>
{text}
</Text>
</View>
);
- React Native doesn't have a native Table component, so you must construct a grid using
flexDirection: 'row'and strictwidthproperties on cells. - Double scroll views (one vertical, one horizontal inside it) are standard for mobile data tables.
Jetpack Compose
@Composable
fun DataDenseScreen() {
val scrollStateHorizontal = rememberScrollState()
val scrollStateVertical = rememberScrollState()
Box(
modifier = Modifier
.fillMaxSize()
.background(Color(0xFF1E1E1E))
.verticalScroll(scrollStateVertical)
.horizontalScroll(scrollStateHorizontal)
.padding(8.dp)
) {
Column(modifier = Modifier.border(1.dp, Color(0xFF333333))) {
// Header
Row(modifier = Modifier.background(Color(0xFF2D2D2D))) {
Cell("SYM", 60.dp, Color.Gray, true)
Cell("BID", 80.dp, Color.Gray, true, TextAlign.End)
Cell("ASK", 80.dp, Color.Gray, true, TextAlign.End)
}
// Rows
DataRow("AAPL", "173.40", "173.45")
DataRow("MSFT", "320.10", "320.15")
}
}
}
@Composable
fun DataRow(sym: String, bid: String, ask: String) {
Row {
Cell(sym, 60.dp, Color.White, false)
Cell(bid, 80.dp, Color.White, false, TextAlign.End)
Cell(ask, 80.dp, Color.White, false, TextAlign.End)
}
}
@Composable
fun Cell(text: String, width: Dp, color: Color, isHeader: Boolean, align: TextAlign = TextAlign.Start) {
Text(
text = text,
color = color,
fontSize = if (isHeader) 11.sp else 12.sp,
fontWeight = if (isHeader) FontWeight.Bold else FontWeight.Normal,
fontFamily = FontFamily.Monospace,
textAlign = align,
modifier = Modifier
.width(width)
.border(0.5.dp, Color(0xFF333333))
.padding(4.dp)
)
}
- Chain
.verticalScroll()and.horizontalScroll()on the rootBox. - Compose allows
.border()directly onTextmodifiers, making spreadsheet grids very clean to implement without wrapping everything inBoxes.
Do's and Don'ts
- DO: Use color coding (red/green) for data deltas, but keep the saturation muted to prevent eye fatigue.
- DON'T: Use large padding or giant H1 headers. Expert users already know what screen they are on.
Limitations
- This is a styling reference and does not replace environment-specific validation, accessibility testing, or expert review.
- Ensure appropriate contrast ratios and responsive behaviors are verified separately.
Frequently asked questions about Data-Dense Design
Similar skills
Penpot UI/UX Design
Create professional UI/UX designs in Penpot with ease.
UX Theming
Streamline your VS Code theming process with best practices.
Wireframe
Create low-fidelity UI wireframes in SVG format.
Waitlist Page
Create a clean, focused pre-launch landing page.
Hallmark
Design skill for creating unique, structured UIs.
UI Styling
Create beautiful, accessible user interfaces effortlessly.
