Indeez
Case study · 2026 to presentStreaming pays emerging artists almost nothing and gives them no way to reach the people listening. Indeez answers that with the direct-to-fan economics of independent music marketplaces and the personality of mid-2000s social media. Streaming is the shop window rather than the business: artists put music up to be discovered, then earn from tickets, vinyl, cassettes and merch. I managed recording artists during the first wave of artist-led social media, and saw what happened when a band could own its corner of the internet.
That shape makes specific engineering demands. Discovery is a swipe that has to produce sound immediately, which rules out loading audio at the moment of the swipe. Profiles have to be personalised deeply enough to feel like someone's own page rather than a theme. And one person has to act as themselves, as their band, as the label they help run and as the venue they book, without four logins. The goal is not more time on the platform. It is to turn discovery into fandom, and get people off their phones and into rooms where music is happening.
- 01The discovery player: Built first as a standalone test app, so the hard part could be solved away from the main codebase. The requirement is simple to state and unforgiving: a swipe has to produce sound immediately, which means never loading audio on the swipe itself.
- 02Two warm decks: Two audio engines run at once. The active one is audible; the other already holds the next track loaded at volume zero, so advancing is a role swap rather than a load. Instrumented in development to measure swipe committed to first audible frame.
- 03Races, not just happy paths: Every load carries a token. A slow resolve that returns after the listener has already swiped on is discarded rather than interrupting whatever is playing now. The same guard covers lock screen artwork.
- 04Player skins: A skin is a look over one shared controller: a default, a vinyl deck, and an animated cassette transport. Chosen and remembered per profile, which keeps the personalisation idea in the player rather than only the profile page.
- 05One login, many identities: A personal profile plus artist, label, venue and record store Pages, each with owner, admin, editor and viewer roles and invitations. Switching identity is an app-wide lens. I architected the model, my team delivered the backend, and I built the front end around it.
- 06A feed the listener controls: People choose whether the main feed shows algorithmic recommendations or only the people they follow who follow them back. Privacy, blocking and reporting are built to current social norms rather than retrofitted.
- 07Leading the engineering: Setting the architecture and directing two engineers, one on the front end and one on the backend, while building the player and the identity layer.
With engineers Abhay Gondesi and Xinya Wang.
The optimisation I refused
Preloading the next track needs its stream URL early. On this platform, resolving a stream URL logs a play. Prefetching would have inflated artists' play counts, on a product that exists because artists are paid badly and counted carelessly. So the prefetch resolves nothing it is not about to play, and the play is recorded when audio actually starts.
Internal TestFlight. App Store submission is weeks away.
