Back to Portfolio

Case Study

SEQ-16:

Designing a High-Density Musical Instrument in the Browser

Role
Product designer & product owner
Scope
Product direction · feature definition · interaction design · visual design · responsive architecture · front-end implementation
Product
SEQ-16 Crate-digging Sequencer · https://drum-machine.app
SEQ-16 desktop cockpit: 16-track step sequencer grid with active West African Poly pattern, per-track volume/pan/pitch/decay controls, 808 kit selector, master VOLUME/TONE/TEMPO strip, and AI pattern generation panel
The full desktop cockpit: sequencer grid, per-track controls, kit selector, master strip and AI panel visible simultaneously.

The short version

SEQ-16 is a browser-based drum machine and production tool built around a simple idea:

Get from musical idea to usable loop without leaving the browser.

It combines a 16-track step sequencer with AI-generated variations, real-time sample shaping, pattern chaining, a large vintage drum-machine sample archive, a dual-deck slicer, and WAV/MIDI export.

The product is deliberately dense. On a desktop, that density gives a musician simultaneous access to the state of the instrument. On a phone, the same density becomes the central UX problem.

The most important design question became:

How do you preserve the spatial logic of a musical instrument when the screen suddenly becomes much smaller?

I came to think of this as a recompaction problem, not a responsive-design problem.


01The problem wasn't making it responsive

A 16-step sequencer has a useful spatial grammar.

Tracks run vertically.
Time runs horizontally.
The relationship between the two makes the pattern readable.

A musician can look at the grid and immediately understand where the kick lands, how the hats relate to it, and where the pattern becomes more or less dense.

That relationship is also what breaks first on a phone.

The obvious solution was to make the desktop layout responsive: reduce widths, wrap controls, let the grid shrink.

That technically works.

It just doesn't work very well.

A 16-column grid that becomes 16 tiny columns on a phone preserves the layout while destroying the interaction. Touch targets become difficult to hit, the pattern becomes harder to scan, and the very spatial relationship that makes the sequencer useful starts disappearing.

So I reframed the problem:

Don't make the desktop interface smaller. Decide what the musician needs at each moment, and rebuild the access pattern around that.

That distinction shaped almost every mobile decision that followed.


02Density is not the enemy

One of the first things I had to resist was the instinct to make the interface feel "cleaner" by removing information.

SEQ-16 is a musical instrument, not a content site.

A hardware drum machine can be dense because the user benefits from seeing its state simultaneously. The position of a control has meaning, and the sequencer, sound controls and transport form one spatial model.

I wanted the desktop version of SEQ-16 to preserve that quality.

The design question wasn't:

"How can I show less?"

It was:

"Which information is worth keeping visible because removing it would increase context-switching?"

That became an important principle for the entire product.


03Designing the desktop cockpit

The desktop interface uses a three-column model inspired more by a hardware console than a conventional responsive web application.

The left side is about getting the kit and sounds into place.

The center is about global sound and mix shaping.

The right side is about pattern management, AI generation and output.

The goal wasn't to imitate hardware visually for nostalgia. I borrowed the hardware mental model because it supports a particular way of working:

The instrument remains visible while you work.

You don't have to repeatedly leave the pattern to change the context in which you're hearing it.

Within each instrument row, sequencing and sound shaping also stay together. The grid provides the rhythmic state; the track controls provide immediate access to volume, pan, pitch and decay/tone.

The result is intentionally information-rich.

It gives an experienced user a cockpit rather than a sequence of screens.

But density needs an escape hatch

A musician working deeply on a pattern doesn't always need the entire cockpit.

The master controls can collapse when the user wants more room for the sequencer, while essential global controls remain within reach.

This creates two useful modes:

Cockpit mode — broad context and access to everything.

Pattern mode — maximum space for the thing currently being edited.

Cockpit mode: full master controls panel visible beneath the sequencer, showing kit selector, EQ, effects, AI generation and export controls
Cockpit mode — master controls expanded.
Pattern mode: master controls collapsed, revealing additional instrument rows including Cowbell, Claves and the Slicer dual-deck, with only the thin VOLUME/TONE/TEMPO bar remaining
Pattern mode — master controls collapsed, more grid rows visible.

I wanted the transition between those modes to feel like changing the physical configuration of an instrument, not navigating to another application state.


04Recompacting the cockpit for mobile

Desktop: three-column cockpit layout with all 16 steps, per-track controls and master panel visible in a single view
Desktop — everything in one view.
Mobile: the same instrument reorganised into a scrollable step grid, transport controls, AI buttons, and DRUM KITS / MIXER / EXPORT tab bar at the bottom
Mobile — same instrument, different access pattern.

Below the mobile breakpoint, the desktop three-column cockpit disappears.

But I didn't create a second mobile implementation of the product.

Instead, the same functionality is reorganized into contextual destinations:

Drum Kits · Mixer · Export

The underlying state and behavior remain shared; what changes is how the user reaches the functionality.

This distinction mattered.

A separate mobile implementation would have meant maintaining two versions of the same workflows and potentially creating subtle differences in behavior between them.

The mobile interface therefore isn't a reduced version of SEQ-16.

It is a different access pattern to the same instrument.

What deserves permanent space?

Recompaction forced a more difficult question:

Which controls are important enough that I should never make the musician go looking for them?

I ended up keeping three categories in persistent mobile chrome:

Transport

Play/pause and live recording remain immediately available.

A drum machine shouldn't make the user navigate just to hear the result.

Master controls

Volume and BPM stay within immediate reach because they affect the entire musical context.

AI generation

This one took an iteration.

Initially, AI generation lived inside the Export drawer with other less-frequently-used functions.

Technically that was tidy.

UX-wise, it was wrong.

"Generate Variation" is one of the product's most distinctive actions. Requiring a drawer interaction before every generation interrupted the very loop the feature was intended to accelerate:

hear → change → generate → hear again

So I promoted it into persistent mobile chrome.

That was a useful reminder that information architecture should follow frequency and importance, not conceptual categorization alone.


05The grid was the real mobile problem

The sequencer itself presented the hardest constraint.

On desktop, all 16 steps can sit comfortably on screen.

On a phone, comfortable touch targets consume most of the available width.

I chose not to compromise touch-target size simply to preserve the visual illusion of a complete 16-step grid.

Instead, the mobile grid becomes horizontally scrollable.

The user sees a smaller window into the same sequence.

Mobile step grid scrolled to show steps 5 through 14, with partially visible steps at both edges indicating more content in each direction; active pattern steps visible across Kick, Snare and Conga rows
The mobile grid mid-scroll: steps 5–14 visible, with edges indicating more content in both directions.

Why not simply use mandatory snapping?

I experimented with the behavior of the horizontal viewport and found an important distinction between alignment and control.

Hard snapping made small exploratory movements feel like the interface was taking control away from the user.

So the grid uses proximity snapping rather than mandatory snapping.

The viewport tends to settle into useful positions without forcing every small movement into a predefined state.

During playback, the grid can follow the playhead in eight-step blocks so the active region stays visible.

But that introduces another potential conflict:

What happens if the user is manually exploring the grid while playback is running?

The answer was to temporarily suspend automatic following after a manual touch.

Playback continues underneath.

The user's direct manipulation wins.

This is a small interaction rule, but it reflects a broader principle:

Automation should yield when the user is actively expressing intent.

06When a tap becomes a swipe

The most difficult mobile problem wasn't visual.

It was deciding whether a finger gesture meant:

"Toggle this step."

or:

"Move across the sequence."

My first implementation tried to solve the problem by taking control of the touch interaction.

Pointer-down immediately captured the gesture and prevented the browser's default behavior.

It made individual taps reliable.

It also made horizontal scrolling effectively impossible.

Dragging across the grid to reach steps 9–16 caused the finger to toggle every pad it passed over.

The implementation was technically decisive.

The interaction was wrong.

The solution was to delay commitment

Instead of deciding what the gesture means when the finger goes down, the interface waits for more evidence.

A touch begins as a potential tap.

If the finger lifts on the same step it started on:

commit the tap.

If it moves to another step:

treat it as navigation.

This allowed native browser scrolling to remain in control of the horizontal gesture while preserving reliable step selection.

The rule became remarkably simple:

Start on a pad and finish on that pad: toggle it.
Move away: scroll instead.

I then extended the same model to expressive gestures:

  • Long press: ghost note
  • Double tap: double hit / flam

Those gestures use the original press position rather than the release position, so small finger drift doesn't move the action onto a neighboring pad.

This was one of the clearest moments in the project where a UX problem became simpler once I stopped trying to outsmart the platform.

I didn't need a more sophisticated gesture recognizer.

I needed a better definition of when intent had actually been expressed.


07Keep the musician in context

Desktop can keep per-track controls beside the sequencer.

Mobile cannot do that without consuming too much of the screen.

On mobile, Volume, Pan, Pitch and Decay/Tone become contextual controls attached to the selected instrument. Tapping the instrument label opens a bottom sheet.

The important decision was that the sheet is non-blocking.

The musician can continue interacting with the sequencer behind it.

Mobile per-track bottom sheet open for Low Tom, showing VOL, PAN, PITCH and DECAY sliders while the sequencer grid remains visible and interactive behind the sheet
The non-blocking bottom sheet: per-track controls open while the grid stays visible and tappable behind it.

A conventional modal says:

"Finish this task before returning to the thing underneath."

That model doesn't fit music-making.

The relationship between the parameter and the pattern being heard is the context.

So the interaction instead says:

Change the sound without leaving the musical context.

I also removed numeric value inputs from this mobile view in favor of larger sliders.

This sacrifices precision.

That was intentional.

On desktop, precise numeric manipulation is reasonable because there is enough space to accommodate it without compromising the rest of the interface. On a phone, preserving the same precision would add interaction cost disproportionate to its value.

The mobile interface therefore optimizes for:

fast adjustment over exact entry.


08Progressive disclosure without losing capability

The overall mobile strategy can be summarized as:

Access level Controls
Persistent Transport · BPM · Volume · AI
Contextual Volume · Pan · Pitch · Decay/Tone
Drawer-based Kits · Mixer · Export
Desktop-focused Advanced slicing

This wasn't about hiding functionality.

It was about controlling how much of the instrument competes for attention at any given moment.

The user still has access to the product's deeper capabilities; the interface simply stops asking them to carry the entire instrument in their head at once.


09Knowing what not to bring to mobile

Not every desktop interaction deserved a mobile equivalent.

The clearest example is the dual-deck Slicer.

The Slicer is designed around manipulating longer audio sources, navigating waveforms, selecting regions, dragging slices into instrument rows and working with comparatively large audio files.

Trying to reproduce that interaction on a phone created several problems at once:

  • waveform manipulation requires precision;
  • edge dragging and scrolling compete for the same gesture space;
  • drag-and-drop has no clean equivalent on a small touch surface;
  • larger audio files introduce additional memory and performance pressure.

Rather than ship a compromised version simply for feature parity, I explicitly excluded the Slicer from mobile and surfaced that limitation in the interface.

Mobile view showing the last instrument rows (Ride, Cowbell, Claves) followed by an italic cyan notice reading 'Crate Digger and Audio Slicer available on desktop'
The honest boundary: the Slicer isn't hidden — it's explicitly surfaced as a desktop feature.

That was an intentional product decision:

A feature is not automatically better because it exists everywhere.

Sometimes the better mobile UX is an honest boundary.


10The difference between an intentional cut and an accidental one

The Slicer was a deliberate exclusion.

Other desktop capabilities were not.

Mute, Solo, Clear, Fill, Clear All and Expand/Collapse All became inaccessible on mobile as a side effect of broader layout decisions—particularly the removal of the desktop title/instruction area where several of those actions lived.

That distinction matters.

There is a meaningful difference between:

"We decided this isn't important enough for mobile."

and:

"This disappeared because another design decision accidentally took it with it."

The latter is design debt, not product strategy.

I wouldn't hide that in a case study.

In fact, it is one of the more useful lessons from the project:

Responsive simplification can create invisible feature loss.

When an entire visual region disappears, everything attached to that region needs to be audited independently.


11Designing AI as part of the instrument

AI introduced a different UX question:

How do you add generative behavior to an instrument without making the musician feel like they're handing control over to a black box?

I treated AI-generated patterns as another starting point, not a separate destination.

A generated variation lands in the same editable sequencer representation as a manually created pattern.

The workflow is:

Seed → Generate → Hear → Edit → Humanize → Keep or reject

rather than:

Prompt → AI result → new mode

That distinction is important.

The AI doesn't replace the sequencer.

It feeds the sequencer.

A generated pattern becomes just another editable state of the instrument. The musician can immediately change individual steps, adjust the sound, alter timing or throw the variation away.

That preserves the musician's sense of authorship.

The principle is:

Use AI to increase the number of ideas you can explore, not to reduce the amount of control you have over the result.

12The product loop

Taken together, these decisions produced a simple underlying interaction model:

Create

Start from a kit, an existing pattern, a saved project, a custom sample or an AI-generated variation.

Sculpt

Edit individual steps and shape each sound with pitch, decay/tone, volume and pan.

Arrange

Use pattern banks and chaining to move beyond a single loop and build sections.

Export

Render WAV, stems or MIDI and move the result into a larger production workflow.

The interface is essentially a series of ways to keep that loop moving.

Whenever I introduced a feature, the useful question became:

Does this help the user move forward, or does it create another place they have to learn?

That became a more useful constraint than simply trying to minimize the number of controls.


13What I'd change now

SEQ-16 is a living product, so there are several things I would revisit.

Make feature loss explicit

I would deliberately bring Mute, Solo and Fill back into the mobile experience rather than allowing them to remain accidental casualties of the layout.

Their absence should be the result of a conscious prioritization decision, not a side effect.

Finish polymetric mode properly

The underlying mechanism exists, but the mobile experience currently doesn't expose it.

I'd either complete the interaction or explicitly decide that polymetric editing belongs to a larger-screen workflow.

Temporary states have a habit of becoming permanent, so I would rather make that decision explicit.

Explore a lighter mobile Slicer

I still wouldn't reproduce the full desktop Slicer on a phone.

But a read-only preview or simplified slice-selection experience could potentially let users discover material on mobile and defer precision editing to desktop.

That would preserve the intent of the feature without forcing the entire desktop interaction onto a smaller surface.

Revisit the first minute

As the product has accumulated capabilities, the UX risk has shifted.

The challenge is no longer simply whether SEQ-16 can do something.

It's whether a first-time user understands what to do next.

If I continued the project, I'd invest less in adding capability and more in making the first 60 seconds exceptionally clear.


14Takeaway

The biggest lesson from SEQ-16 wasn't about breakpoints.

It was about preserving intent while changing the way an interface is accessed.

Responsive design asks:

"How does this layout fit a smaller screen?"

Recompaction asks:

"What is the user actually trying to do here, and what is the smallest interface that preserves that task?"

That distinction led to almost every major mobile decision:

  • keeping transport persistent;
  • promoting AI generation into permanent access;
  • moving secondary controls into contextual sheets;
  • allowing the grid to scroll rather than shrinking its touch targets;
  • letting native scrolling win over aggressive gesture capture;
  • temporarily yielding automated playhead movement to direct manipulation;
  • excluding the Slicer rather than shipping a compromised version;
  • and identifying which missing controls were intentional versus accidental.

The most useful interaction rule came from the hardest problem:

Don't capture a gesture just because you can. Wait until the user's intent is clear.

That's a principle I can carry into any interface I design:

Preserve context, make intent easy to express, and let complexity recede until it is actually needed.