Stem Shovel wordmark
Stem Shovel App
Beta

Built with

Stem Shovel is open source and made mostly of other open-source work. This is the list, for the curious and for anyone who wants to run their own copy. The code is on GitHub.

The app

A web app, so it runs in the browser you already have.

  • SvelteKit

    The framework: pages, routing and the server in one place.

  • Svelte 5

    The user interface, compiled to small, fast code.

  • TypeScript

    Every line is typed, front and back.

  • Vite+

    Builds, tests, linting and formatting from one tool.

  • UnoCSS

    Utility styling, generated only for what the pages use.

  • Phosphor Icons

    The icon set.

  • Noto Sans, Serif and Mono

    The typefaces, chosen to read well at small sizes, served by Bunny Fonts (no tracking).

Sound

Playback, recording, the instruments and Dawn happen in the browser; conversion happens on the server.

  • Web Audio API

    Plays every stem in sync from one clock, with the faders, mute and solo; the piano, drum machine, chord player, looper and Dawn's tracks and effects are built on it too.

  • MediaRecorder

    Records ideas and demos straight from the microphone.

  • AudioWorklet

    Captures the looper's loops and Dawn's takes sample by sample, lossless and lined up with the measured latency.

  • Web MIDI API

    Lets a MIDI keyboard or pad play the piano, the chord player and the drum machine, and record into Dawn's MIDI tracks.

  • FFmpeg

    Makes the streaming renditions, the mixes and the downloads.

  • Groovie's samples

    The drum machine's Acoustic and Room kits: public-domain (CC0) one-shots from Maxime Chevalier-Boisvert's beat sequencer.

  • Salamander Grand Piano

    The piano's Grand Piano: Alexander Holm's recordings of a Yamaha C5, CC BY 3.0, in the mp3 subset Tone.js publishes.

  • Finger Bass YR

    The piano's Electric Bass: Andrea Biasior's recordings of a Yamaha RBX for the FreePats project, CC0 public domain, twelve notes shifted by octaves.

  • Spanish classical guitar

    The piano's Acoustic Guitar: Roberto's 2008 recordings of a Spanish classical guitar for the FreePats project, CC0 public domain, forty-eight notes.

  • FreePats Electric Guitar FSBS (direct)

    The piano's Electric Guitar (direct): a Fender's raw bridge-pickup signal recorded through an instrument input for the FreePats project, CC0 public domain, nineteen notes; the Practice Amp's demo instrument.

  • Jester's Brutal and Emerald Packs

    The Practice Amp's captured guitar cabinets: Bastian Karschewski's impulse responses of a Marshall 1960AX with Greenbacks and a 4×12 with Vintage 30, Rockdriver Jr and DV-77 speakers, CC0 public domain. The amp's own cabinets are synthesized.

  • Fifths, the chord player

    The Chord Player's circle of fifths grew out of Kevin's earlier instrument, itself inspired by Quinn Raymond's Q-RAY chord player, with the circle's SVG after Eric Coleman and Håken Lid.

  • Basic Pitch

    Spotify's open-source model that turns a recorded idea into notes.

  • TensorFlow.js

    Runs that model.

  • Verovio

    Engraves transcribed notes as sheet music for the notation PDF.

  • Our own code

    Tempo, key and time signature from the stems, the tuner's pitch detection, the synth voices and the electronic drum kit, the effects, and the MIDI files Dawn reads and writes, all written for Stem Shovel.

Data and files

Where songs, stems and settings live.

  • Turso

    The database (SQLite, hosted).

  • Drizzle

    How the app talks to it, with migrations kept in the repository.

  • Vercel Blob

    Stores the audio files, private ones behind signed access.

  • Upstash Redis

    Rate limits and short-lived state.

  • IndexedDB

    Keeps the looper's loop and the Idea Recorder's and Dawn's takes in your browser while they wait to upload, so a dropped connection loses nothing.

  • fflate

    Zips the stems for a download, in the browser.

  • Valibot

    Checks every form and request before it touches the database.

Accounts and mail

Signing in, staying safe and hearing from us.

  • Better Auth

    Accounts, sessions, two-factor sign-in and passkeys.

  • Resend

    Sends the invitations, verification and notification email.

  • node-qrcode

    Draws the code an authenticator app scans when two-factor sign-in is set up.

Writing

Charts, lyrics, notes, the docs and this blog.

Optional AI

The song analysis asks a model only when an account turns that on; the beat and chord generators ask one when you ask them. Never your recordings without asking.

Running it

Hosting, secrets, monitoring and the checks every change passes.

Built by Lightning Jar, a small web studio, as a side project for its own bands.