Damnanuj
Pakhi Tunes app icon

Pakhi Tunes

Free music streaming with nearby sessions

Version 1.2.0

4.6

5 reviews

103

Downloads

Music & Audio
4.6
103Downloads

Screenshots

About this app

Pakhi Tunes helps you discover and play music for free — from mood-based genres and new releases to quick song search. Build your library with favourites, downloads, and recent plays.

What makes it different: Nearby Listening. Scan for people playing music around you, join their session, and listen in sync — or share what you're playing so others can tune in.

Use the app as a guest or sign in to keep favourites and history synced across devices.

Overview

Pakhi Tunes is a full-stack mobile music streaming application built with React Native and Expo. It combines catalog discovery, a persistent audio player with queue management, offline downloads, user authentication, and a unique Nearby Listening feature that lets users discover and join real-time listening sessions with people around them.

The project spans two repositories: a React Native mobile app and a Node.js/Express backend with MongoDB and Socket.IO.

From search and favorites to background playback and OTA update dialogs, Pakhi Tunes demonstrates end-to-end product thinking — architecture, API design, real-time sync, and production deployment workflows — as part of my learning portfolio.

The problem

Building a credible music app as a portfolio project requires more than a UI mockup. Streaming apps demand persistent background playback, offline support, authenticated user state, and responsive discovery experiences — all on mobile hardware with strict OS constraints.

I also wanted to explore a feature rarely seen in indie projects: social, location-aware listening. Coordinating playback state between a host and multiple listeners in real time, while respecting privacy and battery life, adds meaningful engineering depth beyond a standard CRUD app — see challenges & solutions for how this was tackled.

The goal was to create a case study-worthy project that proves ability across mobile, backend, databases, and real-time systems — while staying clearly educational and non-commercial.

The solution

Pakhi Tunes uses a mobile client and backend API architecture. The mobile client handles playback via react-native-track-player, state via Zustand and React Query, and real-time nearby sessions via Socket.IO. The Express API provides REST endpoints for auth, catalog, favorites, history, and downloads metadata.

MongoDB stores user data, guest sessions, favorites, play history, and app configuration. Song metadata is scraped from external APIs on the backend, then normalized and shaped into the response format the mobile app needs.

Technologies

Mobile

React NativeExpo 54Expo RouterTamaguiZustandTanStack React Queryreact-native-track-playerexpo-file-systemFirebase AuthGoogle Sign-In

Backend

Node.jsExpressMongoDBMongooseSocket.IOJWTbcryptnode-cronFirebase Admin

Infrastructure

Render (API hosting)EAS Build & OTA updatesGitHub Releases (APK distribution)

Features

  • Music discovery

    Browse genres, top artists, new releases, albums, and songs. Full-text search across the catalog with artist and album detail pages.

  • Persistent audio player

    Background playback with lock-screen controls, mini player, full player UI, queue management (play next, reorder, shuffle, repeat), and Up Next sheet.

  • Nearby Listening

    Location-based radar to discover nearby hosts, opt-in discoverability, join live sessions, and sync play/pause/seek/track changes in real time via Socket.IO.

  • Offline downloads

    Download songs in 96/128/320 kbps quality using resumable downloads. Play downloaded tracks without network connectivity.

  • Authentication & guest mode

    Email/password and Google Sign-In. Guest mode with usage limits (downloads, favorites, history, listening time) and seamless conversion to registered accounts.

  • Library & sync

    Favorites, play history, downloaded songs, and artist collections. Bulk sync of favorites and history to the backend for logged-in users.

  • OTA updates

    Remote app config drives soft and force update dialogs with version-aware release notes fetched from the backend.

System architecture

The system is designed as a React Native mobile app and Node.js backend sharing a single API. The mobile app communicates over HTTPS for REST and WebSocket for nearby listening.

Mobile client (React Native + Expo)

Expo Router navigation, Tamagui UI, Zustand stores, React Query data fetching, react-native-track-player for background audio, expo-file-system for offline downloads, Firebase for Google Sign-In and push notifications.

Backend API (Node.js + Express)

RESTful routes for auth, catalog, favorites, history, guests, and releases. Scrapes external music APIs and shapes song, album, and artist data for the app. Socket.IO server for real-time nearby session sync. Cron jobs for guest cleanup and session expiry.

Database (MongoDB)

Stores user accounts, guest sessions, favorites, play history, nearby active sessions, app releases, and app listing data. Song catalog data is scraped via external APIs and processed on the backend rather than stored as a full music library.

Database design

MongoDB stores user-generated and operational data. Songs are scraped from external APIs on the backend, then normalized, enriched, and returned in a consistent shape for search, playback, and library features.

User

Registered accounts with roles, discoverability, ban status, and auth providers.

Guest

Anonymous device tracking with status lifecycle and listen-time aggregation.

ActiveSession

Nearby host sessions with GeoJSON 2dsphere index and TTL expiry.

Favorite

Per-user song favorites with bulk sync support.

PlayHistory

Per-user play history with bulk upsert endpoints.

AppConfig

Live update flags, force-update copy, and release note sections.

AppRelease

Version history with publish/archive workflow.

AppListing

Public app store-style listing with download counts.

AppReview

User-submitted reviews for the app listing page.

API design

The REST API follows resource-oriented routing with JWT authentication for protected endpoints. Socket.IO handles real-time nearby session events separately — see challenges & solutions for how playback sync was solved.

Auth & users

  • POST /auth/register, /auth/login, /auth/google
  • GET /auth/me
  • PATCH /users/me/discoverable

Music catalog

  • GET /songs/search, /songs/:id
  • GET /top-artists, /albums, /genres, /new-releases
  • Backend scrapes external APIs and shapes catalog responses

User library

  • CRUD /favorites (+ bulk add)
  • CRUD /history (+ bulk upsert)

Nearby listening

  • GET /sessions/nearby (geo query)
  • POST/PATCH/DELETE /sessions (host management)
  • Socket.IO: host:start/play/pause/seek, listener:join/leave

App listing

  • GET /app-releases (public)
  • GET /apps/:slug (listing + reviews)

Challenges & solutions

Real-time nearby playback sync

Problem: Keeping host and listener players in sync across play, pause, seek, and track changes — while handling network drops and late joiners.

Solution: Socket.IO event protocol with explicit host/listener roles, session state broadcast on join, and react-native-track-player seek/play commands driven by server events.

Geo-based session discovery

Problem: Finding nearby active sessions efficiently without draining battery or exposing precise location.

Solution: MongoDB 2dsphere index on ActiveSession with $near queries, opt-in discoverability flag, and 1-hour TTL on stale sessions.

Background audio on mobile

Problem: OS-level restrictions on background playback, lock-screen controls, and media notification handling on Android and iOS.

Solution: react-native-track-player with custom dev client, UIBackgroundModes for iOS, and careful notification tap handling to route back to the player screen.

Guest-to-user conversion

Problem: Tracking anonymous usage with limits while allowing seamless upgrade to a registered account without losing data.

Solution: Device ID-based guest records with status lifecycle (active → converted), usage counters, and merge logic on signup.

Remote update management

Problem: Coordinating semver-based force updates, soft update prompts, and release notes across app versions without app store redeployment.

Solution: AppConfig + AppRelease collections with publish workflow, version policy summary, and client-side semver comparison driving update dialogs.

Optimizations

  • React Query caching and stale-while-revalidate for catalog data to minimize redundant API calls.
  • Bulk sync endpoints for favorites and history to reduce round-trips on login.
  • Resumable downloads via expo-file-system to handle interrupted network conditions.
  • Zustand selectors for granular player state updates without full-tree re-renders.
  • GeoJSON 2dsphere indexing for sub-millisecond nearby session queries.

Performance highlights

1.1.0

App version

Latest stable release

15+

API route groups

REST + Socket.IO events

3

Download qualities

96 / 128 / 320 kbps

1 hour

Session TTL

Nearby session expiry

Version history

Version 1.2.0LiveDownload v1.2.0

What's new

  • Playlists — Create, edit, and delete your own playlists. Add or remove songs, sort them, and manage everything from the new Library tab.
  • Private Rooms — Create a private room with a 4-digit code and invite friends to listen together in sync — no location required.
  • Room Queue — Listeners can add songs to the room queue; hosts can play queued songs and see who’s in the room.
  • Audio Quality Selection — Choose your preferred download/playback quality from a dedicated quality dialog.

Bug fixes & Improvements

  • Improved Nearby / private room stability — more reliable reconnect, refresh, and session cleanup.
  • Performance & reliability — general optimizations and playback/session stability fixes.
  • UI polish — better loading skeletons, dialogs, tabs, and playlist flows.
Version 1.1.0Download v1.1.0

What's new

  • Google Sign-In – Sign in quickly with your Google account.
  • Play Next – Play a song right after the current track.
  • Smarter Queue Management – Improved Up Next behavior and queue handling while listening.

Bug fixes

  • Fixed an issue where tapping the media notification could sometimes open a "Screen Not Found" page instead of the player.
  • Fixed a location update loop that could occur while using Nearby Listening, improving stability and reducing unnecessary location updates.

Improvements

  • General stability and playback fixes.
  • UI polish and minor usability improvements.
  • Smoother queue and player experience.
Version 1.0.0Download v1.0.0

Pakhi Tunes v1.0.0 - Initial Stable Release

  • Stream and play music seamlessly
  • Search songs, artists, and albums
  • Stay up to date with the latest tracks and album releases
  • Like and save your favourite tracks
  • Discover the latest songs and albums in your preferred language
  • Build your personal music library
  • Download songs in your preferred quality (96 kbps, 128 kbps, or 320 kbps) for offline listening
  • Enjoy your downloaded music offline, anytime
  • View your listening history
  • Background playback support
  • Secure user authentication
  • Clean and responsive user interface
  • Nearby Listening — discover nearby users, see what they are listening to, join their session in real time, or share your own listening activity

Future roadmap

  • iOS build and TestFlight distribution via EAS
  • Playlist creation and collaborative playlists
  • Lyrics display integration
  • Push notification campaigns for new releases
  • Improved recommendation engine based on listening history
  • Social features — follow users, share currently playing
  • Widget support for home-screen now-playing

Frequently asked questions

Is Pakhi Tunes available on the Play Store or App Store?
No. Pakhi Tunes is distributed as a direct APK download for learning and portfolio purposes. It is not published on any commercial app store.
Where does the music come from?
Song metadata and streaming URLs are scraped from external APIs on the backend. The API normalizes and shapes that data for the mobile app. The backend does not host music files. This is an educational project, not a licensed streaming service.
Can I use this project commercially?
No. Pakhi Tunes is built for learning and portfolio demonstration only. It is not intended for commercial use, monetization, or public distribution at scale.
What is Nearby Listening?
Nearby Listening lets users opt in to discoverability, scan for active listening sessions near their location, and join a host's session in real time. Playback state (play, pause, seek, track change) syncs via Socket.IO.
What technologies were used?
React Native with Expo for the mobile app, Node.js/Express with MongoDB for the backend, and Socket.IO for real-time features. See the Technologies section for the full stack.
Is the source code open source?
Yes. The mobile app repository is available on GitHub.View on GitHub

Ratings and reviews

4.6

5 reviews

Write a review

Only your name will be shown publicly.

mrunali alaspure

July 23, 2026

It is a great app . Nice UI . Great work 🔥🔥🔥

Vinay

July 2, 2026

Great app! Keep up the good work. Loved the nearby feature

Rahul Sharma

June 12, 2026

Love the dark UI and how easy it is to browse songs by mood. The nearby sessions feature is really unique!

Priya Mehta

May 28, 2026

Clean design and smooth playback. Excited for the Play Store release.

Amit Verma

May 10, 2026

Solid music app with a modern feel. Navigation is intuitive and the home screen layout is well thought out.

Interested in working together?

I build full-stack web and mobile applications. Let's connect.