duply
teenage-engineering homepage design, full-page screenshot

teenage-engineering

A stark, editorial, product-catalog interface built on pure white canvas with black ink, sharp zero-radius geometry, and teenage engineering's ultralight custom "te-20" typeface. The system reads as industrial-design deadpan — no rounded corners, no shadows, oversized black display lettering set against clean white, product photography floated on black backgrounds, and a small utilitarian palette of pure signal accents (blue, orange, amber, green, red) used sparingly for icons, warnings, and catalog tags.

---
version: alpha
name: teenage-engineering-design-analysis
description: "A stark, editorial, product-catalog interface built on pure white canvas with black ink, sharp zero-radius geometry, and teenage engineering's ultralight custom \"te-20\" typeface. The system reads as industrial-design deadpan — no rounded corners, no shadows, oversized black display lettering set against clean white, product photography floated on black backgrounds, and a small utilitarian palette of pure signal accents (blue, orange, amber, green, red) used sparingly for icons, warnings, and catalog tags."
colors:
  ink: "#000000"
  near-black: "#0f0e12"
  ink-soft: "#272727"
  body: "#4d4d4d"
  muted: "#767676"
  muted-alt: "#7f7f7f"
  muted-soft: "#b2b2b2"
  hairline: "#cccccc"
  hairline-soft: "#e5e5e5"
  cool-gray: "#a1a7af"
  surface: "#f5f5f5"
  surface-soft: "#f6f8f7"
  canvas: "#ffffff"
  accent-blue: "#0071bb"
  accent-green: "#006837"
  accent-orange: "#f05a24"
  accent-red: "#b81d13"
  accent-crimson: "#c0262c"
  accent-amber: "#fab413"
  accent-pink: "#f0cccc"
typography:
  body:
    fontFamily: "te-20, 'Helvetica Neue', Arial, sans-serif"
    fontSize: 19px
    fontWeight: 100
    lineHeight: 1.154
    letterSpacing: normal
  button:
    fontFamily: "te-20, 'Helvetica Neue', Arial, sans-serif"
    fontSize: 23.5px
    fontWeight: 100
    lineHeight: 1.5
    letterSpacing: normal
rounded:
  none: 0px
spacing:
  sm: 22px
  md: 33px
  lg: 66px
components:
  top-nav:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
  nav-link:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.body}"
  nav-sublink:
    backgroundColor: transparent
    textColor: "{colors.body}"
    typography: "{typography.body}"
  button-primary:
    backgroundColor: transparent
    textColor: "{colors.near-black}"
    typography: "{typography.button}"
    rounded: "{rounded.none}"
    padding: 0px
  input:
    backgroundColor: "{colors.canvas}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
  cookie-banner:
    backgroundColor: "{colors.accent-amber}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
  product-showcase:
    backgroundColor: "{colors.ink}"
    textColor: "{colors.muted-soft}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
  product-tile-light:
    backgroundColor: "{colors.surface}"
    textColor: "{colors.ink}"
    typography: "{typography.body}"
    rounded: "{rounded.none}"
  buy-now-link:
    backgroundColor: transparent
    textColor: "{colors.ink}"
    typography: "{typography.body}"
  catalog-tag:
    backgroundColor: transparent
    textColor: "{colors.accent-orange}"
    typography: "{typography.body}"
---

## Overview

teenage engineering's site is a stark, industrial-design catalog surface — pure white canvas (`{colors.canvas}`#ffffff) with black ink (`{colors.ink}`#000000), zero border radius everywhere, and no shadow tokens at all. The aesthetic is deadpan Swiss-industrial: oversized black display lettering, hairline product-detail tables, and product photography floated on deep black backgrounds. Nothing is soft; every corner measured came back at `{rounded.none}` (0px).

The type voice is teenage engineering's own **te-20** — an ultralight (weight 100) grotesque used for body and interface copy at ~19px, and slightly larger (~23.5px) for interactive/button labels. The extreme thin weight paired with big black display headlines (the "DAILY LIFE OF MR. UPDATE" marquee) creates the brand's signature contrast: hairline-thin running text against slab-black poster type.

Color is almost entirely monochrome — black ink on white — punctuated by a small set of pure signal accents: a catalog blue (`{colors.accent-blue}`#0071bb), a warning amber (`{colors.accent-amber}`#fab413, seen on the cookie triangle), an orange (`{colors.accent-orange}`#f05a24, used on EP-series tags and the "MR UPDATE" flash), a green (`{colors.accent-green}`#006837, the cart icon), and reds (`{colors.accent-red}`, `{colors.accent-crimson}`). These are used as tiny functional flashes, never as fill fields.

**Key Characteristics:**
- Pure white canvas, black ink, no shadows, zero radius. Everything is flat and razor-sharp.
- Custom **te-20** ultralight typeface (weight 100) for body + UI — substituted with Helvetica Neue / Arial here.
- Oversized black poster-display lettering for hero headlines (heavier weight — not measured; see Known Gaps).
- Icon-driven top nav ("products / store / latest / finder") with tiny sub-link stacks under each pictographic mark.
- Product photography floated on deep black `{colors.ink}` showcase bands — the product is the hero, isolated on black.
- A small utilitarian accent palette (blue, orange, amber, green, red, pink) used only for signals: warning triangle, catalog tags, cart, price flags.
- Coarse spacing rhythm on an 11px-derived base — measured stops at 22px, 33px, and 66px.

## Colors

### Ink & Text
- **Ink** (`{colors.ink}`#000000): The dominant text and display color — headlines, nav, body. Also the background of the product-showcase bands.
- **Near-black** (`{colors.near-black}`#0f0e12): Interactive/button label color — the measured `color` on button elements.
- **Ink Soft** (`{colors.ink-soft}`#272727): Slightly-lifted dark text tone.
- **Body** (`{colors.body}`#4d4d4d): Secondary running text.
- **Muted** (`{colors.muted}`#767676) and **Muted Alt** (`{colors.muted-alt}`#7f7f7f): Tertiary labels, captions, product meta lines.
- **Muted Soft** (`{colors.muted-soft}`#b2b2b2): Low-contrast text over black showcase bands.
- **Cool Gray** (`{colors.cool-gray}`#a1a7af): A faint blue-gray neutral for fine detail.

### Surface & Line
- **Canvas** (`{colors.canvas}`#ffffff): The default page floor.
- **Surface** (`{colors.surface}`#f5f5f5) and **Surface Soft** (`{colors.surface-soft}`#f6f8f7): Very-faint off-white panels used for light product tiles / empty catalog cells.
- **Hairline** (`{colors.hairline}`#cccccc) and **Hairline Soft** (`{colors.hairline-soft}`#e5e5e5): 1px divider tones — used on the product-detail rules and catalog table lines. `{colors.hairline-soft}` was measured as a low-contrast text tone as well.

### Signal Accents
teenage engineering's accent set is functional, not decorative — each hue carries a specific catalog meaning and appears only as a small flash:
- **Accent Blue** (`{colors.accent-blue}`#0071bb): The most frequent accent — catalog links / labels.
- **Accent Orange** (`{colors.accent-orange}`#f05a24): EP-series tags, the "MR UPDATE" flash, price highlights.
- **Accent Amber** (`{colors.accent-amber}`#fab413): The cookie-consent warning triangle.
- **Accent Green** (`{colors.accent-green}`#006837): The cart / store icon.
- **Accent Red** (`{colors.accent-red}`#b81d13) and **Accent Crimson** (`{colors.accent-crimson}`#c0262c): Alert / price-flag reds.
- **Accent Pink** (`{colors.accent-pink}`#f0cccc): A pale tint used sparingly in illustrations / tags.

## Typography

### Font Family
The system runs **te-20** — teenage engineering's proprietary grotesque typeface — for both body and interactive copy. te-20 is a custom (non-public) web font; if it is unavailable, **Helvetica Neue** or **Arial** at a thin/ultralight weight is the closest widely-available substitute, and **Inter** at weight 100–200 approximates the thin grotesque character. The site never ships a licensed fallback — the stack degrades to system Helvetica/Arial.

The measured weight is **100 (ultralight)** across both roles — this is the brand's signature: hairline-thin interface text. The oversized black poster headlines on the landing page are a heavier weight, but that weight was not captured by measurement (see Known Gaps).

### Hierarchy

| Token | Size | Weight | Line Height | Letter Spacing | Use |
|---|---|---|---|---|---|
| `{typography.button}` | 23.5px | 100 | 1.5 | normal | Interactive labels, buttons (e.g. "settings", "accept all") |
| `{typography.body}` | 19px | 100 | 1.154 | normal | Body copy, nav links, product meta, catalog text |

### Principles
The interface voice is uniformly thin — weight 100 everywhere measured, no tracking adjustments (letter-spacing normal). The tension in the system comes from pairing this hairline UI type against very large, heavy black display lettering. Keep running text ultralight; reserve heavy weight for poster-scale headlines only.

### Note on Font Substitutes
te-20 is teenage engineering's custom typeface and is not available as a public web font. Use **Helvetica Neue** (thin/ultralight) or **Arial** as the shipping fallback, or **Inter** at weight 100–200 for the closest thin-grotesque approximation. Do not claim to ship te-20.

## Layout

### Spacing System
- **Base unit:** ~11px (derived — the measured stops 22 / 33 / 66 are all multiples of 11).
- **Tokens:** `{spacing.sm}` 22px · `{spacing.md}` 33px · `{spacing.lg}` 66px.
- **Section rhythm:** `{spacing.lg}` (66px) is the most frequently measured stop — the primary gap between major bands and product-showcase blocks.
- Only three spacing values were measured; finer paddings inside catalog rows are not captured (see Known Gaps).

### Grid & Container
- The landing page is a single full-width column: icon nav row across the top, oversized display headline, then a full-bleed illustration.
- The products page is a stacked sequence of full-bleed product-showcase bands (product floated on black) followed by a multi-column catalog grid of buy-now cells at the foot.
- Catalog cells align to a 3-up grid at desktop (observed in the "EP-133 K.O. II / EP splash cover / K.O. II soft bag" row).

### Whitespace Philosophy
The system is generous with negative space around isolated objects — product photography sits in large fields of black, and the display headline is given the full page width. Whitespace is used to isolate single objects (industrial-catalog style), not to pad dense content clusters.

## Elevation & Depth

No shadow tokens were measured — the system is entirely flat.

| Level | Treatment | Use |
|---|---|---|
| Flat | No shadow, no border | Nav, body, headlines, catalog cells |
| Hairline | 1px `{colors.hairline}` / `{colors.hairline-soft}` rule | Product-detail tables, EP-series price rows, catalog dividers |
| Black showcase field | `{colors.ink}` background | Product photography bands — depth is created by studio lighting inside the photo, not by CSS elevation |

Depth on the product pages comes entirely from the photography itself — objects are lit and shadowed within the image, floating on solid black. The interface layer adds no synthetic elevation.

## Shapes

### Border Radius Scale

| Token | Value | Use |
|---|---|---|
| `{rounded.none}` | 0px | Everything — buttons, inputs, tiles, panels |

Every measured component (`button-primary`, `input`) returned a radius of 0px. The system is uniformly sharp-cornered — this is a core brand signal. (Note: the cookie-banner action controls appear pill-shaped in the screenshot but were not individually measured; see Known Gaps.)

### Photography Geometry
Product photography is presented as full-bleed rectangles with no rounding and no frame — objects float on black or white. Vinyl records, samplers, and hardware are shot at angle on seamless studio backgrounds; the imagery carries all texture and depth the flat UI omits.

## Components

### Navigation

**`top-nav`** — Full-width white nav row pinned to the top of every page. Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}` (te-20 ultralight). Structured as a row of pictographic marks ("teenage engineering" wordmark, products, store, latest, finder) each with a small stacked list of sub-links beneath, plus the TO logo mark and Japanese mission copy at the far right.

**`nav-link`** — Primary nav category label. Transparent background, `{colors.ink}` text, `{typography.body}`.

**`nav-sublink`** — The small stacked sub-links under each nav mark (e.g. "instruments / audio / designs"). Transparent background, `{colors.body}` text, `{typography.body}`.

### Buttons & Inputs

**`button-primary`** — Interactive label control. Transparent background, text `{colors.near-black}` (#0f0e12), type `{typography.button}` (te-20 ~23.5px / 100), radius `{rounded.none}`, padding 0px as measured. Seen in the cookie banner as "settings" and "accept all".

**`input`** — Form field. Background `{colors.canvas}`, text `{colors.ink}`, type `{typography.body}`, radius `{rounded.none}` (sharp corners). Border/padding not measured (see Known Gaps).

### Content & Catalog

**`product-showcase`** — Full-bleed band presenting a single product photographed on deep black. Background `{colors.ink}`, caption text `{colors.muted-soft}`, type `{typography.body}`. The product image carries its own studio lighting; the caption (e.g. "APC-2", "virus transmission completed") sits small at the lower-left.

**`product-tile-light`** — Catalog cell on the light foot-of-page grid. Background `{colors.surface}` / `{colors.surface-soft}`, text `{colors.ink}`, type `{typography.body}`. Holds a product name and a `{component.buy-now-link}`.

**`buy-now-link`** — Inline text call-to-action ("buy now") under each catalog product. Transparent background, `{colors.ink}` text, `{typography.body}`.

**`catalog-tag`** — Small signal label used on EP-series listings ("UPDATE", price flags). Transparent background, text in an accent — commonly `{colors.accent-orange}`, type `{typography.body}`.

### Consent

**`cookie-banner`** — The bright warning-triangle consent panel bottom-left of the landing page. Background `{colors.accent-amber}` (#fab413), text `{colors.ink}`, type `{typography.body}`, radius `{rounded.none}`. Contains the consent copy, an underlined "privacy policy" link, and two `{component.button-primary}` controls.

## Do's and Don'ts

### Do
- Keep every corner sharp — `{rounded.none}` (0px) is a core brand signal. Buttons, inputs, tiles, panels are all rectangular.
- Keep interface type ultralight — te-20 / Helvetica Neue thin at weight 100. The hairline text is intentional.
- Isolate products on solid black `{component.product-showcase}` fields — let studio photography carry depth.
- Reserve accent hues for functional signals only: `{colors.accent-amber}` for the warning triangle, `{colors.accent-green}` for cart, `{colors.accent-orange}` for catalog/price tags.
- Keep the palette monochrome (black ink on white) at the interface layer; accents are tiny flashes.
- Build the top nav from pictographic marks with small stacked sub-link lists.

### Don't
- Don't add border radius. Rounded corners are off-brand for this system.
- Don't add drop shadows or synthetic elevation — the system is flat; depth lives inside photography.
- Don't fill large fields with accent color. Accents are signals, not backgrounds (except the amber cookie triangle).
- Don't bolden body/UI text — the ultralight weight is the voice.
- Don't crowd product imagery; single objects deserve large isolating whitespace.

## Responsive Behavior

Only landing and products pages at a single desktop capture were measured — responsive breakpoints were not directly observed. General guidance derived from the captured layout:

### Breakpoints
| Name | Width | Key Changes (inferred) |
|---|---|---|
| Desktop | ≥ 1024px | Full icon-nav row across the top; 3-up catalog grid; full-bleed showcase bands |
| Tablet / Mobile | < 1024px | Not measured — see Known Gaps |

### Touch Targets
- `{component.button-primary}` measured padding is 0px — tap area is defined by the label bounds. Confirm minimum 44×44px hit targets when implementing (not measured).

### Collapsing Strategy
- The multi-icon nav row and 3-up catalog grid would need to collapse to fewer columns on narrow viewports; exact behavior not captured.

## Iteration Guide

1. Focus on ONE component at a time; reference its YAML key directly (`{component.product-showcase}`, `{component.cookie-banner}`).
2. Variants live as separate entries in `components:`.
3. Use `{token.refs}` everywhere — never inline a hex or size.
4. Never document hover; default and active/pressed states only.
5. Keep every radius at `{rounded.none}` — sharpness is the brand.
6. Keep interface type te-20 ultralight (weight 100); reserve heavy weight for poster-scale display only.
7. Accents are functional signals — add one only when it carries catalog meaning.

## Known Gaps

- **te-20** is teenage engineering's custom (non-public) typeface; a Helvetica Neue / Arial thin substitute is documented in Typography. `fonts_licensed` was empty in the analysis, but te-20 is proprietary and should never be claimed as shipped.
- The oversized black poster display headline ("DAILY LIFE OF MR. UPDATE") is a heavier weight than the measured body/button weight 100 — its exact font weight and size were not captured, so no `display` typography role is declared.
- Only two typography roles (body, button) were measured; heading/caption/label roles are inferred visually but not tokenized.
- Radius measured only on `button-primary` and `input` (both 0px); the cookie-banner action controls appear pill-shaped in the screenshot but were not individually measured — the discrepancy is unresolved.
- No shadow tokens were measured; the flat treatment is documented, but any subtle borders/insets on inputs were not captured.
- Only three spacing values (22 / 33 / 66px) were measured; the 11px base unit is derived. Finer catalog-row and nav paddings are not captured.
- Button/input border, padding, and background beyond the measured `color` and `radius` are not extracted.
- Responsive breakpoints, touch-target sizing, and mobile nav collapse behavior were not measured (single desktop capture).
- Accent-usage mapping (which hue maps to which catalog function) is inferred from screenshots; exact CSS assignments were not measured.

<!-- Documented by Duply · real-world design systems as ready-to-use DESIGN.md for AI coding agents · https://duply.ai/teenage/design-md -->

Color Palette

Accent

Neutrals

Typography

body19px · 100 · 1.154
The quick brown fox jumps
button23.5px · 100 · 1.5
The quick brown fox jumps

Spacing & Shape

Spacing

NameValuePreview
sm22px
md33px
lg66px

Border Radius

NameValuePreview
none0px

FAQ

What colors does teenage-engineering use?
teenage-engineering's core palette includes #000000, #0f0e12, #272727, #4d4d4d, #767676. The full color set with usage roles (canvas, ink, surfaces, accent, semantic) is documented in the teenage-engineering DESIGN.md.
What font does teenage-engineering use?
teenage-engineering's primary typeface is te-20. The complete type scale (sizes, weights, line-height and letter-spacing per role), with an open substitute where the original is licensed, is documented in the DESIGN.md.
What is the teenage-engineering design system?
A stark, editorial, product-catalog interface built on pure white canvas with black ink, sharp zero-radius geometry, and teenage engineering's ultralight custom "te-20" typeface. The system reads as industrial-design deadpan — no rounded corners, no shadows, oversized black display lettering set

Get this as a working kit

teenage-engineering Launch Kit + DESIGN.md
$299$225
One-time payment
  • A complete production-stack template, styled like teenage-engineering, fully built and wired.
  • One-time payment and the codebase is yours. No platform fees, no subscription.

Open it with Claude Code, Cursor, or any coding agent and build in plain language, then ship a complete web app.

  • Your private DESIGN.md
  • Marketing pages, blog, SEO & legal
  • Email capture, newsletter & contact
  • Accept payments (Stripe)
  • Analytics (GA4 + PostHog)
  • One-click deploy
  • Auth, login & roles
  • A full app dashboard, when you grow

More like this