color-blocking – Design & UI skill for AI agents
Web and App implementation guide for Color Blocking. Trigger when user wants large color sections, striking layout divisions, and Mondrian-style grids.
Install the color-blocking skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/color-blocking-78f15.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /color-blocking – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/color-blocking-78f15.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $color-blocking – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/color-blocking-78f15.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /color-blocking – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/color-blocking-78f15.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /color-blocking – then describe the task you want done.
SKILL.md content
Color Blocking
> "The grid made visible. Large, solid swaths of contrasting color defining the layout."
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. Geometric Division: The viewport is divided into large rectangles or squares, each filled with a solid, distinct color.
2. No Margins Between Blocks: Blocks touch each other directly, often separated only by a stark, 1px or 2px black line (or no line at all, letting the colors clash).
3. Typography as Texture: Text is placed precisely within these blocks to balance the visual weight of the colors.
Visual DNA
- Colors: Highly contrasting, bold pairings. Use 3 to 4 strong colors from palettes like Industrial Chic (Red, Black, Grey, White) or custom bold pairings (Yellow, Navy, Pink).
- Typography: Very clean, bold sans-serifs that can hold their own against massive blocks of color.
- Borders: Often uses thick black borders (
2px solid #000) between blocks to emphasize the grid, reminiscent of Mondrian paintings.
Web Implementation
- CSS Grid is one option; flex layouts and native stacks also support color blocking. Keep content scrollable and collapse columns on narrow screens.
- CSS Example:
body {
margin: 0;
font-family: 'Space Grotesk', sans-serif;
color: #000;
}
.color-block-grid {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: minmax(min-content, 3fr) minmax(min-content, 2fr);
/* Thick black lines between blocks */
gap: 4px;
background-color: #000;
border: 4px solid #000;
min-height: 100vh;
}
.block {
padding: 40px;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.block-yellow { background-color: #FACC15; }
.block-white { background-color: #FFFFFF; }
.block-blue { background-color: #2563EB; color: #FFF; }
.block-red { background-color: #EF4444; }
.block-title {
font-size: 3rem;
font-weight: 900;
text-transform: uppercase;
margin: 0;
}App Implementation
SwiftUI
struct ColorBlockingView: View {
let gridSpacing: CGFloat = 4 // Thickness of the black lines
var body: some View {
// Black background acts as the grid lines between blocks
VStack(spacing: gridSpacing) {
// Top Row
HStack(spacing: gridSpacing) {
ColorBlock(color: .yellow, text: "CREATE", textColor: .black)
ColorBlock(color: .blue, text: "VISION", textColor: .white)
}
.frame(height: 300)
// Bottom Row
HStack(spacing: gridSpacing) {
ColorBlock(color: .red, text: "BOLD", textColor: .white)
.frame(width: 120) // Fixed narrow block
ColorBlock(color: .white, text: "MINIMAL", textColor: .black)
}
}
.background(Color.black) // The grid lines
.border(Color.black, width: gridSpacing) // Outer border
.ignoresSafeArea()
}
}
struct ColorBlock: View {
let color: Color
let text: String
let textColor: Color
var body: some View {
color
.overlay(
Text(text)
.font(.system(size: 32, weight: .black))
.foregroundColor(textColor)
.padding(),
alignment: .bottomLeading
)
}
}- In SwiftUI, the easiest way to create Mondrian-style thick black grid lines is to set
.background(Color.black)on the parent stack and usespacing: 4. The background peeks through the gaps. .ignoresSafeArea()allows the blocks to bleed to the edge of the physical device.
Flutter
class ColorBlockingScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
// Black background creates the grid lines
backgroundColor: Colors.black,
body: SafeArea(
bottom: false,
child: Column(
children: [
// Top Row
Expanded(
flex: 3, // 3/5 of vertical space
child: Row(
children: [
Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFFACC15), text: 'CREATE', textColor: Colors.black)),
const SizedBox(width: 4), // Grid line
Expanded(flex: 2, child: ColorBlock(color: const Color(0xFF2563EB), text: 'VISION', textColor: Colors.white)),
],
),
),
const SizedBox(height: 4), // Horizontal grid line
// Bottom Row
Expanded(
flex: 2, // 2/5 of vertical space
child: Row(
children: [
Expanded(flex: 1, child: ColorBlock(color: const Color(0xFFEF4444), text: 'BOLD', textColor: Colors.white)),
const SizedBox(width: 4),
Expanded(flex: 2, child: ColorBlock(color: Colors.white, text: 'MINIMAL', textColor: Colors.black)),
],
),
),
],
),
),
);
}
}
class ColorBlock extends StatelessWidget {
final Color color;
final String text;
final Color textColor;
const ColorBlock({required this.color, required this.text, required this.textColor});
@override
Widget build(BuildContext context) {
return Container(
color: color,
padding: const EdgeInsets.all(24),
alignment: Alignment.bottomLeft,
child: Text(text, style: TextStyle(fontSize: 32, fontWeight: FontWeight.w900, color: textColor)),
);
}
}- Use
Expandedwith varyingflexfactors to divide the screen geometrically. - Insert
SizedBox(width: 4)orheight: 4between rows and columns to expose the blackScaffoldbackground, creating the grid lines.
React Native
const ColorBlockingScreen = () => {
return (
<View style={{ flex: 1, backgroundColor: '#000', gap: 4 }}>
{/* Top Row */}
<View style={{ flex: 3, flexDirection: 'row', gap: 4 }}>
<View style={[styles.block, { flex: 1, backgroundColor: '#FACC15' }]}>
<Text style={[styles.text, { color: '#000' }]}>CREATE</Text>
</View>
<View style={[styles.block, { flex: 2, backgroundColor: '#2563EB' }]}>
<Text style={[styles.text, { color: '#FFF' }]}>VISION</Text>
</View>
</View>
{/* Bottom Row */}
<View style={{ flex: 2, flexDirection: 'row', gap: 4 }}>
<View style={[styles.block, { flex: 1, backgroundColor: '#EF4444' }]}>
<Text style={[styles.text, { color: '#FFF' }]}>BOLD</Text>
</View>
<View style={[styles.block, { flex: 2, backgroundColor: '#FFF' }]}>
<Text style={[styles.text, { color: '#000' }]}>MINIMAL</Text>
</View>
</View>
</View>
);
};
const styles = StyleSheet.create({
block: {
justifyContent: 'flex-end',
padding: 24,
},
text: {
fontSize: 32,
fontWeight: '900',
fontFamily: 'SpaceGrotesk-Bold',
}
});- The
gapproperty in React Native flexbox makes this trivial. Set a black background on the parent, setgap: 4, and the children automatically space out, revealing the thick black lines. - Use
flex: 1,flex: 2etc. to determine block proportions.
Jetpack Compose
@Composable
fun ColorBlockingScreen() {
val gridSpacing = 4.dp
Column(
modifier = Modifier
.fillMaxSize()
.background(Color.Black) // Grid lines
) {
// Top Row
Row(
modifier = Modifier.weight(3f),
horizontalArrangement = Arrangement.spacedBy(gridSpacing)
) {
ColorBlock(Color(0xFFFACC15), "CREATE", Color.Black, Modifier.weight(1f))
ColorBlock(Color(0xFF2563EB), "VISION", Color.White, Modifier.weight(2f))
}
Spacer(Modifier.height(gridSpacing))
// Bottom Row
Row(
modifier = Modifier.weight(2f),
horizontalArrangement = Arrangement.spacedBy(gridSpacing)
) {
ColorBlock(Color(0xFFEF4444), "BOLD", Color.White, Modifier.weight(1f))
ColorBlock(Color.White, "MINIMAL", Color.Black, Modifier.weight(2f))
}
}
}
@Composable
fun ColorBlock(color: Color, text: String, textColor: Color, modifier: Modifier = Modifier) {
Box(
modifier = modifier
.fillMaxHeight()
.background(color)
.padding(24.dp),
contentAlignment = Alignment.BottomStart
) {
Text(text, fontSize = 32.sp, fontWeight = FontWeight.Black, color = textColor)
}
}- Like other mobile frameworks,
Modifier.background(Color.Black)combined withArrangement.spacedBy(4.dp)perfectly creates the Mondrian grid. - Use
Modifier.weight(Xf)to ma
… (full content is in the download package)
Related skills
- comfyui-gateway – REST API gateway for ComfyUI servers. Workflow management, job queuing, webhooks…
- command-center-ui – Web and App implementation guide for Command Center UI. Trigger when user wants…
- recsys-pipeline-architect – Design composable recommendation, ranking, and feed pipelines using the six-stage…
- responsive-design – Implement modern responsive layouts using container queries, fluid typography, CSS Grid…
- computer-vision-expert – Computer vision pipeline design and evaluation. Specialized in YOLO26, Segment Anything…
- loop-library – Discover, find, compare, audit, repair, adapt, and design repeatable AI-agent loops with…
- core-components – Core component library and design system patterns. Use when building UI, using design…
- crewai – Design role-based agents, tasks, crews, and flows with CrewAI.