The StudioMode Blog

Notes from the team building StudioMode. Product, music industry, AI, and the long road from "side project" to "the place artists go for beats."

The producer flywheel: closing the loop both ways
Demand queue + push notifications + RSS feed compose into a closed-loop system. Before this round the catalog only bent toward demand reactively; after it, both sides have ambient reasons to keep showing up. Eight steps, three different actors, zero direct coordination.
Read essay →
Hunting Now: how a search bug became a public demand queue
Chef tested with a brand-new account, searched "ebk jaaybo", got zero results. The next two scrapes ignored it. Tracing why turned into a P0 fix and four feature rounds — admin widget, empty-state rewrite, public /hunting-now page, dynamic OG card. Bug to flywheel in five rounds.
Read essay →
Velocity, twice: shipping the same idea to two different tools
Per-step velocity shipped on the drum sandbox in Round 143. Three rounds later it shipped on the piano roll's chord progression as a Dynamics row. Same primitive, same multiplier, same hash trick, two different surfaces — and the cross-tool transfer cost less than the original.
Read essay →
The drum sandbox grew up: from grid to instrument
The drum sandbox started as a 16-step grid. Twelve iterations later it has chord overlays, walking bass, kit swap, swing, save, random, shift, mute, and copy-share-link — and the URL hash from Round 106 still loads in the Round 141 sandbox without a single migration.
Read essay →
Flip the read: when one audio file has two right answers
The BPM detector says 70. The vocalist hears 140. Neither is wrong; they're locked to different pulses in the same audio. Once you see the pattern, it shows up everywhere — half-time vs straight, triad vs 7th, swung vs straight. Four toggles in the audio toolkit are all the same idea.
Read essay →
From scale detector to chord workshop
The piano roll started as a scale detector. Five rounds later it identifies chords by name, draws the keyboard shape, reads inversions as slash chords, lays out the full diatonic palette for any key, and toggles between triads and sevenths. One engine, five UI surfaces.
Read essay →
Round-trippable URLs: when saving is sharing
The drums tool and the piano roll both got Save buttons last week. The implementation took ~30 lines per tool because save/load is a strict subset of share/load when the URL hash is the canonical state. One serializer, two surfaces.
Read essay →
One scheduler, three layers, four kits
The /tools/drums sandbox grew from a 16-step grid into a full beat sketchpad: chord progression overlay, three bass modes, four drum kits — all driven by one Web Audio scheduler ticking every 25ms. Why parameter swaps were the cheapest path to four sound palettes.
Read essay →
The chord workflow on a single HTML page
Four rounds after the scale detector shipped, the piano roll now handles the full chord workflow: identify chords from notes (Jaccard + bass-priority tie-break), step through 8 progressions, auto-play through the Web Audio scheduler, and look up chords by name. Why bass-priority was the magic tie-breaker.
Read essay →
Three audio tools, four rounds, zero servers
Piano-roll scale detector, BPM + key analyzer, guitar tuner. All built in 4 build rounds. None upload anything. The algorithms (FFT, autocorrelation, YIN, Krumhansl-Schmuckler) and why no-server was the cheapest correct choice.
Read essay →
Four leaderboards, one cron: scaling a content engine off a single aggregate
21 build rounds. Four leaderboards. Three history archives. Eight share cards. One cron. The architecture pattern that made it cheap, and the trap I keep seeing teams fall into.
Read essay →
The cron piggyback: how we got 4 leaderboards out of 1 Vercel function
Vercel Hobby gives you 12 functions and 1 cron. We added 4 leaderboards anyway — by piggybacking idempotent snapshot RPCs on the existing daily-digest cron.
Read essay →
The duplicate-URL leak: how 6 canonical tags reclaimed our SEO juice
Six pages on StudioMode were eligible to be indexed under five different URLs each. Trailing slash, www, query params — every variant split the ranking signal. Six lines of HTML later, the bleeding stopped.
Read essay →
Why we built a leaderboard before we had a community
Most products bolt rankings on after they have critical mass. We did the opposite — and the leaderboard ended up doing the work of the community we hadn't built yet.
Read essay →
Ten essays in: what compounded
A short retrospective at the 10-post mark. Which essays drove signups, which got picked up, which were boring and necessary anyway — and the three traits that travel.
Read essay →
Three callers, one RPC: when to consolidate aggregation
Same client-side aggregation showed up in three different places. The migration to fix it was 60 lines of SQL and saved ~600KB of transfer per page load. The pattern, the trade-offs.
Read essay →
Why we rank producers by saves, not followers
Followers are vanity. Saves are intent. Building a producer leaderboard around the wrong metric ranks the wrong people — and what changes when you fix it.
Read essay →
The OG card factory: 17 share-cards, 1 Vercel function
Vercel Hobby caps you at 12 serverless functions. We render 17 different dynamic Open Graph cards. Here's the dispatcher, cold-start budget, and why we skipped @vercel/og.
Read essay →
100 days, 30 features: a building log
A retrospective on the 30 features shipped after StudioMode's v1. What hit (4 that compounded), what flopped (3 we'd skip), what surprised us (3 sleeper bets), and the meta-lesson about building in public.
Read essay →
How we shipped a content site on 12 Vercel functions
The Vercel Hobby plan caps you at 12 serverless functions. Here's how StudioMode fits a notification cron, a referral redirect, an OG image generator, an SSR page, and seven other endpoints inside that limit — and the tricks we used when the cap got tight.
Read essay →
What 5,000 saves taught us about how artists pick beats
Five thousand StudioMode saves later, the patterns are clear: artists don't pick beats the way producers think they do. Marketplace UX has been optimizing for the wrong behavior. Here's what the data actually shows.
Read essay →
Building the StudioMode scraper: 30 days, 3,000 beats, 10,000 quota units
StudioMode's catalog isn't licensed. We don't host audio. Every beat surfaces from a YouTube scrape that runs twice a day. This is the story of getting from "10 beats indexed" to "3,000 beats deduped and tagged" — including the night the catalog ceiling became a real ceiling.
Read essay →
How the StudioMode recommendation algorithm works (v8)
The For-You feed isn't magic. It's a stack of small, deliberately tuned signals — followed-producer boost, recency decay, key-match bonus, a guard against producer spam, and an exploration slot for the algorithmic equivalent of "look up." Here's everything that goes into picking the next beat.
Read essay →
Why I'm building "the Spotify of beats"
BeatStars works for producers. It's broken for artists. We can fix the discovery layer without disrupting the marketplace — and that's exactly the wedge StudioMode is built around.
Read essay →

Coming up