nothing-design-system-skill

Generate UI components in Nothing's design language — monochrome, typographic, industrial aesthetic with Swiss typography and mechanical interface elements

Skill file

Preview skill file
---
name: nothing-design-system-skill
description: Generate UI components in Nothing's design language — monochrome, typographic, industrial aesthetic with Swiss typography and mechanical interface elements
triggers:
  - "use nothing design style"
  - "create a nothing-style component"
  - "generate UI in nothing design language"
  - "apply nothing design system"
  - "make this look like nothing phone UI"
  - "design with nothing aesthetic"
  - "build with nothing design principles"
  - "nothing design tokens"
---

# Nothing Design System Skill

> Skill by [ara.so](https://ara.so) — Design Skills collection.

A Claude Code skill for generating UI components inspired by Nothing's visual language. Creates monochrome, typographic, industrial interfaces with Swiss typography, OLED blacks, segmented progress bars, and dot-matrix motifs.

## What It Does

This skill provides a complete design system that enforces:

- **Three-layer visual hierarchy**: Display, body, metadata (nothing more)
- **Monochrome palette**: True blacks (#000000) for OLED, pure whites, controlled grays
- **Typography stack**: Space Grotesk (display), Space Mono (mono), Doto (dot-matrix)
- **Mechanical components**: Segmented progress bars, industrial toggles, instrument-style widgets
- **Multi-platform output**: HTML/CSS, SwiftUI, or React/Tailwind

## Installation

```sh
# Clone the repository
git clone https://github.com/dominikmartn/nothing-design-skill.git

# Copy to Claude Code skills directory
cp -r nothing-design-skill/nothing-design ~/.claude/skills/

# Restart Claude Code to load the skill
```

Verify installation by typing `/nothing-design` in Claude Code.

## Core Design Tokens

### Color System

```css
/* Dark Mode (Primary) */
--nothing-black: #000000;        /* OLED black, backgrounds */
--nothing-white: #FFFFFF;        /* Text, borders, icons */
--nothing-gray-10: #1A1A1A;      /* Subtle elevation */
--nothing-gray-20: #333333;      /* Component backgrounds */
--nothing-gray-40: #666666;      /* Secondary text */
--nothing-gray-60: #999999;      /* Tertiary text */
--nothing-red: #FF0000;          /* Accent, alerts */

/* Light Mode */
--nothing-bg-light: #FFFFFF;
--nothing-text-light: #000000;
--nothing-gray-light-80: #CCCCCC;
--nothing-gray-light-90: #E5E5E5;
```

### Typography Scale

```css
/* Display - Space Grotesk */
--font-display: 'Space Grotesk', -apple-system, system-ui, sans-serif;
--text-xl: 48px / 1.1;           /* Hero */
--text-lg: 32px / 1.2;           /* Section headers */
--text-md: 24px / 1.3;           /* Card titles */

/* Body - Space Grotesk */
--text-base: 16px / 1.5;         /* Body text */
--text-sm: 14px / 1.4;           /* Secondary */
--text-xs: 12px / 1.3;           /* Metadata */

/* Mono - Space Mono */
--font-mono: 'Space Mono', 'SF Mono', monospace;

/* Dot Matrix - Doto */
--font-dot: 'Doto', monospace;
```

### Spacing System

```css
--space-1: 4px;   /* Micro */
--space-2: 8px;   /* Small */
--space-3: 12px;  /* Base */
--space-4: 16px;  /* Medium */
--space-6: 24px;  /* Large */
--space-8: 32px;  /* XL */
--space-12: 48px; /* XXL */
```

## Component Patterns

### HTML/CSS Examples

#### Button

```html
<button class="nothing-btn">
  <span class="nothing-btn-label">CONTINUE</span>
</button>

<style>
.nothing-btn {
  background: #000000;
  border: 1px solid #FFFFFF;
  color: #FFFFFF;
  font-family: 'Space Grotesk', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  padding: 12px 24px;
  cursor: pointer;
  transition: all 120ms cubic-bezier(0.4, 0, 0.2, 1);
}

.nothing-btn:hover {
  background: #FFFFFF;
  color: #000000;
}

.nothing-btn:active {
  transform: scale(0.98);
}
</style>
```

#### Segmented Progress Bar

```html
<div class="nothing-progress">
  <div class="nothing-progress-segments">
    <div class="segment active"></div>
    <div class="segment active"></div>
    <div class="segment active"></div>
    <div class="segment"></div>
    <div class="segment"></div>
  </div>
  <span class="nothing-progress-label">60%</span>
</div>

<style>
.nothing-progress {
  display: flex;
  align-items: center;
  gap: 12px;
}

.nothing-progress-segments {
  display: flex;
  gap: 4px;
  flex: 1;
}

.segment {
  height: 4px;
  background: #333333;
  flex: 1;
  transition: background 200ms;
}

.segment.active {
  background: #FFFFFF;
}

.nothing-progress-label {
  font-family: 'Space Mono', monospace;
  font-size: 12px;
  color: #999999;
  min-width: 40px;
}
</style>
```

#### Card Component

```html
<div class="nothing-card">
  <div class="nothing-card-header">
    <h3 class="nothing-card-title">SYSTEM STATUS</h3>
    <span class="nothing-card-meta">14:32:05</span>
  </div>
  <div class="nothing-card-body">
    <p>All systems operational. No alerts detected.</p>
  </div>
</div>

<style>
.nothing-card {
  background: #000000;
  border: 1px solid #333333;
  padding: 24px;
}

.nothing-card-header {
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  margin-bottom: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #1A1A1A;
}

.nothing-card-title {
  font-family: 'Space Grotesk', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #FFFFFF;
  margin: 0;
}

.nothing-card-meta {
  font-family: 'Space Mono', monospace;
  font-size: 12px;
  color: #666666;
}

.nothing-card-body {
  font-family: 'Space Grotesk', sans-serif;
  font-size: 16px;
  line-height: 1.5;
  color: #FFFFFF;
}
</style>
```

### SwiftUI Examples

#### Button

```swift
struct NothingButton: View {
    let label: String
    let action: () -> Void
    
    var body: some View {
        Button(action: action) {
            Text(label.uppercased())
                .font(.custom("SpaceGrotesk-Medium", size: 14))
                .tracking(0.7)
                .foregroundColor(.white)
                .padding(.horizontal, 24)
                .padding(.vertical, 12)
                .background(Color.black)
                .overlay(
                    RoundedRectangle(cornerRadius: 0)
                        .stroke(Color.white, lineWidth: 1)
                )
        }
        .buttonStyle(NothingButtonStyle())
    }
}

struct NothingButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .background(configuration.isPressed ? Color.white : Color.black)
            .foregroundColor(configuration.isPressed ? Color.black : Color.white)
            .scaleEffect(configuration.isPressed ? 0.98 : 1.0)
            .animation(.easeInOut(duration: 0.12), value: configuration.isPressed)
    }
}
```

#### Progress Bar

```swift
struct NothingProgress: View {
    let progress: Double // 0.0 to 1.0
    let segments: Int = 5
    
    var body: some View {
        HStack(spacing: 4) {
            ForEach(0..<segments, id: \.self) { index in
                Rectangle()
                    .fill(index < Int(progress * Double(segments)) ? Color.white : Color(hex: "#333333"))
                    .frame(height: 4)
            }
            
            Text("\(Int(progress * 100))%")
                .font(.custom("SpaceMono-Regular", size: 12))
                .foregroundColor(Color(hex: "#999999"))
                .frame(width: 40)
        }
    }
}
```

### React/Tailwind Examples

#### Setup Tailwind Config

```javascript
// tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        'nothing-black': '#000000',
        'nothing-white': '#FFFFFF',
        'nothing-gray-10': '#1A1A1A',
        'nothing-gray-20': '#333333',
        'nothing-gray-40': '#666666',
        'nothing-gray-60': '#999999',
        'nothing-red': '#FF0000',
      },
      fontFamily: {
        'display': ['Space Grotesk', 'sans-serif'],
        'mono': ['Space Mono', 'monospace'],
        'dot': ['Doto', 'monospace'],
      },
      letterSpacing: {
        'nothing': '0.05em',
        'nothing-wide': '0.08em',
      },
    },
  },
}
```

#### Button Component

```jsx
export function NothingButton({ children, onClick, variant = 'primary' }) {
  return (
    <button
      onClick={onClick}
      className="
        bg-nothing-black border border-nothing-white text-nothing-white
        hover:bg-nothing-white hover:text-nothing-black
        active:scale-[0.98]
        font-display text-sm font-medium tracking-nothing uppercase
        px-6 py-3
        transition-all duration-[120ms] ease-out
      "
    >
      {children}
    </button>
  );
}
```

#### Card Component

```jsx
export function NothingCard({ title, meta, children }) {
  return (
    <div className="bg-nothing-black border border-nothing-gray-20 p-6">
      <div className="flex justify-between items-baseline mb-4 pb-3 border-b border-nothing-gray-10">
        <h3 className="font-display text-sm font-medium tracking-nothing-wide uppercase text-nothing-white">
          {title}
        </h3>
        {meta && (
          <span className="font-mono text-xs text-nothing-gray-40">
            {meta}
          </span>
        )}
      </div>
      <div className="font-display text-base leading-relaxed text-nothing-white">
        {children}
      </div>
    </div>
  );
}
```

## Key Design Principles

### 1. Visual Hierarchy (Three Layers Only)

```
DISPLAY   → Headers, titles, key actions
BODY      → Primary content, readable text
METADATA  → Timestamps, labels, secondary info
```

### 2. Motion & Transitions

```css
/* Fast, mechanical transitions */
--timing-fast: 120ms;
--timing-base: 200ms;
--timing-slow: 300ms;
--easing: cubic-bezier(0.4, 0, 0.2, 1);
```

### 3. Borders & Dividers

- Always 1px solid
- Use `#333333` for subtle dividers
- Use `#FFFFFF` for strong emphasis
- Never rounded corners (stay industrial)

### 4. Interactive States

```css
/* Hover */
element:hover {
  background: invert;
  color: invert;
}

/* Active */
element:active {
  transform: scale(0.98);
}

/* Focus */
element:focus {
  outline: 1px solid #FFFFFF;
  outline-offset: 2px;
}
```

## Common Patterns

### Data Table

```html
<table class="nothing-table">
  <thead>
    <tr>
      <th>PARAMETER</th>
      <th>VALUE</th>
      <th>STATUS</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Core Temp</td>
      <td class="mono">42°C</td>
      <td>OK</td>
    </tr>
  </tbody>
</table>

<style>
.nothing-table {
  width: 100%;
  border-collapse: collapse;
  font-family: 'Space Grotesk', sans-serif;
}

.nothing-table th {
  text-align: left;
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #666666;
  padding: 12px 16px;
  border-bottom: 1px solid #333333;
}

.nothing-table td {
  font-size: 14px;
  color: #FFFFFF;
  padding: 16px;
  border-bottom: 1px solid #1A1A1A;
}

.nothing-table .mono {
  font-family: 'Space Mono', monospace;
}
</style>
```

### Toggle Switch

```html
<label class="nothing-toggle">
  <input type="checkbox">
  <span class="nothing-toggle-track">
    <span class="nothing-toggle-thumb"></span>
  </span>
  <span class="nothing-toggle-label">NOTIFICATIONS</span>
</label>

<style>
.nothing-toggle {
  display: flex;
  align-items: center;
  gap: 12px;
  cursor: pointer;
}

.nothing-toggle input {
  display: none;
}

.nothing-toggle-track {
  position: relative;
  width: 48px;
  height: 24px;
  background: #1A1A1A;
  border: 1px solid #333333;
  transition: background 200ms;
}

.nothing-toggle-thumb {
  position: absolute;
  left: 2px;
  top: 2px;
  width: 18px;
  height: 18px;
  background: #666666;
  transition: all 200ms;
}

.nothing-toggle input:checked ~ .nothing-toggle-track {
  background: #000000;
  border-color: #FFFFFF;
}

.nothing-toggle input:checked ~ .nothing-toggle-track .nothing-toggle-thumb {
  left: 26px;
  background: #FFFFFF;
}

.nothing-toggle-label {
  font-family: 'Space Grotesk', sans-serif;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: #FFFFFF;
}
</style>
```

## Troubleshooting

### Fonts not loading

Ensure fonts are properly imported:

```html
<!-- HTML -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=Space+Mono:wght@400;700&display=swap" rel="stylesheet">
```

```css
/* CSS */
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;700&family=Space+Mono:wght@400;700&display=swap');
```

### OLED blacks not working

Ensure root background is true black:

```css
:root, body, html {
  background: #000000;
  color: #FFFFFF;
}
```

### Components look too rounded

Nothing design uses **zero** border radius. Remove all `border-radius` declarations:

```css
/* ❌ Wrong */
border-radius: 8px;

/* ✅ Correct */
border-radius: 0;
```

### Text hierarchy unclear

Stick to the three-layer system:

```css
/* Display - 24px+, bold, uppercase, tight spacing */
.display { font-size: 24px; font-weight: 700; text-transform: uppercase; }

/* Body - 14-16px, normal weight */
.body { font-size: 16px; font-weight: 400; }

/* Metadata - 12px, mono, muted color */
.meta { font-size: 12px; font-family: 'Space Mono'; color: #666666; }
```

## Usage with Claude Code

Trigger the skill naturally:

- "Create a nothing-style dashboard"
- "Generate a progress bar in nothing design"
- "Apply nothing design tokens to this component"
- "Make this button look industrial like nothing phone"

The skill will automatically apply the design system principles and generate code in your requested format (HTML/CSS, SwiftUI, or React).

Source

Creator's repository · aradotso/design-skills

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk