CleanPlays (iOS)
React Native

CleanPlays (iOS)

Royalty-Free Music Streaming App for Businesses

Overview

CleanPlays is a B2B background-music app that streams royalty-free, AI-generated music to businesses such as cafes, shops and salons, avoiding performing-rights fees while keeping venues on-brand. Built with Expo (SDK 54) and React Native on the new architecture, it delivers a full listening experience backed by a Go streaming API. Two B2B differentiators set it apart: sector-based curation and scheduled in-venue announcements.

What It Does

The app offers feed, discover, library, radios and mixes with a robust background audio engine, lock-screen controls and gapless auto-advance. Sector-based radios tailor music to each venue type, and scheduled TTS or uploaded announcements are injected into playback every N songs on day/time programs. Premium is handled via RevenueCat, with a metered free tier enforced by the backend. A key engineering win was diagnosing and fixing an HLS playback bug on iOS to make background streaming start reliably.

Tech Stack

React NativeExpoTypeScriptreact-native-track-playerZustandNativeWindRevenueCatGo (API)

Key Features

Full playback: custom queue, repeat and shuffle, lock-screen/now-playing controls, mini and full player

Background audio with next-track preloading via HTTP range requests

Sector-based radios and recommendations tuned to business types

Scheduled in-venue TTS and uploaded announcements injected into playback on day/time programs

RevenueCat premium subscriptions with a metered, backend-enforced free tier

Google and Apple sign-in with email verification and single-active-device sessions

Library: liked songs, playlists (with reorder and cover upload), followed artists and history

Pro CleanDash dashboard showing broadcast hours and savings vs. traditional music licensing

Gallery

CleanPlays (iOS) screenshot 1CleanPlays (iOS) screenshot 2CleanPlays (iOS) screenshot 3CleanPlays (iOS) screenshot 4

Technical Highlights

React Native 0.81 + Expo SDK 54 (new architecture) with react-native-track-player for background audio
Diagnosed and fixed an iOS HLS playback bug: a custom Expo config plugin patches SwiftAudioEx to observe AVPlayerItem.status and begin playback the instant an HLS item is ready
HLS-aware playback that detects .m3u8 streams, sets TrackType.HLS, and re-issues play after seeks to survive rebuffering
Zustand stores (player/auth/library) with module-level announcement-injection state and a re-entrancy guard against double-counting
JWT auth with automatic refresh-on-401 and a queued-request pattern during token refresh
RevenueCat integration hardened against entitlement-mapping mismatches, with the backend as source of truth
EAS build pipeline and App Store release

Key Achievements

01

Shipped the iOS app to the App Store as part of the end-to-end CleanPlays platform, built solo

02

Root-caused and resolved a native HLS auto-start failure that off-the-shelf libraries left unhandled

03

Delivered a reliable background-audio experience with gapless auto-advance and full remote controls

04

Built the sector-radio and scheduled-announcement features that differentiate the product for venues

05

Hardened auth and billing flows (token-refresh queueing, RevenueCat entitlement fallback) for production reliability

Impact & Results

Shipped as part of the CleanPlays platform (mobile + web + Go backend) built end to end at Group Taiga. It gives businesses a compliant, on-brand background-music solution in their pocket, live on the App Store.