| 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 — 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
git clone https://github.com/dominikmartn/nothing-design-skill.git
cp -r nothing-design-skill/nothing-design ~/.claude/skills/
Verify installation by typing /nothing-design in Claude Code.
Core Design Tokens
Color System
--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;
--nothing-bg-light: #FFFFFF;
--nothing-text-light: #000000;
--nothing-gray-light-80: #CCCCCC;
--nothing-gray-light-90: #E5E5E5;
Typography Scale
--font-display: 'Space Grotesk', -apple-system, system-ui, sans-serif;
--text-xl: 48px / 1.1;
--text-lg: 32px / 1.2;
--text-md: 24px / 1.3;
--text-base: 16px / 1.5;
--text-sm: 14px / 1.4;
--text-xs: 12px / 1.3;
--font-mono: 'Space Mono', 'SF Mono', monospace;
--font-dot: 'Doto', monospace;
Spacing System
--space-1: 4px;
--space-2: 8px;
--space-3: 12px;
--space-4: 16px;
--space-6: 24px;
--space-8: 32px;
--space-12: 48px;
Component Patterns
HTML/CSS Examples
Button
<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
<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;
}
{
: ;
: ;
: ;
: background ;
}
{
: ;
}
{
: , monospace;
: ;
: ;
: ;
}
Card Component
<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 {
: , sans-serif;
: ;
: ;
: ;
: uppercase;
: ;
: ;
}
{
: , monospace;
: ;
: ;
}
{
: , sans-serif;
: ;
: ;
: ;
}
SwiftUI Examples
Button
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
struct NothingProgress: View {
let progress: Double
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
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
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
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
--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
element:hover {
background: invert;
color: invert;
}
element:active {
transform: scale(0.98);
}
element:focus {
outline: 1px solid #FFFFFF;
outline-offset: 2px;
}
Common Patterns
Data Table
<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;
: ;
: ;
: uppercase;
: ;
: ;
: solid ;
}
{
: ;
: ;
: ;
: solid ;
}
{
: , monospace;
}
Toggle Switch
<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: ;
: ;
: ;
: ;
: ;
: all ;
}
~ {
: ;
: ;
}
~ {
: ;
: ;
}
{
: , sans-serif;
: ;
: ;
: ;
: uppercase;
: ;
}
Troubleshooting
Fonts not loading
Ensure fonts are properly imported:
<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">
@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:
:root, body, html {
background: #000000;
color: #FFFFFF;
}
Components look too rounded
Nothing design uses zero border radius. Remove all border-radius declarations:
border-radius: 8px;
border-radius: 0;
Text hierarchy unclear
Stick to the three-layer system:
.display { font-size: 24px; font-weight: 700; text-transform: uppercase; }
.body { font-size: 16px; font-weight: 400; }
.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).