brutalism – skill Thiết kế & UI cho agent AI
Hướng dẫn triển khai web và app theo phong cách Brutalism. Kích hoạt khi người dùng muốn giao diện thô, cố ý chưa hoàn thiện và từ chối các quy ước thiết kế thông thường.
Cài skill brutalism 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/brutalism-b1d15.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /brutalism – 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/brutalism-b1d15.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $brutalism – 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/brutalism-b1d15.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /brutalism – 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/brutalism-b1d15.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /brutalism – 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.
Brutalism
> "Raw materials exposed. An intentional rejection of polish, gradients, and soft shadows."
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. Unstyled Components: Default browser styling for buttons, inputs, and links is celebrated.
2. Exposed Structure: Grid lines, tables with visible borders, and stark boundaries are used instead of whitespace to separate content.
3. Anti-Aesthetic: Intentional awkwardness. Elements might slightly overlap in a way that feels broken, or use system default fonts.
Visual DNA
- Colors: High contrast, often clashing. Pure
#0000FFblue for links,#FF0000red for accents, on stark white or#C0C0C0grey backgrounds. Industrial Chic palette fits best. - Typography: Courier New, Times New Roman, Comic Sans, or default sans-serifs. No web fonts.
- Visuals: Dithered images, pixelated graphics, or heavily compressed jpegs.
Web Implementation
- Use standard HTML tags without overriding their default appearance whenever possible.
- CSS Example:
body {
background-color: #ffffff;
color: #000000;
font-family: monospace;
}
/* Expose the structure */
.brutalist-container {
border: 1px solid #000;
padding: 10px;
}
.brutalist-section {
border-bottom: 2px dashed #000;
margin-bottom: 20px;
padding-bottom: 20px;
}
/* Default-looking button but massive */
.brutalist-btn {
background-color: #c0c0c0;
border: 2px outset #ffffff;
border-right-color: #000000;
border-bottom-color: #000000;
color: #000000;
font-family: sans-serif;
font-size: 24px;
padding: 10px 20px;
cursor: pointer;
}
.brutalist-btn:active {
border-style: inset;
}
/* System link blue */
a {
color: #0000FF;
text-decoration: underline;
}App Implementation
SwiftUI
struct BrutalistView: View {
var body: some View {
VStack(alignment: .leading, spacing: 0) {
Text("BRUTALISM")
.font(.custom("Courier New", size: 32))
.foregroundColor(.black)
.padding(10)
.border(Color.black, width: 2)
Divider().background(Color.black).padding(.vertical, 20)
Button(action: {}) {
Text("CLICK_HERE")
.font(.custom("Courier New", size: 24))
.foregroundColor(.blue)
.underline()
}
.padding(10)
// Raw structural container
VStack(alignment: .leading) {
Text("System Status: RAW").font(.custom("Courier New", size: 14))
}
.padding()
.border(Color.black, width: 1)
}
.padding()
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
.background(Color.white)
}
}- Style semantic
ButtonandLinkcontrols to look raw; underlinedTextalone does not provide button or navigation behavior. - Use
.border(Color.black, width: 1)instead of backgrounds or shadows. - Force monospace fonts like Courier New or Menlo.
Flutter
class BrutalistScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// DO NOT use MaterialApp theme or Scaffold if possible,
// or strip them down completely.
return Scaffold(
backgroundColor: Colors.white,
body: SafeArea(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
border: Border.all(color: Colors.black, width: 2),
),
child: const Text(
'BRUTALISM',
style: TextStyle(
fontFamily: 'Courier',
fontSize: 32,
color: Colors.black,
),
),
),
const Padding(
padding: EdgeInsets.symmetric(vertical: 20),
child: Divider(color: Colors.black, thickness: 2),
),
GestureDetector(
onTap: () {},
child: const Text(
'CLICK_HERE',
style: TextStyle(
fontFamily: 'Courier',
fontSize: 24,
color: Colors.blue,
decoration: TextDecoration.underline,
),
),
),
],
),
),
),
);
}
}- Prefer semantic buttons with custom raw styling; a GestureDetector alone requires explicit focus, keyboard and accessibility support.
- Build UI out of raw
Containers withBorder.all(color: Colors.black)andTextwidgets. - Use
TextDecoration.underlineto indicate interactivity.
React Native
const BrutalistScreen = () => {
return (
<View style={{ flex: 1, backgroundColor: '#FFFFFF', padding: 16 }}>
<View style={{
borderWidth: 2,
borderColor: '#000000',
padding: 10,
alignSelf: 'flex-start'
}}>
<Text style={{ fontFamily: 'monospace', fontSize: 32, color: '#000' }}>
BRUTALISM
</Text>
</View>
<View style={{ height: 2, backgroundColor: '#000', marginVertical: 20 }} />
<TouchableOpacity activeOpacity={1}>
<Text style={{
fontFamily: 'monospace',
fontSize: 24,
color: '#0000FF',
textDecorationLine: 'underline'
}}>
CLICK_HERE
</Text>
</TouchableOpacity>
<View style={{
borderWidth: 1,
borderColor: '#000',
padding: 16,
marginTop: 40
}}>
<Text style={{ fontFamily: 'monospace', color: '#000' }}>
System Status: RAW
</Text>
</View>
</View>
);
};- Strip away all native feel. Do not use
react-native-elementsorreact-native-paper. - Set
activeOpacity={1}onTouchableOpacityso there is no smooth fade — it should just click instantly. - Use pure hex colors:
#FFFFFF,#000000,#0000FF.
Jetpack Compose
@Composable
fun BrutalistScreen() {
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
.padding(16.dp)
) {
Box(
modifier = Modifier
.border(2.dp, Color.Black)
.padding(10.dp)
) {
BasicText(
text = "BRUTALISM",
style = TextStyle(
fontFamily = FontFamily.Monospace,
fontSize = 32.sp,
color = Color.Black
)
)
}
Spacer(Modifier.height(20.dp))
Box(modifier = Modifier.fillMaxWidth().height(2.dp).background(Color.Black))
Spacer(Modifier.height(20.dp))
BasicText(
text = "CLICK_HERE",
modifier = Modifier.clickable { },
style = TextStyle(
fontFamily = FontFamily.Monospace,
fontSize = 24.sp,
color = Color.Blue,
textDecoration = TextDecoration.Underline
)
)
}
}- Use
BasicTextinstead ofTextto bypass Material theme defaults. - Build structural lines using
Boxwith.background(Color.Black). - Use semantic controls with raw styling. Retain button roles, keyboard activation, focus and feedback.
Do's and Don'ts
- DO: Use harsh, high-contrast borders (1px solid black) around everything.
- DON'T: Use border-radius, drop shadows, or smooth transitions. If it animates, it should pop instantly (0s transition).
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
- build-ui – Quy trình từng bước cho công việc UI: đọc dự án, làm theo kế hoạch cho từng loại việc…
- building-native-ui – Hướng dẫn đầy đủ để xây dựng ứng dụng đẹp với Expo Router. Bao gồm kiến thức nền tảng…
- grill-me – Phỏng vấn người dùng liên tục về kế hoạch hoặc thiết kế cho đến khi đạt được hiểu biết…
- canvas-design – Đây là hướng dẫn tạo triết lý thiết kế, tức các trường phái thẩm mỹ sau đó được THỂ HIỆN…
- card-based-design – Hướng dẫn triển khai Card-Based Design cho Web và App. Kích hoạt khi người dùng muốn thẻ…
- primer-design – Thiết kế và kiểm tra primer PCR và RT-qPCR bằng Primer3, với điều kiện nhiệt động học rõ…
- cc-skill-frontend-patterns – Mẫu phát triển frontend cho React, Next.js, quản lý state, tối ưu hiệu năng và thực hành…
- ckw-design – Điểm vào thiết kế frontend: hướng đi, hệ thống thiết kế, triết lý thị giác. Dùng bất cứ…