A React Native Expo app for searching, rating, and organizing your favorite music using the Spotify API and Firebase.
- 🔍 Search Music: Search for songs, artists, and albums using the Spotify API
 - ⭐ Rate Songs: Rate your favorite tracks from 1 to 10
 - 💾 Save Offline: Save songs to your personal library for offline access
 - 🏷️ Tags System: Create custom tags to organize your music collection
 - 📊 Rating History: Track your rating history across all songs
 - 🎯 Multi-API Ready: Built to support multiple music APIs (Spotify or Deezer)
 
- Node.js (14 or higher)
 - npm or yarn
 - Expo CLI (
npm install -g @expo/cli) - Firebase account
 
- 
Clone the repository
git clone https://github.com/yourusername/MusicNexus.git cd MusicNexus - 
Install dependencies
npm install
 - 
Set up environment variables
cp .env.example .env
 - 
Configure your Firebase credentials in the
.envfile - 
Start the development server
npx expo start
 
Copy the .env.example file to .env and configure the following variables:
EXPO_PUBLIC_FIREBASE_API_KEY=your_api_key_here
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
EXPO_PUBLIC_FIREBASE_PROJECT_ID=your_project_id
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=your_project.firebasestorage.app
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
EXPO_PUBLIC_FIREBASE_APP_ID=your_app_id
EXPO_PUBLIC_FIREBASE_MEASUREMENT_ID=your_measurement_id
EXPO_PUBLIC_SPOTIFY_CLIENT_ID=your_spotify_client_id
EXPO_PUBLIC_SPOTIFY_CLIENT_SECRET=your_spotify_client_secret
⚠️ WARNING:
If you setEXPO_PUBLIC_SPOTIFY_CLIENT_SECREThere, it will be embedded in your app bundle.
Anyone with access to your APK or JS bundle can extract this secret.
DO NOT use this in production or share your APK if you care about keeping your Spotify secret safe.
For real security, use a backend server to handle the Spotify secret and never expose it in your app code.
- Frontend: React Native, Expo
 - Language: TypeScript
 - Database: Firebase Firestore
 - Music API: Spotify and Deezer APIs (with support for future APIs)
 - Navigation: React Navigation
 - State Management: React Hooks
 
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the project
 - Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
 
- View your saved music collection
 - Edit ratings and manage tags
 - Filter and sort your music
 
- Search for music using Spotify or Deezer API
 - View song details (title, artist, album, duration)
 - Rate and save songs to your library
 
- Create custom tags with colors
 - Organize your music collection
 - Filter music by tags
 
- View your complete rating history
 - Track rating changes over time
 - Statistics and insights
 
- View profile information and personal notes
 - See statistics: total songs, albums, artists, average rating
 - Breakdown by ratings, years, and tags
 - Delete all songs or tags from your account
 
npx expo startnpx expo build --platform android
npx expo build --platform iosnpx expo install expo-dev-client
npx expo run:android
npx expo run:iosThis project is licensed under the Creative Commons Attribution-NonCommercial 4.0 International License.
You may use and modify it freely for non-commercial purposes, as long as you give proper credit.
If you have any questions or need help, please open an issue on GitHub.
Made with ❤️ by Matheus Cerqueira Santana