Personal project — tvOS 26 · iOS 26

SoundingCloud

The SoundCloud client I wished existed on my Apple TV.

I wanted a waveform I could actually read from the sofa, comments pinned to the exact second someone left them, and a DJ mixer that isn't a toggle labelled "crossfade." SoundCloud doesn't ship any of that for tvOS, so I built it — for one Apple TV, one iPhone, and nobody else's App Store.

  • tvOS 26
  • iOS 26
  • SwiftUI
  • AVAudioEngine
  • No backend
Home Search Library Settings
1:42 / 3:58
Coastline
Metro Boomin

Every pixel above is CSS & SVG — there are no real screenshots on this page.

What's actually in it

Every one of these shipped.

This page is a mockup. The app underneath it isn't — everything below is running on a real Apple TV in a real living room.

Offline downloads

Pull tracks down for flights and dead spots. Storage management clears the oldest downloads before it fills the tvOS box, so you never have to think about it.

Live Activities & Lock Screen

Full transport controls and now-playing art on the iPhone Lock Screen and Dynamic Island, kept in sync with whichever device is actually playing.

Share extension

Share a SoundCloud link into SoundingCloud from Safari, Messages, anywhere — it queues straight into the TV without opening the app first.

A real Top Shelf

The Apple TV home screen shows recently played artwork, not a static poster image someone forgot to update.

Spatial & surround output

Multichannel output for a system that deserves it — a Sonos Arc, a proper home theatre setup — not stereo squeezed down a TV speaker.

Built solo

One developer, one Apple TV. SwiftUI, AVAudioEngine, Network.framework, and a lot of trial and error — no team, no roadmap meeting.

Look at the music

A waveform worth looking at

SoundCloud's amplitude waveform is the best part of the web player, and the first thing most third-party clients throw away for a plain progress bar. SoundingCloud keeps it — full detail, scrubbable from across the room, with every timed comment pinned to the exact second it was posted.

Now Playing

Midnight Run — Fred again..

3 timed comments
1:47 5:08

"Search for this comment"

DJ sets on SoundCloud live and die by their comments — somebody always asks "what's this transition into??" at 3:12, and somebody else always answers with a track name buried forty minutes later. Focus a comment like that and SoundingCloud can search it straight away, so you're not pausing the set to dig through a browser on another device.

Two decks, one Apple TV

A DJ mixer, not a toggle

Most SoundCloud clients treat mixing as crossfade-and-hope. SoundingCloud runs a real two-deck mixer on AVAudioEngine — crossfader, three-band EQ, a filter, loop points, jog wheels, and an auto-mix that queues the next track in the queue on time.

Auto‑mix
AB
Filter

Drive it from your pocket

The iPhone becomes a second control surface — a skeuomorphic glass CDJ with a weighted jog wheel and a channel strip that feels like it's bolted to a real deck. Mix from the sofa, or from across the room while the TV does the talking.

No account of mine to lose

Sign in once, over your own network

There's no SoundingCloud backend, no database of users, nothing of mine to breach. Signing in is a conversation between your phone and your TV, on your own local network.

  1. 1

    The TV shows a pairing code

    A session ID, a base64url shared secret, and Bonjour service info — encoded as one QR code.

  2. 2

    The phone scans & signs in

    The SoundingTV iPhone app opens the SoundCloud sign-in page. With both apps active it discovers the Apple TV automatically; the QR code remains a fallback.

  3. 3

    The token beams over the LAN

    HMAC‑SHA256‑signed with the shared secret from the QR, verified, then straight into Keychain. Five‑minute window, no server of mine in between.

Playback follows you

Start a track on the TV, pick the phone up on the way out and it keeps playing on headphones — or come back and land on the sofa, and it picks up on the big screen. Same session, same position, no restart, no scrubbing to catch up.