Aro Music

An Android music app combining local playback, YouTube Music discovery, and Spotify playlist imports. Kotlin and Compose power the app, with a Next.js companion website.

Aro MusicClick to zoom
Role
Android & web developer
Timeline
Active development
Status
Live beta

Built with

  • Kotlin
  • Jetpack Compose
  • Media3
  • Room
  • Hilt
  • Ktor
  • Next.js
  • TypeScript

The brief

Local songs and playlists from different services need a consistent listening experience. Aro brings library browsing, online discovery, and imported playlists into one Android app.

My work spans Spotify connection and playlist-loading refinements, home-feed behavior, genre discovery, app updates, release validation, and the companion website. Aro builds on PixelPlay, Meld, and InnerTubeX, with their credits retained.

Implementation notes

  1. Load playlists progressively

    Playlist titles and source counts appear before all tracks finish matching. Playable tracks arrive in order, and complete snapshots stay fresh for six hours to avoid repeating the same work.

  2. Keep the feed stable

    Recommendations remain cached when a track changes. Playback and artwork colors update independently, while pull to refresh requests new discovery content.

  3. Separate catalog and playback

    Spotify provides metadata and playlists. Aro matches tracks to YouTube Music for playback and creates local import copies, so source counts and playable counts can differ.

  4. Validate the release artifact

    The development workflow checks unit tests, emulator behavior, signing, and native alignment. The signed APK is also checked on a physical phone.

Current result

A development prerelease with recorded local and online playback checks, authenticated Spotify playlist loading, and a responsive app website. The release record includes 246 passing debug and 246 passing release unit tests for the genre and update follow-up.

The listening experience

Browse songs, artists, albums, favorites, and playlists from the phone's local library. Search YouTube Music for online discovery, open related-song queues, or connect Spotify to browse account playlists and liked songs. Lyrics, listening history, and an equalizer sit within the same app.

Home separates recently played songs, pinned speed dial tracks, daily mixes, and discovery shelves. Artwork colors carry across the player, navigation, and backgrounds. Loading placeholders reserve shelf space while recommendations arrive.

Architecture and service boundaries

Jetpack Compose powers the interface, Media3 handles playback, Room stores local data, Hilt supplies dependencies, and Ktor supports network requests. The repository separates the phone app, shared functionality, and adapted InnerTubeX sources.

Spotify connection uses an in-app sign-in page and a saved session. Playlist imports become editable local copies. Removed, restricted, or unmatched songs can reduce the playable count, and changes to the original playlist do not automatically synchronize.

A companion website with usable interactions

The Next.js website uses real app screens and Aro's rounded typography. Visitors can switch between previews with keyboard-accessible buttons. Selection changes are announced through a live region; light and dark themes persist locally.

Reduced-motion preferences disable scrolling effects and movement. Native question disclosures and direct release links keep the main information accessible without relying on animation. The mobile menu restores focus when closed with Escape.

Current scope

The phone app requires Android 11 or newer. Physical validation is recorded for a Samsung ARM64 phone, with selected emulator checks on API 30 and 36. Broader device and optional-provider coverage remains ongoing. Google Drive is disabled pending OAuth setup, and Wear OS is outside the current phone validation scope.

Aro retains the credits and notices for its upstream projects. Component licensing remains unresolved for the combined app, as documented in the license status. The release checklist records what has been tested and what remains.

"You have a right to perform your prescribed duty, but you are not entitled to the fruits of actions."
Bhagavad Gita

Design by SahilCodex
© 2026. Built with hands.