Table of Contents
Songify is a feature-rich Spotify Clone that allows users to play music, search for songs, and create their favorite playlists. Songify is built with React Native and Expo, and utilizes the Deezer API to fetch songs data.
- React Native
- Firebase: Authentication and Firestore
- Expo Router: File-based routing for Native apps
- Expo Auth Session: Auth Provider for Google and Facebook
- Expo Av: For playing audio
- RN Async Storage: Local storage for user data
- Pullstate: Lightweight global state management
- Deezer API: Fetch songs data
- Secure user authentication
- Login with Google or Facebook
- Play songs with interactive player
- Search and filter for songs
- Add songs to favorites
- Spotify-like UI
- Intuitive tab navigation
This app was developed using the latest technologies and best practices. The codebase is highly modularized and organized for easy maintenance and scalability.
Project Structure
With a focus on clean code and maintainability, the project structure is organized into the following folders:
.
├── app/
│ ├── (auth)/ # Authentication screens
│ │ ├── sign-up.js
│ │ └── ...
│ ├── (routes)/ # Main app screens
│ │ ├── home.js
│ │ ├── player.js
│ │ └── ...
│ ├── _layout.js
│ └── index.js
├── assets
├── components/ # Reusable components grouped by page
│ ├── home
│ ├── player
│ └── index.js
├── constants
├── hooks
├── store/ # Global state management
│ ├── auth.js
│ └── player.js
├── styles # Reusable styles
├── utils
├── index.js
└── firebase-config.jsTo run this project locally, follow these steps:
- Clone the repo to your local machine.
git clone git@github.com:IndieCoderMM/songify.git- Change into the project directory and install dependencies with:
npm install- Create a
.envfile in the root directory and add the following environment variables:
EXPO_PUBLIC_FIREBASE_API_KEY=<your-firebase-api-key>
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN=<your-firebase-auth-domain>
EXPO_PUBLIC_FIREBASE_PROJECT_ID=<your-firebase-project-id>
EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET=<your-firebase-storage-bucket>
EXPO_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=<your-firebase-messaging-sender-id>
EXPO_PUBLIC_FIREBASE_APP_ID=<your-firebase-app-id>
EXPO_PUBLIC_RAPID_API_KEY=<your-rapid-api-key>
EXPO_PUBLIC_IOS_CLIENT_ID=<your-ios-client-id>
EXPO_PUBLIC_ANDROID_CLIENT_ID=<your-android-client-id>
EXPO_PUBLIC_FACEBOOK_CLIENT_ID=<your-facebook-client-id>- Start the Expo server with the following command:
npx expo startExpo-CLI will start a server and generate a QR code. You can scan this code to run the app on your mobile device. Alternatively, you can run the app on an emulator.
The following features are planned for future updates:
- Create playlists
- Add songs to playlists
- Background audio playback
- Play songs in shuffle/repeat mode
- Play local songs
I am always looking for ways to improve my project. If you have any suggestions or ideas, I would love to hear from you.
This project is licensed under the MIT License. See LICENSE for more information.
