data-dense-design – skill Thiết kế & UI cho agent AI
Hướng dẫn triển khai Web và App cho Data-Dense Design. Kích hoạt khi người dùng muốn công cụ chuyên nghiệp, mật độ thông tin tối đa và giao diện dành cho chuyên gia (như terminal Bloomberg hoặc IDE).
Cài skill data-dense-design bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/data-dense-design-93a3f.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /data-dense-design – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/data-dense-design-93a3f.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $data-dense-design – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/data-dense-design-93a3f.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /data-dense-design – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/data-dense-design-93a3f.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /data-dense-design – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Data-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
1. Compact Layouts: Extremely tight margins and padding (often 2px to 4px).
2. Monospace & Tabular Data: Numbers must align vertically perfectly.
3. 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. Offer theme choice; dark colors do not establish lower eye strain for every user.
- Typography: Use readable, scalable text. Compact examples below are visual studies, not minimum-accessibility recommendations; tabular numerals can align data without forcing monospace throughout.
- 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)),
],
);
}
}- The compact row heights below suit a limited static demo; allow rows to grow for text scaling and preserve adequate interactive target sizes.
- Nested scroll views permit two-axis panning but eagerly lay out this table; paginate or virtualize genuinely 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))
.verticalScro… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- database-design – Nguyên tắc và ra quyết định thiết kế cơ sở dữ liệu. Thiết kế schema, chiến lược index…
- segment-anything-model – SAM: phân đoạn ảnh zero-shot qua điểm, hộp và mặt nạ.
- ddd-strategic-design – Thiết kế các artifact chiến lược DDD gồm subdomain, bounded context và ngôn ngữ chung…
- visual-recon – Chụp ảnh màn hình tất cả host đang hoạt động để phân loại trực quan nhanh và nhận diện…
- observability-designer – Thiết kế chiến lược observability sẵn sàng cho production, kết hợp metrics, logs và…
- design-it – Định tuyến các tác vụ thiết kế frontend đến 48 phong cách UI cụ thể. Kích hoạt khi yêu…
- design-md – Phân tích các dự án Stitch và tổng hợp hệ thống thiết kế ngữ nghĩa thành file DESIGN.md.
- design-philosophy – Triết lý thị giác và định hướng nghệ thuật cho frontend. Dùng khi tạo tác phẩm mang tính…