2026

Jammune

Jamming Partner · Music

A browser instrument for jamming with friends. Pick a key, hit a pad, play chords.

Next.js
TypeScript
Tone.js
Zustand
Tailwind
Paper Shaders
shadcn
Vitest
PlatformWeb · Mobile
My Role
Full-Stack Engineer
Jammune on desktop, a Cmaj7 pad glowing

The idea

Often times I would go on a trip and the evening would evolve into a jamming session. 4 out of 5 times we would be without a guitar or a Uke. But my friends and I were always with a laptop. Garage band is great but it doesn't really utilize a laptop fully to allow me to play accompaniment to a song. Most music software rely on you connecting a midi keyboard to play music or you transferring your exact strings and keyboard knowledge and press buttons on a screen that have the same layout as your instrument.

I wanted to build an instrument on my laptop. Thats what Jammune is really - an instrument. Jammune turns your keyboard into eight chord pads. Pick a key, and A S D F / Q W E R on your left hand become the eight chords of that scale. Hold a key with your right hand on the right side of the keyboard to colour the chord: minor, 7th, sus4, add9, bass notes, octaves.

It's built for jamming. Its built so you can close your eyes and play it on instinct - like a real instrument. That also means that there is a learning curve to build that intuition. But just like all instruments, once you get the feel for it, you can shut down your brain and let the music flow through you.

Chords are derived, not looked up

There's no table of "mode → chord qualities" anywhere in the code. A scale is just a list of semitone steps, and every chord is built by stacking every other note of it: degrees d, d+2, d+4, wrapping round the octave. The chord's name comes from measuring its intervals back to the root.

The nice part: harmonic minor's augmented III and diminished vii°7 just fall out of that. There are no special cases, and the whole music-theory core is pure TypeScript with zero dependencies, unit-tested with Vitest.

Pads that glow in the chord's colour

Close-up of a G7 pad glowing magenta with the bass glow underneath
Close-up of a G7 pad glowing magenta with the bass glow underneath

Every modifier has its own colour: indigo for minor, orchid for 7th, magenta for dom7, cream for add9. A sounding pad glows with a WebGL mesh gradient (Paper Shaders) tinted by whatever you're holding. Stack modifiers and the colours blend. Change one mid-chord and the pad morphs over 700 ms instead of snapping.

Desktop with dominant 7th chords glowing magenta
Desktop with dominant 7th chords glowing magenta

The key legend lights up in the same colours, so it teaches you the mapping while you play.

The keyboard legend with lit modifier keys, and the key/mode/sound wheels
The keyboard legend with lit modifier keys, and the key/mode/sound wheels

On a phone it's a launchpad

Jammune held sideways: modifier touchpad on the left, pads on the right
Jammune held sideways: modifier touchpad on the left, pads on the right

Phones don't have a keyboard, so the layout changes completely. Hold the phone sideways and you get a launchpad: pads on the right, and a two-axis modifier touchpad on the left. Right adds the 7th, down makes it minor, top-left is sus4. Slide your thumb while a chord rings and it changes live. Everything is multi-touch, so one hand colours while the other plays.

Jammune upright on a phone, Dom7 held
The mode picker drawer open on a phone

Key, mode and sound live in bottom-sheet drawers (shadcn) behind little buttons in the header, each with a scroll wheel.

Stack

Next.js · TypeScript · Tone.js · Zustand · Tailwind v4 · Paper Shaders (WebGL) · shadcn/vaul · Vitest