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.
- woof-editor
The markdown editor, built by Lightning Jar.
- barkdown and marked
Turn markdown into pages, with footnotes.
- DOMPurify
Cleans anything rendered from user text.
- PDFKit and pdf-lib
Make the PDFs: charts, notes and sheet music.
- PDF.js
Draws the first page of an attached PDF as its thumbnail.
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.
- Vercel AI Gateway and the AI SDK
One door to the models, so no key of ours sits with any one provider.
- Gemini, Claude and Kimi
Gemini listens to a close-call time signature, Claude reads transcribed notes, and Kimi turns a line of text into a beat or a chord progression.
Running it
Hosting, secrets, monitoring and the checks every change passes.
- Vercel
Hosts the app, its background jobs and the daily digest.
- 1Password and varlock
Every secret lives in 1Password and is loaded at build and run time; none in files.
- Sentry
Tells us when something breaks.
- Vercel Analytics and Speed Insights
Page counts and speed, without cookies.
- GitHub Actions, Vitest and Playwright
Tests, type checks, lint, spelling, dead-code and house-rule checks, secret scanning and a code review on every change.
Built by Lightning Jar, a small web studio, as a side project for its own bands.