Skill

Generate Cyberpunk-Styled UI Components with Neon Aesthetics

Design-style skill for Cyberpunk UI: neon on black, angled clipped-corner geometry, glitch/data effects, dystopian-megacity feel.

Maintainer of this project? Claim this page to edit the listing.


81
Spark score
out of 100
Updated 28 days ago
Version 13.5.0

Add to Favorites

Why it matters

Implement dystopian, high-tech UI designs with sharp angular geometries, neon color palettes, and glitch effects across web and mobile platforms. This skill provides ready-to-use code patterns for creating cyberpunk-themed interfaces with clipped corners, data streams, and aggressive visual styling.

Outcomes

What it gets done

01

Generate CSS with clip-path polygons for angled, metal-plate button geometries

02

Create custom Shape classes for SwiftUI, Flutter, Compose with chamfered corners

03

Build SVG-based clipped components for React Native cyberpunk buttons

04

Apply neon color schemes (acid yellow, cyan, hot pink) with glitch hover effects

Install

Add it to your toolbox

Run in your project directory:

curl -fsSL https://spark.entire.vc/get/ag-cyberpunk-ui | bash

Overview

Cyberpunk UI

A design-style skill for Cyberpunk UI - neon-on-black colors, angled clipped-corner geometry, and glitch/data accents - with matching Web CSS and SwiftUI implementations. Use it for gaming interfaces, hacker/terminal tools, or futuristic concept products that want an aggressive, high-contrast, industrial-neon aesthetic.

What it does

Cyberpunk UI is a design-style child skill ('high tech, low life - neon signs cutting through the smog of a dystopian megacity'), part of the design-it family and not meant to be triggered directly. Three core principles: Neon on Black (the foundation is absolute black or deep charcoal, cut by searingly bright neon accents), Angled Geometries (clipped corners/chamfers instead of rounded corners, so UI elements look like they were cut from metal plates), and Glitch and Data (random hexadecimal data streams, barcode accents, and intentional visual tearing).

When to use - and when NOT to

Use it when the user's request matches this neon-noir, dystopian-tech aesthetic - gaming interfaces, hacker/terminal tools, or futuristic product concepts that want an aggressive, high-contrast, industrial edge. As a design sub-style, it's selected by the parent design-it skill's routing rather than invoked on its own.

Inputs and outputs

Visual DNA uses Acid Yellow (#FCE205), Cyan (#00FFFF), and Hot Pink (#FF003C) against black, industrial squared-off sans-serifs (Rajdhani, Blender Pro, Teko) mixed with small monospace fonts for data readouts, and diagonal stripes, warning-tape patterns, and heavy outer glows as styling accents. The web implementation relies on clip-path for the signature angled-corner cut, a repeating diagonal-stripe background gradient for subtle texture, and a button that swaps its neon accent color on hover while adding a dual offset shadow in two contrasting neon colors to fake a glitch/chromatic-aberration effect.

.cyberpunk-button {
  clip-path: polygon(0 0, calc(100% - 15px) 0, 100% 15px, 100% 100%, 15px 100%, 0 calc(100% - 15px));
}
.cyberpunk-button:hover {
  background-color: #FCE205;
  box-shadow: -4px 0 0 #00FFFF, 4px 0 0 #FF003C;
}

A .data-stream utility class renders faint, small monospace cyan text meant for background hexadecimal noise or scrolling data readouts that reinforce the dystopian-tech atmosphere without competing with primary content.

Integrations

SwiftUI reproduces the exact chamfered corner geometry with a custom Shape that manually traces the clipped-corner path (top-right and bottom-left corners cut at a fixed cutSize, closing the subpath around the remaining right-angle corners) rather than relying on a built-in corner-radius modifier, since SwiftUI has no native chamfer primitive - the same angular silhouette as the web's clip-path polygon, expressed as an explicit Path.

Who it's for

Designers and developers building gaming UIs, hacker/terminal tools, or futuristic concept products that want an aggressive, high-contrast, industrial-neon aesthetic - angular, glowing, and dystopian - rather than a soft or approachable modern interface.

Source README

Cyberpunk UI

"High tech, low life. Neon signs cutting through the smog of a dystopian megacity."

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. Neon on Black: The foundation is absolute black (#000000) or deep charcoal, cut by searingly bright neon accents.
  2. Angled Geometries: Clipped corners (chamfers) rather than rounded corners. UI elements often look like they were cut from metal plates.
  3. Glitch and Data: Random streams of hexadecimal data, barcode accents, and intentional visual tearing.

Visual DNA

  • Colors: Acid Yellow (#FCE205), Cyan (#00FFFF), Hot Pink (#FF003C), against Black.
  • Typography: Industrial, squared-off sans-serifs (like Rajdhani, Blender Pro, or Teko), mixed with small monospace fonts for data.
  • Styling: Diagonal stripes, warning tape patterns, and heavy outer glows.

Web Implementation

  • Rely on clip-path for the angled cuts.
  • CSS Example:
body {
  background-color: #050505;
  color: #00FFFF;
  font-family: 'Rajdhani', sans-serif;
  background-image: repeating-linear-gradient(
    45deg,
    #050505,
    #050505 10px,
    #0a0a0a 10px,
    #0a0a0a 20px
  );
}

.cyberpunk-button {
  background-color: #FF003C; /* Cyberpunk Red/Pink */
  color: #FFF;
  font-size: 1.5rem;
  font-weight: bold;
  text-transform: uppercase;
  border: none;
  padding: 16px 32px;
  
  /* The signature clipped corner */
  clip-path: polygon(
    0 0, 
    calc(100% - 15px) 0, 
    100% 15px, 
    100% 100%, 
    15px 100%, 
    0 calc(100% - 15px)
  );
  
  position: relative;
  transition: all 0.2s ease;
}

/* The glitch/shadow effect */
.cyberpunk-button:hover {
  background-color: #FCE205; /* Acid Yellow */
  color: #000;
  box-shadow: 
    -4px 0 0 #00FFFF,
    4px 0 0 #FF003C;
}

.data-stream {
  font-family: monospace;
  font-size: 0.8rem;
  color: rgba(0, 255, 255, 0.5);
}

App Implementation

SwiftUI

struct CyberpunkShape: Shape {
    let cutSize: CGFloat = 15
    func path(in rect: CGRect) -> Path {
        var path = Path()
        // Top left
        path.move(to: CGPoint(x: 0, y: 0))
        // Top right (cut)
        path.addLine(to: CGPoint(x: rect.maxX - cutSize, y: 0))
        path.addLine(to: CGPoint(x: rect.maxX, y: cutSize))
        // Bottom right
        path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY))
        // Bottom left (cut)
        path.addLine(to: CGPoint(x: cutSize, y: rect.maxY))
        path.addLine(to: CGPoint(x: 0, y: rect.maxY - cutSize))
        path.closeSubpath()
        return path
    }
}

struct CyberButton: View {
    var body: some View {
        Button(action: {}) {
            Text("SYS.OVERRIDE")
                .font(.custom("Rajdhani", size: 24))
                .fontWeight(.bold)
                .foregroundColor(.white)
                .padding(.horizontal, 32)
                .padding(.vertical, 16)
        }
        .background(Color(red: 1.0, green: 0.0, blue: 0.24)) // Cyberpunk Red
        .clipShape(CyberpunkShape())
        .overlay(
            CyberpunkShape()
                .stroke(Color(red: 0.0, green: 1.0, blue: 1.0), lineWidth: 2) // Cyan border
        )
    }
}
  • Define a custom Shape that physically cuts off the corners, bypassing standard cornerRadius.
  • Use .clipShape() for the background, and .overlay() with .stroke() for high-tech borders.

Flutter

class CyberpunkClipper extends CustomClipper<Path> {
  final double cutSize = 15.0;

  @override
  Path getClip(Size size) {
    Path path = Path();
    path.lineTo(size.width - cutSize, 0); // Top right cut start
    path.lineTo(size.width, cutSize);     // Top right cut end
    path.lineTo(size.width, size.height);
    path.lineTo(cutSize, size.height);    // Bottom left cut start
    path.lineTo(0, size.height - cutSize);// Bottom left cut end
    path.close();
    return path;
  }

  @override
  bool shouldReclip(CustomClipper<Path> oldClipper) => false;
}

class CyberButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ClipPath(
      clipper: CyberpunkClipper(),
      child: Container(
        color: const Color(0xFFFF003C), // Cyberpunk Red
        padding: const EdgeInsets.symmetric(horizontal: 32, vertical: 16),
        child: const Text(
          'SYS.OVERRIDE',
          style: TextStyle(
            color: Colors.white,
            fontSize: 24,
            fontWeight: FontWeight.bold,
            fontFamily: 'Rajdhani',
          ),
        ),
      ),
    );
  }
}
  • Extend CustomClipper<Path> to calculate the precise angular cuts.
  • Wrap your containers in ClipPath.
  • For borders, you must use a CustomPaint with a CustomPainter that traces the exact same path.

React Native

import Svg, { Polygon } from 'react-native-svg';

const CyberButton = () => {
  return (
    <View style={{ alignItems: 'center', justifyContent: 'center', width: 200, height: 60 }}>
      {/* Background SVG to achieve the clipped corner look */}
      <View style={{ position: 'absolute', top: 0, bottom: 0, left: 0, right: 0 }}>
        <Svg height="100%" width="100%" viewBox="0 0 200 60" preserveAspectRatio="none">
          <Polygon 
            points="0,0 185,0 200,15 200,60 15,60 0,45"
            fill="#FF003C" 
            stroke="#00FFFF"
            strokeWidth="2"
          />
        </Svg>
      </View>
      
      <Text style={{ 
        color: '#FFF', 
        fontSize: 20, 
        fontWeight: 'bold',
        fontFamily: 'Rajdhani-Bold' 
      }}>
        SYS.OVERRIDE
      </Text>
    </View>
  );
};
  • React Native does not natively support clipping paths on views easily.
  • Solution: Use react-native-svg to draw a <Polygon> that acts as the absolute-positioned background behind transparent text.

Jetpack Compose

class CyberpunkShape(private val cutSize: Dp) : Shape {
    override fun createOutline(
        size: Size,
        layoutDirection: LayoutDirection,
        density: Density
    ): Outline {
        val cutPx = with(density) { cutSize.toPx() }
        val path = Path().apply {
            moveTo(0f, 0f)
            lineTo(size.width - cutPx, 0f)
            lineTo(size.width, cutPx)
            lineTo(size.width, size.height)
            lineTo(cutPx, size.height)
            lineTo(0f, size.height - cutPx)
            close()
        }
        return Outline.Generic(path)
    }
}

@Composable
fun CyberButton() {
    Box(
        modifier = Modifier
            .clip(CyberpunkShape(15.dp))
            .background(Color(0xFFFF003C))
            .border(2.dp, Color(0xFF00FFFF), CyberpunkShape(15.dp))
            .clickable { }
            .padding(horizontal = 32.dp, vertical = 16.dp)
    ) {
        Text(
            text = "SYS.OVERRIDE",
            color = Color.White,
            fontSize = 24.sp,
            fontWeight = FontWeight.Bold,
            // Assuming custom font is loaded
        )
    }
}
  • Create a custom Shape by overriding createOutline and tracing the Path.
  • Pass this shape directly into Modifier.clip() and Modifier.background().
  • You can elegantly apply a border stroke directly to the custom shape using Modifier.border().

Do's and Don'ts

  • DO: Include tiny, meaningless technical details (crosshairs, serial numbers, "SYS.OVERRIDE" text).
  • DON'T: Use soft, organic curves or gradients. It must be sharp and aggressive.

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.