Skill

Generate Synthwave (Outrun) UI Designs and Code

Synthwave/Outrun sub-style for design-it: neon text glow, a perspective horizon grid, and platform-specific shadow-stacking workarounds.

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


81
Spark score
out of 100
Updated 26 days ago
Version 13.6.1

Add to Favorites

Why it matters

Create retro-futuristic synthwave and outrun aesthetic designs with neon colors, grid patterns, and 1980s-inspired visual elements for web interfaces, applications, and digital products.

Outcomes

What it gets done

01

Apply synthwave color palettes with neon pinks, purples, and cyan gradients

02

Generate grid-based backgrounds and geometric patterns characteristic of outrun style

03

Create retro-futuristic UI components with glowing effects and chrome accents

04

Implement 80s-inspired typography and visual hierarchy for digital interfaces

Install

Add it to your toolbox

Run in your project directory:

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

Overview

Synthwave (Outrun)

A design-it sub-style for the Synthwave/Outrun aesthetic - neon text glow, a CSS 3D perspective horizon grid, and platform-specific shadow-stacking workarounds. Use for a retro-futuristic neon interface with a glowing horizon grid; skip it if the design needs conventional subtle drop shadows.

What it does

Synthwave (Outrun) is a design-it sub-style built on three principles: dark mode by default (pitch-black or deep-purple backgrounds), neon glowing vectors (magenta, cyan, and yellow wireframes and text rendered with heavy box-shadow/text-shadow glow), and a perspective grid that recedes toward a vanishing point on the horizon - the defining visual of the aesthetic. It is a child reference of design-it, matched when a request calls for this specific look rather than triggered on its own.

When to use - and when NOT to

Use this sub-style for retro-futuristic "outrun" interfaces - neon signage typography, a glowing 3D floor grid, and a near-black background with only cyan (#00FFFF), hot pink (#FF00FF), and electric yellow (#FFFF00) as accents. Its own rule is absolute: shadows must never be plain, subtle, or black - every shadow in this style is a neon glow the same color as the element it's attached to, so a design that needs conventional soft-gray drop shadows is the wrong fit.

Inputs and outputs

On web, neon text uses stacked text-shadow layers of increasing blur and radius (0 0 5px #fff, 0 0 20px #FF00FF, 0 0 80px #FF00FF) to simulate light bloom, and the horizon grid is a repeating CSS linear-gradient background transformed with perspective(500px) rotateX(60deg) and faded out via mask-image. Native mobile frameworks diverge sharply here: SwiftUI can stack multiple .shadow(color:radius:) modifiers directly for the glow effect, but the skill notes that SwiftUI has no easy way to draw an infinite 3D floor grid natively - a pre-rendered image asset is recommended instead of building it with SceneKit. React Native and Jetpack Compose share a harder constraint: neither textShadow nor Compose's TextStyle supports more than one shadow per text element, so both require the same workaround - rendering the identical text 3-4 times, absolutely positioned on top of each other, each with a different shadow blur radius, topped by a solid white core layer.

.synth-neon-text {
  text-shadow: 0 0 5px #fff, 0 0 20px #FF00FF, 0 0 40px #FF00FF, 0 0 80px #FF00FF;
}

Integrations

As a design-it sub-style, it's applied through the parent skill rather than invoked directly, with consistent glow-and-grid treatment expected across web CSS, SwiftUI, Flutter, React Native, and Jetpack Compose - accepting that the perspective grid is best delivered as a pre-rendered image asset on every mobile platform rather than computed live.

Who it's for

Designers and developers building an 80s-retro-futurist "synthwave"/outrun interface who need the neon-glow and horizon-grid look reproduced consistently across web and native platforms, including workarounds for React Native's and Jetpack Compose's single-shadow limitation that would otherwise flatten the signature multi-layer bloom effect.

Source README

Synthwave (Outrun)

"Driving a Ferrari through a neon-lit digital grid at midnight."

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. Dark Mode by Default: Absolute pitch-black or deep purple backgrounds.
  2. Neon Glowing Vectors: Bright magenta, cyan, and yellow wireframes, text, and grids. Heavy use of box-shadow and text-shadow for glow effects.
  3. The Perspective Grid: The defining visual is a glowing grid that fades into a vanishing point on the horizon.

Visual DNA

  • Colors: Deep space backgrounds (#0B0C10, #110022). Glowing neon accents: Cyan (#00FFFF), Hot Pink (#FF00FF), Electric Yellow (#FFFF00).
  • Typography: 80s chrome text, brush script (like a neon sign), and heavy italicized sans-serifs.
  • Shadows: Drop shadows are not black; they are the same color as the element, heavily blurred, to create light emission.

Web Implementation

  • Rely on text-shadow for neon signs and 3D transforms for the floor grid.
  • CSS Example:
body {
  background-color: #090014;
  color: #fff;
  font-family: 'Montserrat', sans-serif;
  overflow-x: hidden;
}

/* Neon Text Glow */
.synth-neon-text {
  font-family: 'Mr Dafoe', cursive; /* A classic 80s script */
  font-size: 4rem;
  color: #fff;
  text-shadow: 
    0 0 5px #fff,
    0 0 10px #fff,
    0 0 20px #FF00FF,
    0 0 40px #FF00FF,
    0 0 80px #FF00FF;
}

/* The Perspective Grid Floor */
.synth-grid {
  position: absolute;
  bottom: 0; left: -50%;
  width: 200%; height: 50vh;
  background-image: 
    linear-gradient(rgba(0, 255, 255, 0.8) 2px, transparent 2px),
    linear-gradient(90deg, rgba(0, 255, 255, 0.8) 2px, transparent 2px);
  background-size: 50px 50px;
  
  /* Create the 3D horizon effect */
  transform: perspective(500px) rotateX(60deg);
  transform-origin: top center;
  
  /* Fade out towards the horizon */
  mask-image: linear-gradient(to bottom, transparent 0%, black 100%);
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, black 100%);
}

App Implementation

SwiftUI

struct NeonText: View {
    let text: String
    
    var body: some View {
        Text(text)
            .font(.custom("Mr Dafoe", size: 64))
            .foregroundColor(.white)
            // Layering shadows to create a glowing bloom
            .shadow(color: .white, radius: 2)
            .shadow(color: .pink, radius: 5)
            .shadow(color: .pink, radius: 10)
            .shadow(color: .pink, radius: 20)
    }
}

struct SynthwaveScreen: View {
    var body: some View {
        ZStack {
            Color(red: 0.03, green: 0.0, blue: 0.08).ignoresSafeArea() // #090014
            
            VStack {
                NeonText(text: "Outrun")
                Spacer()
            }
            
            // Note: A 3D perspective grid requires SceneKit or a pre-rendered image
            // Native SwiftUI 3D transforms apply to the view, but won't draw an infinite floor grid easily.
            Image("synth_grid")
                .resizable()
                .scaledToFill()
                .frame(height: 300)
                .offset(y: 200)
        }
    }
}
  • Stack multiple .shadow(color:radius:) modifiers directly on the text to create a vibrant neon bloom effect.
  • The 3D wireframe horizon grid is best achieved via a pre-rendered image background.

Flutter

class NeonText extends StatelessWidget {
  final String text;
  const NeonText(this.text);

  @override
  Widget build(BuildContext context) {
    return Text(
      text,
      style: const TextStyle(
        fontFamily: 'Mr Dafoe', // Or any cursive 80s font
        fontSize: 64,
        color: Colors.white,
        shadows: [
          Shadow(color: Colors.white, blurRadius: 2),
          Shadow(color: Colors.pinkAccent, blurRadius: 5),
          Shadow(color: Colors.pinkAccent, blurRadius: 15),
          Shadow(color: Colors.pinkAccent, blurRadius: 30),
        ],
      ),
    );
  }
}

class SynthwaveScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: const Color(0xFF090014),
      body: Stack(
        children: [
          // Background grid asset
          Positioned(
            bottom: 0,
            left: 0,
            right: 0,
            height: 300,
            child: Image.asset('assets/synth_grid.png', fit: BoxFit.cover),
          ),
          // Foreground UI
          const Center(child: NeonText('Outrun')),
        ],
      ),
    );
  }
}
  • TextStyle accepts a list of Shadow objects. Stack them with exponentially increasing blurRadius values (e.g., 2, 5, 15, 30) to simulate light dispersal.
  • Avoid rendering the perspective grid programmatically using CustomPaint unless you want to do the 3D math manually. Use an asset.

React Native

// React Native only supports ONE textShadow per Text element natively.
// To create a true neon glow, you must stack identical Text components.

const NeonText = ({ text }) => {
  const baseStyle = {
    fontFamily: 'MrDafoe',
    fontSize: 64,
    color: '#FFF',
    position: 'absolute',
  };

  return (
    <View style={{ alignItems: 'center', height: 80 }}>
      {/* Outer Glow */}
      <Text style={[baseStyle, { textShadowColor: '#FF00FF', textShadowRadius: 30 }]}>{text}</Text>
      {/* Mid Glow */}
      <Text style={[baseStyle, { textShadowColor: '#FF00FF', textShadowRadius: 15 }]}>{text}</Text>
      {/* Core Glow */}
      <Text style={[baseStyle, { textShadowColor: '#FFF', textShadowRadius: 5 }]}>{text}</Text>
      {/* Crisp White Core */}
      <Text style={baseStyle}>{text}</Text>
    </View>
  );
};

const SynthwaveScreen = () => (
  <View style={{ flex: 1, backgroundColor: '#090014', justifyContent: 'center' }}>
    <NeonText text="Outrun" />
    
    <Image 
      source={require('./synth_grid.png')}
      style={{ position: 'absolute', bottom: 0, width: '100%', height: 300, resizeMode: 'cover' }}
    />
  </View>
);
  • React Native limitation: You cannot pass an array of shadows to textShadow.
  • Workaround: Render the exact same <Text> component 3-4 times on top of each other using position: 'absolute', each with a different textShadowRadius to build the bloom.

Jetpack Compose

@Composable
fun NeonText(text: String) {
    Text(
        text = text,
        fontSize = 64.sp,
        color = Color.White,
        fontFamily = FontFamily.Cursive,
        // Compose only supports a single Shadow natively on TextStyle
        style = TextStyle(
            shadow = Shadow(
                color = Color(0xFFFF00FF),
                offset = Offset.Zero,
                blurRadius = 30f // Single large blur as fallback
            )
        ),
        // To get stacked blurs, we use Modifier.drawBehind to draw the text repeatedly
    )
}

// Advanced stacked glow approach
@Composable
fun AdvancedNeonText(text: String) {
    Box(contentAlignment = Alignment.Center) {
        // Render layers of text to build the glow
        val blurs = listOf(30f, 15f, 5f)
        blurs.forEach { blur ->
            Text(
                text = text,
                color = Color.Transparent,
                style = TextStyle(
                    shadow = Shadow(Color(0xFFFF00FF), Offset.Zero, blur)
                )
            )
        }
        // Top solid layer
        Text(text = text, color = Color.White)
    }
}
  • Compose Limitation: Like React Native, TextStyle only accepts a single Shadow.
  • Workaround: Stack multiple transparent Text composables inside a Box, each casting a shadow of varying size, topped by the solid white core text.

Do's and Don'ts

  • DO: Italicize fonts to give a sense of speed and forward momentum.
  • DON'T: Use standard, subtle box shadows. If it casts a shadow, it must cast a neon glow instead.

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.