LEISSONCREATIVE
Design reference

An instrument interface must be playable, not just a pretty picture.

An interactive tool or music product. · web instrument, shareable link

playable groovebox
1
the beat lives in the link
URL
tracks × steps
8 × 32

Ask about a similar system →

← Case studyInstrument design system

A browser groovebox that is an instrument, a brand channel and a measurable traffic engine at once.

KPT-UGMA · UNIT 02 is Keep It Underground's free instrument: eight tracks, 32 steps, synthesised sounds and the whole beat in one link. This page shows the system it is built from – tokens, type, components, motion, the naming engine and the share loop – and every example here works.

EAST SYSTEM 53BEAT
170BPM
01/32 STEP
Client
Keep It Underground (own brand)
Year
2026
Scope
Product, UI, audio, sharing, measurement, QA
  • 8 × 32tracks × steps, 8 patterns per track
  • 36sounds, all synthesised in the browser – no samples are downloaded
  • 16genre presets from dub techno to frenchcore
  • 55automated checks in real Chrome after every change

Keep it underground. Keep it in the link.

01

What problem does the instrument solve?

Problem

A small clothing brand cannot buy attention. Its audience – people who build and run sound systems – ignores ads and responds to something it can use itself and pass on.

Approach

Give away a real instrument, not a demo. Every beat carries the brand, gets a name and fits in one link. Sharing is built in so that it is cheap, personal and measurable.

Outcome

The instrument lives at keepitunderground.com/unit and works on a phone, a desktop and offline. Every shared beat leads back to the same page and from there to the shop.

02

Listen, change it, watch the name change

This is the system page's own small UNIT: the same 16 presets, the same track colours and exactly the same naming function as the real instrument. Toggle a step – the name is a fingerprint of the pattern.

KPT-UGMA · UNIT 028 track · 32 step
EAST SYSTEM 53BEAT
170BPM
01/32 STEP

Arrow keys move the cursor, Space or Enter toggles the step. Track 1, 1: on

1Kick / hard
2Bass / roll
3Hat / open
4Clap
5Hat / closed
6FX / zap
7Bass / acid 303
8Ride

This page's instrument is simplified: reduced synthesis, one pattern per track. The full instrument has 8 patterns per track, knobs, a sample browser, MIDI, recording and export.

03

Eight signals on dark metal

The surface is one dark hardware panel in seven steps. Colour is reserved for signal: every track has its own colour and it repeats in the track number, the steps, the pattern slots and the selected-track panel. Every contrast here is computed from the real tokens.

Surfaces

  • --ink#050505
  • --ink-2#0B0B0A
  • --panel#141513
  • --panel-2#1B1C1A
  • --cell#232421
  • --cell-hi#2E302C
  • --dim#333330

Text

  • --paper#E8E4DC14.4 : 1 AA
  • --slate#7080904.5 : 1 AA
  • --muted#7A7D744.4 : 1 AA 18px+

Track signals

  • --green#8ACE009.5 : 1 AA
  • --orange#FF8C007.9 : 1 AA
  • --paper#E8E4DC14.4 : 1 AA
  • --rust#C0653A4.5 : 1 AA
  • --sky#8FB3C98.3 : 1 AA
  • --lime#D8E36A13.2 : 1 AA
  • --sand#C9B27C8.8 : 1 AA
  • --teal#6FB7A87.9 : 1 AA

Honestly: --muted on the panel stays below 4.5 : 1 and is an open fix for the next version (UX audit 18 Oct 2026, finding 7).

04

Two typefaces: poster and instrument

Bebas Neue carries the name, the number and the tempo – readable from two metres in a dark club. Space Mono carries everything that is measured: buttons, labels, values, tabular numbers. There is no third family.

Bebas Neue · display

EAST SYSTEM 53

Space Mono · data

▶ PLAY ■ STOP ↗ SHARE BEAT
170 BPM · 01 /32 STEP · −12 st · 18.0 kHz
0123456789 ÕÄÖÜ õäöü

Scale

  • 34pxBrandBebas Neue 400
  • 30pxLCD valueBebas Neue 400
  • 26pxPanel titleBebas Neue 400
  • 24pxTrack numberBebas Neue 400
  • 22pxBrowser titleBebas Neue 400
  • 12pxBodySpace Mono 400/700
  • 11pxButtonSpace Mono 400/700
  • 10pxLabelSpace Mono 400/700
  • 9pxRulerSpace Mono 400/700
05

One panel, four breakpoints

On a desktop the instrument is one hardware panel: header, ruler, eight rows, the selected-track panel. On a phone the rule is "instrument first": Play and the beat name are on the first screen, the selected track is a thumb-sized 4 × 8 grid and the other tracks are overview rows.

  1. > 1240pxThree-part panel: browser | wave + note lane | 7 × 2 knobs
  2. ≤ 1240pxKnobs move below the panel into a full-width row
  3. ≤ 960px16 steps per row, secondary tools behind "More"
  4. ≤ 640pxFocus-track grid: selected track 4 × 8, others as overview rows
Before: the help text and the entry row took two rows above the grid.
Before: the help text and the entry row took two rows above the grid.
After: the entry row sits in the header, the rules live in the help dialog. Tracks start 76 px higher.
After: the entry row sits in the header, the rules live in the help dialog. Tracks start 76 px higher.
06

Components that behave like hardware

Every component gives feedback on press, not on release. Try them: buttons, a step with velocity, pattern slots, a knob and the LCD.

Buttons and states

Step

+7

Velocity fills the cell from the bottom and drives the glow; the note sits at the bottom; the playhead is a paper-coloured frame.

Pattern slots

Grey = empty, light = saved, coloured = playing, blinking = queued until the next bar. Click one.

Knob

CUT11.2 kHz

Drag up/down, scroll or use the arrow keys; double-click resets.

LCD

EAST SYSTEM 53BEAT
170BPM
01/32 STEP
07

A hit has a body

Motion is not decoration, it is rhythmic feedback. The cell and the track number kick on the engine clock, not on the screen frame, so picture and sound never drift. The reduced-motion preference turns all of it off.

1.00160 mscubic-bezier(.2, 1.4, .4, 1)

Motion tokens

hit160 ms · cubic-bezier(.2, 1.4, .4, 1)step kicks: scale 1.16 → 1, brightness 1.6 → 1
numhit180 ms · cubic-bezier(.2, 1.4, .4, 1)track number kicks along: scale 1.25 → 1
pressscale(.96) · :activepress is felt on pointerdown
queue450 ms · steps(2) infinitea queued pattern blinks until the bar ends
08

Every beat has a name that comes from its pattern

Nobody writes the name. Tempo, sounds and active steps are joined into one string, an FNV-1a hash is computed from it, and the hash bits pick from 32 adjectives and 32 nouns and add a number. The same pattern always gives the same name – in the browser, on the server, on the share page and in the video. The calculation below runs on the beat you edited above.

  1. 1 · Canonical string170|kick-hard:10001000100010001000100010001000|bass-roll:01110111011101110111011101110111|hat-open:00100010001000100010001000100010|clap:00001000000000000000100000000000|hat-closed:11111111111111111111111111111111|zap:00000001000000010000000100000001|bass-acid:00100010001000100010001000100110|ride:10101010101010101010101010101010
  2. 2 · FNV-1a hash0x63D5155D = 1674909021
  3. 3a · adjective = h & 3129EAST
    3b · noun = (h >>> 5) & 3110SYSTEM
    3c · number = (h >>> 10) % 1005353
  4. 4 · NameEAST SYSTEM 53

A user's own name (the "Your name" field) makes a beat but never goes into the link, storage or an analytics event – a test checks this.

09

The beat lives in the link

The whole beat is packed into the URL: JSON → deflate-raw → base64url. No server, account or database is needed. Every way of sharing leads back to the same instrument, where the beat opens and can be changed again.

  1. 01Playfirst Play → unit_play
  2. 02Sharelink · text · embed · 9:16 video + QR · WAV
  3. 03Open/unit/b/<code> restores the beat → unit_remix_open
  4. 04Remixnew pattern = new name = new link
→Wear the soundhero_shop_click → shop → Fourthwall checkout

Link encoding

code = "1" + base64url( deflate-raw( JSON ) )
JSON = { v:1, b:bpm, m:master, g?:preset,
         t:[ { s:sound, k:slot, l:level, p?:{…},
               q:{ "<slot>": [ steps32, notes32? ] } } ] }
steps32 = "." off · "0"…"z" velocity 0.05…1.0
→ keepitunderground.com/unit/b/<code>

The first seeding round has no numbers yet. The stop rule was written down first: if fewer than 5 % share at ≥ 200 plays, no more sharing features are added – the first minute is fixed instead.

10

What is under the hood?

Sample-accurate clock

Timing runs in an AudioWorklet and the visuals read the engine clock. WAV export renders two loops from the same clock.

Synthesised sounds

All 36 sounds are made in the browser with an OfflineAudioContext. Your own samples stay on the device and never enter the URL.

An instrument, not a page

Keys, live recording, Web MIDI (pads C1–G1 → tracks 1–8), PWA install and offline use.

A measured bridge

The instrument sends only four named events out of its iframe; the page checks origin and an allow-list before analytics.

Recording lock

Video export freezes the name, genre and tempo at the start – because two of the first three clips switched beats in the last second.

Checked after every change

Type checks, lint, unit tests and 55 checks in real Chrome before and after every release.

11

What was handed over?

Instrument
keepitunderground.com/unit, share page, embed player, PWA
System
20 colour tokens, 2 type families, 5 components, 4 motion tokens, 4 breakpoints
Growth engine
named beats, 5 ways to share, a measured path from instrument to checkout, a seeding plan and a stop rule
Quality
QA script with 55 checks, unit tests, an evidence folder for every release

Want your brand to have something people pass on by themselves?

Your system

If you need a similar system, answer three questions in the enquiry:

  1. Which brand or product is it?
  2. How many surfaces (web, app, print …)?
  3. When does it need to be ready?

Start the enquiry