Skip to content

abchatterjee7/gaana-tree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

9 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🎡 GaanaTree – Music, Podcasts & Audiobooks Platform

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.

GaanaTree Banner

Pending Task

  • 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)

✨ Features

  • 🎢 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.

πŸ› οΈ Tech Stack

πŸ“‚ React Js Frontend Project Structure

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

πŸ“‚ Spring-boot Backend Project Structure

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

πŸš€ Getting Started

1️⃣ Clone the Repository

git clone https://github.com/your-username/gaana-tree.git
cd gaana-tree

2️⃣ Install Dependencies

npm install

3️⃣ Build for Production

npm run build
npm run preview

4️⃣ Run the Development Server

npm run dev

πŸ”‘ Environment Variables

Create 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

🧩 Available Pages

  • / – 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)

πŸ’³ Subscription Plans

  • 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)

πŸ“Έ Screenshots

Subscription Plans

Subscription Plans

Album Display

Album Display

Admin Panel Adding Album Display

AdminAlbum Display

Home Page Display

Home Page Display

Login Page

Login Page

🀝 Contributing

  1. Fork the project
  2. Create a feature branch: git checkout -b feature/new-feature
  3. Commit changes: git commit -m 'Add new feature'
  4. Push to branch: git push origin feature/new-feature
  5. Open a Pull Request

App available at :

In Dev => http://localhost:5173 Production => https://gaana-tree.vercel.app

Admin panel available at:

In Dev => http://localhost:5174 Production => https://gaana-tree-admin.vercel.app

Backend available at:

In Dev => http://localhost:8080 Production => https://gaana-tree-backend.onrender.com

πŸ“œ License

This project is licensed under the MIT License.

About

GaanaTree is an app which streams songs, Podcasts and Audiobooks based on user subscription plan. User can do like & comments, and create favorite playlist. This is frontend built in React-Js.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages