Skip to content

In progress

Exploring

ShareList

Friends on different music services still can't share a playlist the other person can play. ShareList is the layer in the middle — matching tracks, not playing them.

Desktop PWA
Phone

A Spotify playlist sent to someone on Apple Music is usually a screenshot. ShareList is the layer in the middle. Each person keeps their own playlist on their own service. The ShareList is what they share.

Connect a service, pick a playlist, invite a friend. They link a playlist from their side. Sync copies missing tracks into each linked playlist when a match exists; songs that only live on one catalog stay put. It is not a player and it does not host audio.

The client is a PWA. Install it and ShareList is its own window — the dock on a laptop, the home screen on a phone — not a tab. Standalone display, a service worker, Apple icons and splash screens. Same Vite build on both.

Spotify, Apple Music, and SoundCloud are wired today. YouTube Music is reserved in the schema. Tokens live on the server, not in the browser. The frontend talks only to our API; the API talks to the vendors.

This one is still being explored. The hard part is matching catalogs and writing back safely — not another set of screens.

What this shows

The kind of work this is.

  1. Several vendors, several auth models

    Redirect OAuth, Apple MusicKit in the page, OAuth 2.1. Tokens stored server-side. The product has to live with how each vendor actually works.

  2. A real boundary

    React on one deploy, Express on another, Supabase for auth and Postgres. The browser never talks to Spotify or Apple directly.

  3. It installs like software

    A PWA with standalone display, a service worker, and Apple home-screen icons and splash screens. People keep it in the dock or on the phone without an app store.

  4. One repo, two ships

    A monorepo that deploys as two Vercel projects, with CI in between. Web from git; the API typechecked and transpiled before it goes out.

  5. Knowing what to leave out

    No player, no hosted files, no replacement for the services people already pay for. The work is the sharing layer.

Underneath

  • React
  • Vite
  • PWA
  • Express
  • TypeScript
  • Supabase
  • Vercel
  • Resend

This is the kind of work we take on — design it, build it, put it in someone’s hands. If that’s useful, say hello.

← What we’re working on