minimalism – skill Thiết kế & UI cho agent AI
Hướng dẫn triển khai web và app theo phong cách thiết kế Minimalism. Kích hoạt khi người dùng muốn bố cục đơn giản, nhiều khoảng trắng, ít màu và thứ bậc rõ ràng.
Cài skill minimalism 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/minimalism-9378b.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /minimalism – 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/minimalism-9378b.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $minimalism – 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/minimalism-9378b.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /minimalism – 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/minimalism-9378b.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /minimalism – 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.
Minimalism
> "Less is more. Remove until nothing is left but the essential."
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. Extreme Whitespace: Margins and padding should be double what you initially think is appropriate.
2. Strict Typography: Rely on font weights and sizes to establish hierarchy, not colors or boxes.
3. Absence of Decor: Minimize decorative borders, shadows and textures; preserve necessary focus, control boundaries and state cues.
Visual DNA
- Colors: Best paired with Minimalist Slate or Modern Editorial palettes. Backgrounds must be absolute (pure or off-white/black).
- Typography: Sans-serif, geometric. (e.g.,
Inter,Helvetica Neue,SF Pro). Use extreme contrast in weights (Thin vs Black). - Spacing: Use a generous baseline grid (e.g., multiples of 8px, heavily favoring 48px to 120px padding).
Web Implementation
- Use Flexbox/Grid with large
gapproperties. - CSS Example:
.minimal-container {
max-width: 800px;
margin: 0 auto;
padding: 120px 24px;
background-color: var(--bg-primary);
}
.minimal-title {
font-size: 3rem;
font-weight: 300;
letter-spacing: -0.02em;
margin-bottom: 48px;
}
.minimal-btn {
background: transparent;
border: 1px solid var(--text-primary);
padding: 16px 32px;
text-transform: uppercase;
letter-spacing: 0.1em;
transition: all 0.3s ease;
}App Implementation
SwiftUI
struct MinimalView: View {
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: 48) {
Text("Headline")
.font(.system(size: 34, weight: .light))
.tracking(-0.5)
Text("Body text sits quietly with generous space around it. Let the content breathe.")
.font(.system(size: 17, weight: .regular))
.foregroundColor(.secondary)
.lineSpacing(6)
// Minimal button — just a thin border, no fill
Button(action: {}) {
Text("Continue")
.font(.system(size: 14, weight: .medium))
.tracking(1.5)
.textCase(.uppercase)
.padding(.horizontal, 32)
.padding(.vertical, 16)
.overlay(
RoundedRectangle(cornerRadius: 0)
.stroke(Color.primary, lineWidth: 1)
)
}
}
.padding(.horizontal, 24)
.padding(.vertical, 80)
}
.background(Color(.systemBackground))
}
}- Use
VStack(spacing: 40...64)for generous separation between elements. - Never use
.shadow()orCard-like containers. Let whitespace define grouping. - Use
Divider()sparingly — only when two adjacent sections need separation.
Flutter
class MinimalScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: SingleChildScrollView(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 80),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Headline',
style: TextStyle(
fontSize: 34,
fontWeight: FontWeight.w300,
letterSpacing: -0.5,
color: Colors.black87,
),
),
const SizedBox(height: 48),
Text(
'Body text sits quietly with generous space around it.',
style: TextStyle(
fontSize: 17,
fontWeight: FontWeight.w400,
height: 1.6,
color: Colors.black54,
),
),
const SizedBox(height: 48),
// Minimal button — outlined, no elevation
OutlinedButton(
onPressed: () {},
style: OutlinedButton.styleFrom(
side: const BorderSide(color: Colors.black87, width: 1),
shape: const RoundedRectangleBorder(borderRadius: BorderRadius.zero),
padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
),
child: Text(
'CONTINUE',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w500,
letterSpacing: 1.5,
color: Colors.black87,
),
),
),
],
),
),
);
}
}- Set
elevation: 0on all Material widgets (AppBar,Card,FloatingActionButton). - Use
SizedBox(height: 48)or larger for vertical spacing. Avoid tight layouts. - Override
ThemeDatato remove all default shadows:cardTheme: CardThemeData(elevation: 0).
React Native
const MinimalScreen = () => (
<ScrollView
style={{ flex: 1, backgroundColor: '#FFFFFF' }}
contentContainerStyle={{ paddingHorizontal: 24, paddingVertical: 80 }}
>
<Text style={{
fontSize: 34,
fontWeight: '300',
letterSpacing: -0.5,
color: '#1A1A1A',
marginBottom: 48,
}}>
Headline
</Text>
<Text style={{
fontSize: 17,
fontWeight: '400',
lineHeight: 28,
color: '#666666',
marginBottom: 48,
}}>
Body text sits quietly with generous space around it.
</Text>
<TouchableOpacity
style={{
borderWidth: 1,
borderColor: '#1A1A1A',
paddingHorizontal: 32,
paddingVertical: 16,
alignSelf: 'flex-start',
}}
activeOpacity={0.6}
>
<Text style={{
fontSize: 14,
fontWeight: '500',
letterSpacing: 1.5,
color: '#1A1A1A',
textTransform: 'uppercase',
}}>
Continue
</Text>
</TouchableOpacity>
</ScrollView>
);- Use
paddingVertical: 80for screen-level spacing. Double what feels natural. - Avoid all
elevationandshadowColorproperties. NoborderRadiuson cards. - If using a UI library (e.g., React Native Paper), strip default elevations.
Jetpack Compose
@Composable
fun MinimalScreen() {
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.verticalScroll(rememberScrollState())
.padding(horizontal = 24.dp, vertical = 80.dp)
) {
Text(
text = "Headline",
fontSize = 34.sp,
fontWeight = FontWeight.Light,
letterSpacing = (-0.5).sp,
color = Color(0xFF1A1A1A),
)
Spacer(modifier = Modifier.height(48.dp))
Text(
text = "Body text sits quietly with generous space around it.",
fontSize = 17.sp,
fontWeight = FontWeight.Normal,
lineHeight = 28.sp,
color = Color(0xFF666666),
)
Spacer(modifier = Modifier.height(48.dp))
// Minimal outlined button
OutlinedButton(
onClick = {},
shape = RectangleShape,
border = BorderStroke(1.dp, Color(0xFF1A1A1A)),
colors = ButtonDefaults.outlinedButtonColors(containerColor = Color.Transparent),
contentPadding = PaddingValues(horizontal = 32.dp, vertical = 16.dp),
) {
Text(
text = "CONTINUE",
fontSize = 14.sp,
fontWeight = FontWeight.Medium,
letterSpacing = 1.5.sp,
color = Color(0xFF1A1A1A),
)
}
}
}- Use each component's actual elevation API: for example CardDefaults.cardElevation and FloatingActionButtonDefaults.elevation. TopAppBar uses its own scroll behavior and colors; it has no universal elevation argument.
- Use
Spacer(modifier = Modifier.height(48.dp))consistently for generous vertical gaps. - Override
MaterialThemeshape and shadow defaults to remove all depth cues.
Do's and Don'ts
- DO: Focus intensely on alignment. A 1px misalignment breaks the illusion of minimalism.
- DON'T: Use "card" wrappers for content. Let the whitespace define the grouping.
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.
Skill liên quan
- minimalist-ui – Dùng khi tạo giao diện biên tập gọn gàng với bảng màu đơn sắc ấm, viền rõ nét, chuyển…
- mobile-design – Thiết kế và review giao diện iOS, Android, React Native hoặc Flutter về thao tác cảm…
- monochromatic-ui – Hướng dẫn triển khai Monochromatic UI cho web và ứng dụng. Kích hoạt khi người dùng muốn…
- monopoly – MONOPOLY là kỹ năng của kỹ sư thiết kế hệ thống cấp cao để kiến trúc, đánh giá và mở…
- multi-tenant-llm-hosting – Thiết kế nền tảng hosting LLM đa tenant an toàn, với cách ly tenant, quota, phân bổ chi…
- n8n-error-handling – Thiết kế lỗi n8n dễ thấy, có cấu trúc và có thể phục hồi, dùng error output, retry…
- neo-brutalism – Hướng dẫn triển khai Neo-Brutalism cho Web và App. Kích hoạt khi người dùng muốn viền…
- nerdzao-elite – Quy trình kỹ thuật phần mềm và thiết kế sản phẩm, đóng vai Senior Product Designer. Quy…