New to Claude Skills? Learn how to install them →

sickn33 on GitHub

Brutalist Typography

Free

Create bold, rule-breaking typography for web and app designs.

Get this skill

Free · Opens the source repo

What Brutalist Typography does

Brutalist Typography is a design skill that focuses on creating striking and unconventional text layouts. It emphasizes a raw and aggressive aesthetic, characterized by large, overlapping fonts and stark contrasts. This skill is ideal for designers and developers looking to make a bold statement in their web and app projects. By breaking traditional design rules, it allows for a unique presentation that commands attention.

The core principles of Brutalist Typography include rule-breaking techniques such as overlapping text, ignoring standard margins, and using 'ugly' system fonts like Times New Roman and Courier in exaggerated sizes. This approach not only challenges conventional design norms but also embraces a sense of chaos and unpredictability, making it suitable for projects that aim to stand out.

In practice, implementing Brutalist Typography involves specific CSS and layout techniques. For web applications, it encourages the use of absolute positioning and negative margins to create layouts that bleed off the screen. For mobile applications, it provides SwiftUI and Flutter examples that showcase how to achieve similar effects using overlapping text and aggressive positioning. This skill is particularly useful for projects that require a distinctive visual identity, such as marketing campaigns, artistic websites, or applications targeting a younger audience.

Overall, Brutalist Typography is a powerful tool for those who want to push the boundaries of design and create something truly unique. Whether you're a developer or designer, this skill will provide you with the guidelines and examples needed to implement this bold typography style effectively.

When to use it

Use this skill when you want to create designs that feature large, aggressive typography that breaks conventional layout rules.

When not to use it

This skill is not suitable for projects that require a polished or traditional design aesthetic.

What you can build with it

Creating a Bold Marketing Campaign

Use Brutalist Typography to design eye-catching promotional materials that stand out in a crowded market.

Redesigning an Artistic Portfolio

Apply this skill to showcase an artist's work with unconventional text layouts that reflect their unique style.

Developing a Youth-Oriented App

Implement brutalist typography in a mobile app aimed at younger audiences to create a fresh and engaging user experience.

How to install Brutalist Typography

View source

1. Install with the skills CLI

npx skills add sickn33/agentic-awesome-skills/brutalist-typography --agent claude-code

2. 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 sickn33

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

  1. Rule Breaking: Text that overlaps, ignores margins, or deliberately clips off the edge of the screen.
  2. Anti-Design: Intentional use of system fonts or "ugly" fonts (Times New Roman, Courier) in massive sizes.
  3. 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 spacing in VStack or 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 Stack and Positioned is the easiest way to break the grid and force overlaps.
  • Use height: 0.8 (or less than 1.0) in TextStyle to 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-skia for true stroked text.
  • Use negative marginTop and marginLeft to 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 Box with explicit Modifier.offset(x, y) allows freeform overlapping placement, breaking away from standard Column/Row grids.
  • Compose TextStyle supports drawStyle = 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.

Frequently asked questions about Brutalist Typography

Similar skills