Nahuel D'Elias · Product engineer

(W01.5)vers1ons · 2025Shipped

Distribution

Building our own distribution, so remixes, royalties and data stay inside vers1ons.

Shows

  • Backend, led
  • Product, led
  • Frontend, led
Role
Owner, end to end
Stack
Next.js · Inngest · Postgres · Redis · Socket.IO · Object storage · ffmpeg
Status
In production
The release page for "Night Swim" after submitting: its cover art, Pending release, and the ISRC and UPC it was issued.
From source pick to pending release · muted2:11

The decision

Remixes licensed on vers1ons had to leave for an outside distributor, and the royalties and data went with them.

Chose
Bring distributors in as partners: releases go out through their pipelines, and the data and royalties always come back through vers1ons.
Rejected
Sending artists elsewhere, where the royalties never come back, or becoming a distributor, and a competitor to our partners.
Cost
About ten months, learning each partner's rules first, and every failed delivery is ours to catch and fix.
How it worksFrom one click to every storeNothing is written until every check passes. After that, the release is one Inngest function, and every hop is a step that can resume on its own.

From one click to every store

Release wizardTrack · Contributors · ReleaseCover · Review
Refuses before it writesownershiprights scope from the licenserelease timingpayout readinessnothing already in flight
One transaction · Postgresrelease jobrights grants up the chainwhat gets dispatched
Durable job · Inngest
  1. 1Issue release identifiers
  2. 2Set up the release
  3. 3Stage audio + art
  4. 4Assemble metadata
  5. 5Deliver to stores
  6. 6Wait for confirmation
partnerIdentifier registryissues the codes stores require
Object storagenormalized audiocover art
partnerDelivery partner Spotify, Apple Music, TikTok…
Live statusevery step a live channelthe wizard updates, no polling
  1. ready · press run, or hover any part of the system

Problem

Every remix that left for an outside distributor took its royalties and its data with it.

vers1ons licenses the right to remix. But to get a remix onto Spotify or Apple Music, artists had to take it somewhere else. Outside distributors know nothing about the license chain, so credits came out wrong, the original artist dropped off, and the royalties never came back through us.

To be worth more as a company, we needed to keep remixes, royalties and data inside vers1ons, and to pay every contributor down a chain of remixes, from the original to the sixth version and beyond.

What I did

I owned distribution end to end, from the partner calls to the screens.

I worked with our partners to learn how distribution actually works behind the scenes. Then I built our own system around one delivery partner, made so others can plug in: one Inngest function that takes a release from submission to every store, blocking for individual stores that follows each license, and royalty routing that pays everyone in the chain.

I designed and built the wizard too. Contributors, splits and metadata are hard to explain, so I turned them into steps an artist can get through without knowing any of it.

The flow, step by step

14 steps, one screen at a time.

  1. The source step.
    01Pick the sourceStart from a brand-new upload or a track you already licensed. A licensed track brings its listing's audio and details with it, so there's less to type and nothing to contradict.
  2. Track setup with the waveform preview picker.
    02Track detailsPick the store preview by dragging across the real waveform; stores play that 30-second clip before purchase. Choose none, and stores pick their own.
  3. Track setup, audio processed.
    03Audio checkedThe upload is checked and normalized before you go on, so a file a store would reject never gets that far.
  4. Contributors, locked from the listing.
    04ContributorsWhen the track comes from a published listing, its contributors arrive locked from the signed split sheet. The release can't contradict the license.
  5. Splits for master and publishing.
    05SplitsMaster and publishing each stay at 100% while you edit. Next stays greyed out, and says why, until both add up.
  6. Release details.
    06Release detailsDate, label, copyright lines, territories and pricing in one step. Errors read as sentences the artist can act on, not a partner's field names.
  7. The store picker.
    07StoresStores are grouped by delivery route. Some only travel together, so the picker groups them instead of offering switches we can't honor.
  8. The cover art step.
    08Cover artThe art's requirements sit beside the drop area: what the image can't contain, and the sizes stores accept.
  9. Review and submit.
    09ReviewThis is how the release will appear in stores.
  10. The attestations, all checked.
    10AttestationsWhat the artist confirms before anything is sent. Distribute stays disabled until every box is checked.
  11. Submission received.
    11SubmittedFrom here a durable job takes over: codes, staging, delivery, confirmation. Each step can resume on its own.
  12. The release page, processing.
    12Live statusThe release page updates as the job runs, with no polling: processing, then pending release once the codes are issued.
  13. The release's codes and credits.
    13Credits on the releaseThe issued codes, credits and splits on the release, as the stores receive them.
  14. A failed release with Fix & retry.
    14When delivery failsA failed delivery says why and offers Fix & retry. A pending release shows what can still change.

    What changed, and why

    The same part of the product in an early build and today.

    1. Starting a release

      In November 2025 a release began as an empty project shell: name a project, then a release, then a track. Most remixes are one track from one license, so today it starts from the track, with a shortcut from a licensed listing.

      An empty "Choose project" step: new project or existing project.
      Before · Nov 2025An empty "Choose project" form.
      The first step today: original work or licensed version, new upload or a listing.
      Now · Oct 2026A new upload or a licensed track.
    2. Track details

      The long form asked everything up front, including whether this was a remix, which the license already knew. Now the listing fills in what it can, and the form keeps what only the artist knows, like the preview clip.

      A long track form that starts with "Is this a remix?"
      Before · Mar 2026A long form that starts with "Is this a remix?"
      Track setup today, filled from the listing, with the waveform preview picker.
      Now · Oct 2026Filled from the listing, preview clip on the waveform.
    3. Credits

      Typing credits by hand let a release disagree with the license it came from. Now contributors get their own step, and when the source listing is published they arrive from its signed split sheet, locked.

      Track credits typed in by hand, one artist at a time.
      Before · Jul 2026Every credit typed in by hand.
      Contributors and splits arriving locked from the license.
      Now · Oct 2026Contributors and splits arrive locked from the license.
    4. On a phone

      The phone flow was the desktop one, squeezed, in small caps. Today the same steps ask one plain question per screen, with touch targets built into the components.

      "Set up the project shell" on a phone, in small caps.
      Before · Nov 2025"Set up the project shell", in all caps.
      The first step on a phone today.
      Now · Oct 2026One plain question to start.
    5. Library

      One card per song, with no states. As distribution shipped, releases, scheduled, pending, drafts and archived became real states, all on one set of tabs and rows.

      The library with one song card.
      Before · Nov 2025One song card, no release states.
      The library today with releases, scheduled, pending, drafts and archived.
      Now · Oct 2026Releases, scheduled, pending, drafts and archived.

    Reliability

    Every failure we've seen in production, we caught and fixed.

    Over 245 unit tests, plus tests that try to break the endpoints on purpose. Metrics, tracing and a playbook for when something goes wrong. Our test releases in production have found real bugs, and we’ve fixed and addressed each one. We continue to do so.

    Outcome

    Live in production: a remix no longer has to leave vers1ons to reach the stores.

    Beta users and remix buyers release straight to stores from vers1ons, and labels distribute on behalf of their roster. Every release’s credits and splits stay with us, so royalties can follow the chain back to the original artist.

    116 PRs over about ten months: nine checks before any write, seven durable steps, one transaction.

    Showcase content. Artwork belongs to its respective owners. Artist names, prices and royalty figures are fictional, and no affiliation is implied. Recordings come from an isolated local copy of the product running seeded data; the delivery to stores is staged.