Generate Brutalist Typography Layouts for Web and Mobile
Generate unapologetic, grid-breaking typography code with harsh contrast and system fonts for web, iOS, Android, and React Native apps.
Why it matters
Create aggressive, rule-breaking typographic designs that deliberately ignore conventional layout grids and use harsh contrast with system fonts to demand attention across web and native mobile platforms.
Outcomes
What it gets done
Generate CSS for oversized, overlapping text that bleeds off screen edges
Build SwiftUI views with negative spacing and clipped text ignoring safe areas
Create Flutter Stack layouts with absolute positioning for chaotic type arrangements
Produce React Native and Jetpack Compose code for anti-design typography with stroke effects
Install
Add it to your toolbox
Run in your project directory:
curl -fsSL https://spark.entire.vc/get/ag-brutalist-typography | bash Overview
Brutalist Typography
A sub-style reference providing code examples for brutalist typography across web and mobile platforms When user requests match the brutalist aesthetic within the design-it skill context
What it does
Brutalist Typography is a sub-style reference within the design-it skill that provides code examples for creating aggressive, unpolished typographic layouts. The source material includes CSS, SwiftUI, Flutter, React Native, and Jetpack Compose code samples demonstrating text that overlaps, ignores margins, clips off edges, uses system fonts (Times New Roman, Arial, Courier New) in large sizes, and employs harsh color contrasts.
When to use - and when NOT to
This sub-style is meant to be used when a user's request matches the brutalist aesthetic described in the source: aggressive, unpolished, and unapologetic text that demands attention by breaking rules. The source explicitly states this is "a child reference of the design-it skill and is not meant to be triggered directly."
Do NOT use this for accessibility-focused projects where readability and usability are primary concerns.
Inputs and outputs
The source material provides code examples that demonstrate brutalist typography principles across multiple platforms. These examples show techniques like negative margins, viewport-based font sizing, absolute positioning, overlapping text, and intentional grid violations.
Here's a CSS example from the source:
body {
background-color: #fff;
color: #000;
font-family: 'Times New Roman', serif;
}
.brutalist-headline {
font-size: 15vw;
line-height: 0.7;
letter-spacing: -5px;
margin-left: -10px; /* Bleeds off screen intentionally */
word-wrap: break-word; /* Let words break awkwardly */
}
.brutalist-highlight {
background-color: #ff0000;
color: #fff;
padding: 0 10px;
}
.marquee-container {
border-top: 5px solid #000;
border-bottom: 5px solid #000;
overflow: hidden;
white-space: nowrap;
font-family: 'Courier New', monospace;
font-size: 2rem;
font-weight: bold;
padding: 10px 0;
}
Code examples included
The source material contains code examples for:
- Web/CSS: Examples showing viewport-based font sizing (15vw), negative margins (-10px), system font families (Times New Roman, Arial, Courier New), tight line-height (0.7), and negative letter-spacing (-5px)
- SwiftUI: Examples using custom system fonts at sizes 100-140, .ignoresSafeArea(), negative spacing in VStack (-20), .offset() for positioning, .stroke() overlays for outlined text, and .rotationEffect()
- Flutter: Examples with Stack and Positioned widgets for absolute positioning, Paint with PaintingStyle.stroke for outlined text, Transform.rotate, and explicit avoidance of SafeArea
- React Native: Examples showing negative margins (-15, -30) for edge bleeding and overlap, text styling with lineHeight and transform properties
- Jetpack Compose: Examples using Box with Modifier.offset(), TextStyle with Stroke drawStyle, FontFamily.Serif/SansSerif/Monospace, and .rotate() modifiers
Core principles from source
The source defines three core principles:
- Rule Breaking: Text that overlaps, ignores margins, or deliberately clips off the edge of the screen
- Anti-Design: Intentional use of system fonts or "ugly" fonts (Times New Roman, Courier) in massive sizes
- Harsh Contrast: Clashing colors or stark monochrome
Who it's for
This sub-style reference is for users working within the design-it skill who need code examples for brutalist typography layouts across web and mobile platforms.
Source README
Brutalist Typography
"Aggressive, unpolished, and unapologetic. Text that demands attention by breaking the rules."
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
- Rule Breaking: Text that overlaps, ignores margins, or deliberately clips off the edge of the screen.
- Anti-Design: Intentional use of system fonts or "ugly" fonts (Times New Roman, Courier) in massive sizes.
- Harsh Contrast: Clashing colors or stark monochrome.
Visual DNA
- Colors: Industrial Chic (Black, White, Red) or aggressive neon clashing (e.g., pure blue on pure red).
- Typography: System default fonts (
Times New Roman,Arial,Courier New) blown up to 150px. - Styling: Marquees, blinking text, underlines that cut through descenders.
Web Implementation
- Break the grid. Use absolute positioning or negative margins.
- CSS Example:
body {
background-color: #fff;
color: #000;
font-family: 'Times New Roman', serif;
}
.brutalist-headline {
font-size: 15vw;
line-height: 0.7;
letter-spacing: -5px;
margin-left: -10px; /* Bleeds off screen intentionally */
word-wrap: break-word; /* Let words break awkwardly */
}
.brutalist-highlight {
background-color: #ff0000;
color: #fff;
padding: 0 10px;
}
.marquee-container {
border-top: 5px solid #000;
border-bottom: 5px solid #000;
overflow: hidden;
white-space: nowrap;
font-family: 'Courier New', monospace;
font-size: 2rem;
font-weight: bold;
padding: 10px 0;
}
/* A nod to early 90s web */
.brutalist-link {
color: #0000ee;
text-decoration: underline;
text-transform: uppercase;
}
.brutalist-link:hover {
background-color: #0000ee;
color: #fff;
}
App Implementation
SwiftUI
struct BrutalistTypeView: View {
var body: some View {
ScrollView {
VStack(alignment: .leading, spacing: -20) {
// Bleeds off the edge intentionally
Text("BREAK")
.font(.custom("Times New Roman", size: 120))
.padding(.leading, -20)
Text("THE")
.font(.custom("Arial", size: 140))
.fontWeight(.black)
.foregroundColor(.clear)
.overlay(
Text("THE").stroke(Color.red, lineWidth: 3)
)
.offset(x: 40)
Text("GRID.")
.font(.custom("Courier New", size: 100))
.background(Color.blue)
.foregroundColor(.white)
.rotationEffect(.degrees(-5))
.offset(y: -40)
}
.frame(maxWidth: .infinity, alignment: .leading)
.padding(.top, 50)
}
.ignoresSafeArea() // Critical for Brutalist type
.background(Color.white)
}
}
.ignoresSafeArea()is mandatory. Text must be allowed to clip into the notch and status bar.- Use negative
spacinginVStackor explicit negative.offset()to force text elements to overlap each other aggressively. - Outline text is achieved by setting
.foregroundColor(.clear)and overlaying a.stroke().
Flutter
class BrutalistTypeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Scaffold without SafeArea
return Scaffold(
backgroundColor: Colors.white,
body: Stack(
children: [
Positioned(
top: -20,
left: -20,
child: const Text(
'BREAK',
style: TextStyle(
fontFamily: 'Times New Roman',
fontSize: 150,
height: 0.8, // Negative line-spacing
color: Colors.black,
),
),
),
Positioned(
top: 100,
left: 40,
child: Text(
'THE',
style: TextStyle(
fontFamily: 'Arial',
fontSize: 140,
fontWeight: FontWeight.w900,
foreground: Paint()
..style = PaintingStyle.stroke
..strokeWidth = 3
..color = Colors.red,
),
),
),
Positioned(
top: 220,
left: 10,
child: Transform.rotate(
angle: -0.1,
child: Container(
color: Colors.blue,
child: const Text(
'GRID.',
style: TextStyle(
fontFamily: 'Courier',
fontSize: 120,
color: Colors.white,
),
),
),
),
),
],
),
);
}
}
- Do not use
SafeArea. - Absolute positioning via
StackandPositionedis the easiest way to break the grid and force overlaps. - Use
height: 0.8(or less than 1.0) inTextStyleto smash lines of text together.
React Native
const BrutalistTypeScreen = () => {
return (
<View style={{ flex: 1, backgroundColor: '#FFF' }}>
{/*
Note: React Native text clipping can be tricky on Android.
Ensure parent views don't have overflow: 'hidden'.
*/}
<Text style={{
fontFamily: 'Times New Roman',
fontSize: 130,
lineHeight: 110,
color: '#000',
marginLeft: -15, // Bleed off edge
marginTop: 40
}}>
BREAK
</Text>
<Text style={{
fontFamily: 'Arial',
fontSize: 140,
fontWeight: '900',
color: 'transparent',
textShadowColor: '#FF0000',
textShadowRadius: 1, // Fake stroke effect
marginLeft: 40,
marginTop: -30 // Overlap previous text
}}>
THE
</Text>
<Text style={{
fontFamily: 'monospace',
fontSize: 100,
backgroundColor: '#0000FF',
color: '#FFF',
transform: [{ rotate: '-5deg' }],
marginTop: -20,
alignSelf: 'flex-start'
}}>
GRID.
</Text>
</View>
);
};
- React Native doesn't have a native text-stroke property, so you either simulate it with text shadows or use
@shopify/react-native-skiafor true stroked text. - Use negative
marginTopandmarginLeftto force the layout chaos.
Jetpack Compose
@Composable
fun BrutalistTypeScreen() {
// Use Box for absolute overlapping layouts
Box(
modifier = Modifier
.fillMaxSize()
.background(Color.White)
) {
Text(
text = "BREAK",
fontFamily = FontFamily.Serif, // Times New Roman equivalent
fontSize = 130.sp,
color = Color.Black,
lineHeight = 100.sp,
modifier = Modifier.offset(x = (-15).dp, y = (-20).dp)
)
Text(
text = "THE",
fontFamily = FontFamily.SansSerif,
fontSize = 140.sp,
fontWeight = FontWeight.Black,
style = TextStyle(
drawStyle = Stroke(width = 5f)
),
color = Color.Red,
modifier = Modifier.offset(x = 40.dp, y = 100.dp)
)
Text(
text = "GRID.",
fontFamily = FontFamily.Monospace,
fontSize = 100.sp,
color = Color.White,
modifier = Modifier
.offset(x = 10.dp, y = 220.dp)
.rotate(-5f)
.background(Color.Blue)
)
}
}
- A
Boxwith explicitModifier.offset(x, y)allows freeform overlapping placement, breaking away from standardColumn/Rowgrids. - Compose
TextStylesupportsdrawStyle = Stroke(width = 5f), making outline typography incredibly simple.
Do's and Don'ts
- DO: Mix serif and monospace fonts aggressively.
- DON'T: Add drop shadows, gradients, or rounded corners. The design must look raw and unstyled.
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.
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.