Use when improving visual quality of existing UI - applies 2025 design principles for hierarchy, spacing systems, color theory, and typography excellence to elevate aesthetic appeal and user...
Elevates visual design quality by applying proven principles of visual hierarchy, spacing, color theory, and typography to create aesthetically superior interfaces.
design-preset-system instead)ui-refactoring-workflow instead)design-system-foundation instead)Principle: Guide the eye through intentional size, weight, color, and spacing contrast.
// ❌ BAD: Everything same size
<Text style={{ fontSize: 16 }}>Heading</Text>
<Text style={{ fontSize: 16 }}>Subheading</Text>
<Text style={{ fontSize: 16 }}>Body</Text>
// ✅ GOOD: Clear size hierarchy
<Text style={{ fontSize: theme.typography.scale['3xl'] }}>Heading</Text> // 48px
<Text style={{ fontSize: theme.typography.scale.xl }}>Subheading</Text> // 24px
<Text style={{ fontSize: theme.typography.scale.base }}>Body</Text> // 16px
// ❌ BAD: All same weight
fontWeight: '400' // Everything normal
// ✅ GOOD: Weight creates hierarchy
<Text style={{ fontWeight: theme.typography.weights.bold }}>Important</Text>
<Text style={{ fontWeight: theme.typography.weights.semibold }}>Secondary</Text>
<Text style={{ fontWeight: theme.typography.weights.normal }}>Body</Text>
// ❌ BAD: All same color
color: '#000'
// ✅ GOOD: Color reinforces hierarchy
<Text style={{ color: theme.colors.ui.text.primary }}>Primary Content</Text>
<Text style={{ color: theme.colors.ui.text.secondary }}>Supporting</Text>
<Text style={{ color: theme.colors.ui.text.tertiary }}>Metadata</Text>
Principle: Consistent, rhythmic spacing creates visual harmony and breathing room.
// Base unit: 8px
// All spacing should be multiples of 8
export const spacing = {
0: 0, // No space
1: 4, // 0.5x - Minimal (between icon and text)
2: 8, // 1x - Tight (list items)
3: 12, // 1.5x - Comfortable (form fields)
4: 16, // 2x - Standard (card padding)
5: 20, // 2.5x - Generous (between sections)
6: 24, // 3x - Spacious (card margins)
8: 32, // 4x - Large (screen padding)
10: 40, // 5x - XL (hero sections)
12: 48, // 6x - XXL (major sections)
}
// ❌ BAD: Equal spacing everywhere
<View style={{ gap: 16 }}>
<Text>Heading</Text>
<Text>Subheading</Text>
<Text>Paragraph 1</Text>
<Text>Paragraph 2</Text>
</View>
// ✅ GOOD: Related items closer, sections further apart
<View>
<View style={{ gap: theme.spacing[1] }}> {/* 4px - Heading group */}
<Text>Heading</Text>
<Text>Subheading</Text>
</View>
<View style={{ gap: theme.spacing[3], marginTop: theme.spacing[6] }}> {/* 24px separation */}
<Text>Paragraph 1</Text>
<Text>Paragraph 2</Text>
</View>
</View>
// ❌ BAD: Cramped, no breathing room
<View style={{
padding: 4,
gap: 2,
}}>
// ✅ GOOD: Generous white space (2025 trend)
<View style={{
padding: theme.spacing[8], // 32px
gap: theme.spacing[6], // 24px
}}>
Principle: Harmonious color creates mood, guides attention, and ensures accessibility.
// 60% - Dominant (usually neutral)
backgroundColor: theme.colors.ui.background.primary
// 30% - Secondary (supporting colors)
color: theme.colors.ui.text.primary
// 10% - Accent (calls to action)
backgroundColor: theme.colors.brand.accent
// ❌ BAD: Poor contrast (1.5:1)
<Text style={{
color: '#AAA',
backgroundColor: '#FFF',
}}>
// ✅ GOOD: Sufficient contrast (7:1 - AAA)
<Text style={{
color: theme.colors.ui.text.primary, // #1A1A1A
backgroundColor: theme.colors.ui.background.primary, // #FFFFFF
}}>
// Use semantic colors for meaning
<View style={{
backgroundColor: theme.colors.feedback.success, // Green for success
}}>
<Text>Payment successful</Text>
</View>
<View style={{
backgroundColor: theme.colors.feedback.error, // Red for errors
}}>
<Text>Payment failed</Text>
</View>
// Trend 1: High saturation gradients
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
// Trend 2: Subtle, low-contrast backgrounds
backgroundColor: 'rgba(99, 102, 241, 0.05)'
// Trend 3: Dark mode with vibrant accents
dark: {
background: '#0A0A0A',
accent: '#00D9FF',
}
Principle: Readable, scannable, accessible typography creates effortless reading.
// ✅ GOOD: Classic pairing
const typography = {
fontFamily: {
heading: 'Playfair Display, serif', // Elegant serif for headings
body: 'Inter, sans-serif', // Readable sans for body
}
}
// ✅ GOOD: Modern pairing
const typography = {
fontFamily: {
heading: 'Space Grotesk, sans-serif', // Geometric sans for headings
body: 'Inter, sans-serif', // Humanist sans for body
}
}
// ❌ BAD: Too wide (100+ characters)
maxWidth: '100%'
// ✅ GOOD: Optimal (45-75 characters)
maxWidth: 650, // ~65 characters at 16px
// ❌ BAD: Too tight
lineHeight: 1.2
// ✅ GOOD: Comfortable reading
lineHeight: {
heading: 1.2, // Tighter for large text
body: 1.5, // Standard for body text
relaxed: 1.75, // Generous for long form
}
// Type scale based on musical intervals (1.250 - Major Third)
const scale = {
xs: 12, // Small labels
sm: 14, // Captions
base: 16, // Body text
lg: 20, // Large body
xl: 24, // Small headings
'2xl': 32, // Medium headings
'3xl': 48, // Large headings
'4xl': 64, // Hero text
}
Use this checklist to evaluate and improve any UI:
// ❌ BEFORE: Poor aesthetics
<View style={{
backgroundColor: '#f0f0f0',
padding: 10,
margin: 5,
borderRadius: 3,
}}>
<Text style={{ fontSize: 14, color: '#333' }}>Title</Text>
<Text style={{ fontSize: 14, color: '#666', marginTop: 5 }}>Description text</Text>
<TouchableOpacity style={{
backgroundColor: '#3498db',
padding: 8,
marginTop: 10,
}}>
<Text style={{ color: '#fff', fontSize: 12 }}>Action</Text>
</TouchableOpacity>
</View>
// ✅ AFTER: Aesthetic excellence
<View style={{
backgroundColor: theme.colors.ui.background.primary,
padding: theme.spacing[6], // 24px - generous padding
margin: theme.spacing[4], // 16px - consistent margin
borderRadius: theme.radius.lg, // 12px - modern rounding
...theme.shadows.md, // Subtle depth
}}>
{/* Visual hierarchy with size and weight */}
<Text style={{
fontSize: theme.typography.scale.xl, // 24px - clear hierarchy
fontWeight: theme.typography.weights.bold, // Bold for heading
color: theme.colors.ui.text.primary,
marginBottom: theme.spacing[2], // 8px - tight coupling
}}>
Title
</Text>
<Text style={{
fontSize: theme.typography.scale.base, // 16px - readable body
fontWeight: theme.typography.weights.normal,
color: theme.colors.ui.text.secondary,
lineHeight: theme.typography.lineHeight.relaxed,
marginBottom: theme.spacing[5], // 20px - section separation
}}>
Description text
</Text>
<Pressable style={{
backgroundColor: theme.colors.brand.primary,
paddingVertical: theme.spacing[3], // 12px vertical
paddingHorizontal: theme.spacing[5], // 20px horizontal
borderRadius: theme.radius.md,
alignItems: 'center',
}}>
<Text style={{
color: theme.colors.ui.text.inverse,
fontSize: theme.typography.scale.base, // 16px - readable CTA
fontWeight: theme.typography.weights.semibold,
}}>
Action
</Text>
</Pressable>
</View>
Teams applying aesthetic excellence report:
❌ Ignoring hierarchy
// Everything same size/weight
fontSize: 16, fontWeight: '400' // All text
❌ Inconsistent spacing
// Random values
margin: 7, padding: 13, gap: 19
❌ Poor color choices
// Low contrast
color: '#AAA', backgroundColor: '#CCC' // 2:1 ratio ❌
❌ Cramped layout
// No breathing room
padding: 4, gap: 2
✅ Follow the principles consistently throughout your app!