
Flat Design
FreeImplement a clean, modern aesthetic for web and app interfaces.
Free · Opens the source repo
What Flat Design does
Flat Design is a guide for implementing a specific aesthetic in digital interfaces that emphasizes simplicity and clarity. This style is characterized by its use of bold colors, sharp geometries, and a strict adherence to a 2D plane. By avoiding shadows, gradients, and 3D effects, Flat Design creates a visually striking and easily navigable user experience. This skill is particularly useful for designers and developers looking to adopt a modern, minimalist approach in their projects.
The core principles of Flat Design include zero depth, which means no drop shadows or bevels are used; sharp and simple geometries, where shapes are limited to perfect circles and rectangles; and high contrast solid colors that help to delineate space effectively. This approach not only enhances the visual appeal but also improves usability by making elements more distinct and legible. The skill provides clear guidelines and code examples for web and app implementations across various platforms, ensuring consistency in design.
For web developers, the skill includes practical CSS examples that illustrate how to create Flat Design components, such as cards and buttons, without any depth effects. Similarly, for mobile developers using SwiftUI, Flutter, or React Native, the skill offers code snippets that demonstrate how to maintain the Flat Design aesthetic while ensuring functionality. By following these guidelines, developers can create interfaces that are not only visually appealing but also user-friendly and accessible.
This skill is ideal for anyone involved in UI/UX design or development who wishes to implement Flat Design principles in their projects. Whether you're creating a new web application or updating an existing one, this skill provides the necessary resources to achieve a clean and modern look that aligns with contemporary design trends.
When to use it
Use this skill when you want to implement a flat, minimalist design style in your web or app projects.
When not to use it
This skill is not suitable for projects that require depth or 3D effects, as it strictly adheres to a flat aesthetic.
What you can build with it
Creating a Modern Web App
Use Flat Design principles to develop a visually appealing and user-friendly web application that stands out with its clean aesthetic.
Redesigning an Existing Interface
Apply Flat Design guidelines to update an existing app or website, enhancing usability and modernizing its look.
Building a Marketing Landing Page
Implement Flat Design for a landing page, ensuring that the content is clear and engaging without unnecessary distractions.
How to install Flat Design
View source1. Install with the skills CLI
npx skills add sickn33/agentic-awesome-skills/flat-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 sickn33Flat Design
"Digital surfaces should look digital. Embrace the 2D plane."
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
- Zero Depth: Absolutely no drop shadows, bevels, gradients, or 3D effects. Everything sits on the same z-axis.
- Sharp & Simple Geometries: Perfect circles, sharp rectangles. No complex organic shapes.
- High Contrast Solid Colors: Rely on stark contrast between solid blocks of color to delineate space.
Visual DNA
- Colors: Pairs well with Industrial Chic or Modern Editorial. Avoid gradients entirely.
- Typography: Strong, highly legible sans-serifs (e.g.,
Roboto,Open Sans). Keep it medium to bold. - Icons: Solid, monochromatic, glyph-style icons without intricate details.
Web Implementation
- Rely entirely on background colors and borders for structure.
- CSS Example:
.flat-card {
background-color: var(--secondary-base);
border: 2px solid var(--primary-text);
border-radius: 0; /* Sharp corners preferred */
padding: 32px;
/* NO box-shadow */
}
.flat-btn {
background-color: var(--cta-highlight);
color: #fff;
border: none;
padding: 16px 32px;
font-weight: 700;
text-transform: uppercase;
transition: opacity 0.2s;
}
.flat-btn:hover {
opacity: 0.8; /* Only change opacity or solid color on hover, no lifting */
}
App Implementation
SwiftUI
struct FlatCard: View {
var body: some View {
VStack(alignment: .leading, spacing: 16) {
Text("Card Title")
.font(.system(size: 18, weight: .bold))
Text("Content without any depth effects.")
.font(.system(size: 15))
.foregroundColor(.secondary)
Button(action: {}) {
Text("ACTION")
.font(.system(size: 14, weight: .bold))
.foregroundColor(.white)
.padding(.horizontal, 24)
.padding(.vertical, 12)
.background(Color.blue)
// No cornerRadius — sharp edges
}
}
.padding(24)
.background(Color(.secondarySystemBackground))
// NO .shadow() — ever
// NO .cornerRadius() — sharp rectangles
.overlay(
Rectangle().stroke(Color.primary.opacity(0.2), lineWidth: 1)
)
}
}
- Never use
.shadow()or.cornerRadius(). Elements are flat rectangles. - Use
.overlay(Rectangle().stroke(...))for visible borders instead of shadows to delineate space. - Hover/tap states should only change
opacityor swap a solid background color.
Flutter
class FlatCard extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
padding: const EdgeInsets.all(24),
decoration: BoxDecoration(
color: Colors.grey[100],
border: Border.all(color: Colors.black26, width: 1),
// borderRadius: NONE — sharp corners
// boxShadow: NONE — zero depth
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Text('Card Title',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold)),
const SizedBox(height: 16),
const Text('Content without any depth effects.',
style: TextStyle(fontSize: 15, color: Colors.black54)),
const SizedBox(height: 16),
ElevatedButton(
onPressed: () {},
style: ElevatedButton.styleFrom(
elevation: 0, // Critical: no shadow
backgroundColor: Colors.blue,
foregroundColor: Colors.white,
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.zero, // Sharp corners
),
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 12),
),
child: const Text('ACTION',
style: TextStyle(fontWeight: FontWeight.bold, letterSpacing: 1)),
),
],
),
);
}
}
- Override
ThemeDataglobally to kill all elevation:ThemeData( cardTheme: const CardTheme(elevation: 0, shape: RoundedRectangleBorder()), appBarTheme: const AppBarTheme(elevation: 0), floatingActionButtonTheme: const FloatingActionButtonThemeData(elevation: 0), ) - Use
ContainerwithBoxDecorationinstead ofCardwidget to avoid default elevation.
React Native
const FlatCard = () => (
<View style={{
padding: 24,
backgroundColor: '#F0F0F0',
borderWidth: 1,
borderColor: '#CCCCCC',
// NO borderRadius
// NO elevation or shadow properties
}}>
<Text style={{ fontSize: 18, fontWeight: '700', marginBottom: 16 }}>
Card Title
</Text>
<Text style={{ fontSize: 15, color: '#666', marginBottom: 16 }}>
Content without any depth effects.
</Text>
<TouchableOpacity
style={{
backgroundColor: '#2196F3',
paddingHorizontal: 24,
paddingVertical: 12,
alignSelf: 'flex-start',
// NO borderRadius, NO elevation
}}
activeOpacity={0.7}
>
<Text style={{ color: '#FFF', fontWeight: '700', letterSpacing: 1 }}>
ACTION
</Text>
</TouchableOpacity>
</View>
);
- Explicitly set
elevation: 0and remove ALL shadow properties (shadowColor,shadowOffset, etc.). - If using React Native Paper, override the theme:
const theme = { ...DefaultTheme, roundness: 0, }. - Tap feedback should change
backgroundColordirectly, not add glow or lift.
Jetpack Compose
@Composable
fun FlatCard() {
Column(
modifier = Modifier
.background(Color(0xFFF0F0F0))
.border(1.dp, Color(0xFFCCCCCC))
.padding(24.dp)
) {
Text("Card Title", fontSize = 18.sp, fontWeight = FontWeight.Bold)
Spacer(Modifier.height(16.dp))
Text("Content without any depth effects.",
fontSize = 15.sp, color = Color(0xFF666666))
Spacer(Modifier.height(16.dp))
Button(
onClick = {},
shape = RectangleShape, // Sharp corners
elevation = ButtonDefaults.buttonElevation(
defaultElevation = 0.dp, // No shadow
pressedElevation = 0.dp,
),
colors = ButtonDefaults.buttonColors(containerColor = Color(0xFF2196F3)),
contentPadding = PaddingValues(horizontal = 24.dp, vertical = 12.dp),
) {
Text("ACTION", fontWeight = FontWeight.Bold, letterSpacing = 1.sp)
}
}
}
- Override
MaterialThemeshapes:shapes = Shapes(small = RectangleShape, medium = RectangleShape, large = RectangleShape). - Set all elevation to
0.dponCard,TopAppBar, andFloatingActionButton. - Use
Modifier.border()instead of elevation to separate UI regions.
Do's and Don'ts
- DO: Use solid, contrasting borders to separate overlapping elements.
- DON'T: Use any transparency (rgba) or blur effects.
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 Flat 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.
