GaanaTree is a modern React-based music streaming web app that allows users to explore songs, albums, podcasts, and audiobooks. It supports subscription plans, user authentication, likes, playlists, comment and a clean responsive UI. This is frontend repository for gaana-tree.
- Add Songs to favourite list (create one default favourite folder, can't be deleted). In case user want to create folder and add songs, let him do that.
- Implements songs by singer
- Google OAuth2 login, email OTP verification during account creation, forgot/reset password, user profile image
- Implement Podcast
- Implement Audiobooks (can use AI to convert readable books)
- Implement Subscription with payment and expiry
- Push code to Live (Dockerized Backend at Render and Frontend at Vercel)
- πΆ Songs & Albums β Browse songs, albums, playlists with track images & metadata.
- ποΈ Podcasts & Audiobooks β Explore curated podcasts & audiobook collections.
- β€οΈ Likes System β Like/unlike songs & albums with live counters. Also have comment section for songs.
- π§ Player Context β Centralized music player across pages.
- π± Responsive UI β Mobile-first design using Tailwind CSS.
- π Authentication β User login & subscription handling via AuthContext.
- π³ Subscription Plans β Free, Silver, Gold, and Platinum tiers with premium features.
- βοΈ API Ready β Modular API services for albums, songs, and subscriptions.
- Frontend: React, React Router, Tailwind CSS, Lucide Icons
- State Management: React Context API (
AuthContext,PlayerContext) - Backend APIs:
albumsAPI,songsAPI,subscriptionAPI(dummy/mock ready) - Notifications: react-hot-toast
- Build Tool: Vite
gaana-tree/
β
βββ public/ # Static assets (logo, images)
βββ src/
β βββ assets/ # Images & assets
β βββ context/ # AuthContext, PlayerContext
β βββ pages/ # ExploreSubscription, DisplayAlbum, PlaylistHome, etc.
β βββ services/ # API service handlers
β βββ App.jsx # Main app routing
β βββ main.jsx # React entry point
β βββ index.css # TailwindCSS entry
β βββ components/ # Reusable UI components for songs
β βββ audiobooks # Reusable UI components for audiobooks
β βββ podcasts # Reusable UI components for podcast
β βββ favPlaylist # Reusable UI components for playlist
βββ package.json
βββ tailwind.config.js
βββ vite.config.js
βββ .env
βββ README.md
gaana-tree-admin/
β
βββ public/ # Static assets (logo, images)
βββ src/
β βββ assets/ # Images & assets
β βββ components/ # ProtectedRoute
β βββ context/ # AuthContext
β βββ layout/ # DashboardLayout, Navbar, Sidebar
β βββ pages/ # AddAlbum, AddSong, ListSong, ListAlbum, AdminProfile, Login
β βββ services/ # API service handlers [apiService.js]
β βββ App.jsx # Main app routing
β βββ main.jsx # React entry point
β βββ index.css # TailwindCSS entry
β
βββ package.json
βββ tailwind.config.js
βββ vite.config.js
βββ .env
βββ README.md
gaana-tree-backend/
β
βββ src/main/java/org/aadi/gaana_tree/
β βββ config/ # Configurations
β β βββ SecurityConfig.java # Spring Security + JWT
β β βββ CloudinaryConfig.java
β β
β βββ controllers/ # REST Controllers (API endpoints)
β β βββ AuthController.java
β β βββ AlbumController.java
β β βββ SongController.java
β β βββ CommentController.java
β β βββ PodcastController.java
β β βββ AudiobookController.java
β β βββ SubscriptionController.java
β β βββ UserController.java
β β
β βββ dto/ # DTOs (request/response objects)
β β βββ AlbumRequest.java
β β βββ RegisterRequest.java
β β βββ AuthRequest.java
β β βββ AuthResponse.java
β β βββ CommentRequest.java
β β βββ AlbumListResponse.java
β β βββ SongRequest.java
β β βββ UserResponse.java
β β βββ SongListResponse.java
β β
β βββ document/ # JPA Entities (tables)
β β βββ User.java
β β βββ Album.java
β β βββ Song.java
β β βββ Comment.java
β β βββ Podcast.java
β β βββ Audiobook.java
β β βββ SubscriptionPlan.java # Enum
β β
β βββ repositories/ # Spring Data JPA Repositories
β β βββ UserRepository.java
β β βββ AlbumRepository.java
β β βββ SongRepository.java
β β βββ PodcastRepository.java
β β βββ AudiobookRepository.java
β β βββ CommentRepository.java
β β
β βββ security/ # JWT utils & filters
β β βββ JwtAuthenticationFilter.java
β β
β βββ services/ # Business logic
β β βββ AppUserDetailsService.java
β β βββ AlbumService.java
β β βββ SongService.java
β β βββ CommentService.java
β β βββ UserService.java
β β βββ PodcastService.java
β β βββ AudiobookService.java
β β βββ DataInitializationService.java
β β
β βββ utils/ # Helpers
β β βββ JwtUtil.java
β β
β βββ GaanaTreeBackendApplication.java # Main entry point
β
βββ src/main/resources/
β βββ application.properties
β
βββ Dockerfile
βββ .env
βββ .gitignore
βββ pom.xml # Maven dependencies
βββ README.md
git clone https://github.com/your-username/gaana-tree.git
cd gaana-treenpm installnpm run build
npm run previewnpm run devCreate a .env file in root and configure as needed (example):
In Dev =>
VITE_API_BASE_URL=http://localhost:8080
In Production =>
VITE_API_BASE_URL=https://gaana-tree-backend.onrender.com
/β Home page (Albums, Songs, Playlists)/albums/:idβ Album details + tracks (DisplayAlbum)/playlistsβ Playlist Home (PlaylistHome)/podcastsβ Podcast section/audiobooksβ Audiobook section (AudiobookHome)/subscriptionβ Explore Subscription Plans (ExploreSubscription)/supportβ Support & Help page (Support)/song/:id- for song details (SongInfo)/search- for search (Search)/profile- for user profile (Profile)/settings- for user specific gaana-tree app Settings (Setting)
- Free β Basic streaming (ads, limited songs)
- Silver (βΉ99/month) β Ad-free, high-quality, podcasts
- Gold (βΉ299/month) β Offline downloads, audiobooks
- Platinum (βΉ499/month) β All features unlocked (Ultra HD audio, Podcasts & Audiobooks)
- Fork the project
- Create a feature branch:
git checkout -b feature/new-feature - Commit changes:
git commit -m 'Add new feature' - Push to branch:
git push origin feature/new-feature - Open a Pull Request
In Dev => http://localhost:5173 Production => https://gaana-tree.vercel.app
In Dev => http://localhost:5174 Production => https://gaana-tree-admin.vercel.app
In Dev => http://localhost:8080 Production => https://gaana-tree-backend.onrender.com
This project is licensed under the MIT License.





