Pakhi Tunes
Free music streaming with nearby sessions
Version 1.2.0
4.6
5 reviews
103
Downloads
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
Infrastructure
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/googleGET /auth/mePATCH /users/me/discoverable
Music catalog
GET /songs/search, /songs/:idGET /top-artists, /albums, /genres, /new-releasesBackend 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
- No. Pakhi Tunes is distributed as a direct APK download for learning and portfolio purposes. It is not published on any commercial app store.
- 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.
- No. Pakhi Tunes is built for learning and portfolio demonstration only. It is not intended for commercial use, monetization, or public distribution at scale.
- 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.
- 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.
- Yes. The mobile app repository is available on GitHub.View on GitHub
Is Pakhi Tunes available on the Play Store or App Store?
Where does the music come from?
Can I use this project commercially?
What is Nearby Listening?
What technologies were used?
Is the source code open source?
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.