Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Web and App implementation guide for Brutalism. Trigger when user wants a raw appearance, intentionally unfinished look, and rejection of standard design conventions.
.claude/skills/lingxling-brutalism/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | -7% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 53% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 18% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 56% | 0% |
> "Raw materials exposed. An intentional rejection of polish, gradients, and soft shadows."
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.
#0000FF blue for links, #FF0000 red for accents, on stark white or #C0C0C0 grey backgrounds. Industrial Chic palette fits best.cssbody { background-color: #ffffff; color: #000000; font-family: monospace; } /* Expose the structure */ .brutalist-container { border: 1px solid #000; padding: 10px; } .brutalist-section { border-bottom: 2px dashed #000; margin-bottom: 20px; padding-bottom: 20px; } /* Default-looking button but massive */ .brutalist-btn { background-color: #c0c0c0; border: 2px outset #ffffff; border-right-color: #000000; border-bottom-color: #000000; color: #000000; font-family: sans-serif; font-size: 24px; padding: 10px 20px; cursor: pointer; } .brutalist-btn:active { border-style: inset; } /* System link blue */ a { color: #0000FF; text-decoration: underline; }
swiftstruct BrutalistView: View { var body: some View { VStack(alignment: .leading, spacing: 0) { Text("BRUTALISM") .font(.custom("Courier New", size: 32)) .foregroundColor(.black) .padding(10) .border(Color.black, width: 2) Divider().background(Color.black).padding(.vertical, 20) Button(action: {}) { Text("CLICK_HERE") .font(.custom("Courier New", size: 24)) .foregroundColor(.blue) .underline() } .padding(10) // Raw structural container VStack(alignment: .leading) { Text("System Status: RAW").font(.custom("Courier New", size: 14)) } .padding() .border(Color.black, width: 1) } .padding() .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) .background(Color.white) } }
ButtonStyle components. Use Text with .underline() mapped to system blue..border(Color.black, width: 1) instead of backgrounds or shadows.dartclass BrutalistScreen extends StatelessWidget { @override Widget build(BuildContext context) { // DO NOT use MaterialApp theme or Scaffold if possible, // or strip them down completely. return Scaffold( backgroundColor: Colors.white, body: SafeArea( child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( border: Border.all(color: Colors.black, width: 2), ), child: const Text( 'BRUTALISM', style: TextStyle( fontFamily: 'Courier', fontSize: 32, color: Colors.black, ), ), ), const Padding( padding: EdgeInsets.symmetric(vertical: 20), child: Divider(color: Colors.black, thickness: 2), ), GestureDetector( onTap: () {}, child: const Text( 'CLICK_HERE', style: TextStyle( fontFamily: 'Courier', fontSize: 24, color: Colors.blue, decoration: TextDecoration.underline, ), ), ), ], ), ), ), ); } }
ElevatedButton, Card, or AppBar.Containers with Border.all(color: Colors.black) and Text widgets.TextDecoration.underline to indicate interactivity.jsxconst BrutalistScreen = () => { return ( <View style={{ flex: 1, backgroundColor: '#FFFFFF', padding: 16 }}> <View style={{ borderWidth: 2, borderColor: '#000000', padding: 10, alignSelf: 'flex-start' }}> <Text style={{ fontFamily: 'monospace', fontSize: 32, color: '#000' }}> BRUTALISM </Text> </View> <View style={{ height: 2, backgroundColor: '#000', marginVertical: 20 }} /> <TouchableOpacity activeOpacity={1}> <Text style={{ fontFamily: 'monospace', fontSize: 24, color: '#0000FF', textDecorationLine: 'underline' }}> CLICK_HERE </Text> </TouchableOpacity> <View style={{ borderWidth: 1, borderColor: '#000', padding: 16, marginTop: 40 }}> <Text style={{ fontFamily: 'monospace', color: '#000' }}> System Status: RAW </Text> </View> </View> ); };
react-native-elements or react-native-paper.activeOpacity={1} on TouchableOpacity so there is no smooth fade — it should just click instantly.#FFFFFF, #000000, #0000FF.kotlin@Composable fun BrutalistScreen() { Column( modifier = Modifier .fillMaxSize() .background(Color.White) .padding(16.dp) ) { Box( modifier = Modifier .border(2.dp, Color.Black) .padding(10.dp) ) { BasicText( text = "BRUTALISM", style = TextStyle( fontFamily = FontFamily.Monospace, fontSize = 32.sp, color = Color.Black ) ) } Spacer(Modifier.height(20.dp)) Box(modifier = Modifier.fillMaxWidth().height(2.dp).background(Color.Black)) Spacer(Modifier.height(20.dp)) BasicText( text = "CLICK_HERE", modifier = Modifier.clickable { }, style = TextStyle( fontFamily = FontFamily.Monospace, fontSize = 24.sp, color = Color.Blue, textDecoration = TextDecoration.Underline ) ) } }
BasicText instead of Text to bypass Material theme defaults.Box with .background(Color.Black).Button or Card or any Material composables. Raw layouts only.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-02 | fail→pass | 33,952 | 21,269 | -37% | 1 | 1 | 0% | 6,980 | 6,505 | -7% | 0 | 0 | — |
case-11 | fail→fail | 20,503 | 16,031 | -22% | 1 | 1 | 0% | 3,841 | 4,729 | +23% | 0 | 0 | — |
case-01 | fail→fail | 23,607 | 44,790 | +90% | 1 | 1 | 0% | 4,898 | 7,993 | +63% | 0 | 0 | — |
case-03 | pass→pass | 24,324 | 17,704 | -27% | 1 | 1 | 0% | 3,626 | 5,483 | +51% | 0 | 0 | — |
case-04 | fail→fail | 35,884 | 23,347 | -35% | 1 | 1 | 0% | 5,972 | 6,081 | +2% | 0 | 0 | — |
case-05 | pass→pass | 28,313 | 30,204 | +7% | 1 | 1 | 0% | 5,724 | 7,071 | +24% | 0 | 0 | — |
case-06 | fail→pass | 26,500 | 24,892 | -6% | 1 | 1 | 0% | 4,144 | 6,328 | +53% | 0 | 0 | — |
case-07 | fail→fail | 13,212 | 20,909 | +58% | 1 | 1 | 0% | 2,530 | 5,188 | +105% | 0 | 0 | — |
case-08 | fail→pass | 35,951 | 22,416 | -38% | 1 | 1 | 0% | 6,049 | 7,144 | +18% | 0 | 0 | — |
case-09 | fail→pass | 37,690 | 25,723 | -32% | 1 | 1 | 0% | 8,205 | 7,119 | -13% | 0 | 0 | — |
case-10 | fail→pass | 17,473 | 22,397 | +28% | 1 | 1 | 0% | 3,846 | 5,995 | +56% | 0 | 0 | — |
case-12 | fail→pass | 30,873 | 14,772 | -52% | 1 | 1 | 0% | 4,352 | 5,177 | +19% | 0 | 0 | — |
case-13 | fail→pass | 14,752 | 17,799 | +21% | 1 | 1 | 0% | 2,898 | 4,844 | +67% | 0 | 0 | — |
case-14 | fail→pass | 35,069 | 22,596 | -36% | 1 | 1 | 0% | 5,720 | 6,616 | +16% | 0 | 0 | — |
case-15 | fail→fail | 25,178 | 36,238 | +44% | 1 | 1 | 0% | 5,789 | 7,841 | +35% | 0 | 0 | — |
case-16 | fail→pass | 14,255 | 16,199 | +14% | 1 | 1 | 0% | 2,702 | 5,505 | +104% | 0 | 0 | — |
case-17 | fail→fail | 19,885 | 17,843 | -10% | 1 | 1 | 0% | 3,532 | 6,002 | +70% | 0 | 0 | — |
case-18 | fail→pass | 19,281 | 11,401 | -41% | 1 | 1 | 0% | 3,582 | 4,414 | +23% | 0 | 0 | — |
case-19 | fail→pass | 13,197 | 14,389 | +9% | 1 | 1 | 0% | 2,752 | 5,178 | +88% | 0 | 0 | — |
case-20 | pass→pass | 40,305 | 36,439 | -10% | 1 | 1 | 0% | 8,249 | 8,426 | +2% | 0 | 0 | — |
case-21 | pass→pass | 33,110 | 26,517 | -20% | 1 | 1 | 0% | 5,478 | 6,781 | +24% | 0 | 0 | — |
case-22 | pass→fail | 17,659 | 14,613 | -17% | 1 | 1 | 0% | 2,907 | 5,310 | +83% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +45 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.