A web-based platform where music enthusiasts can explore, share, and collaborate on song lyrics and compositions. Unlike regular lyrics websites, this platform is instrument-focused — meaning users can search for songs based on the instrument they want to play.
- Song Library: Search and browse songs by title, artist, language, genre, or instrument
- User Compositions: Add your own composition of a song (lyrics variation, chord progression, tabs, etc.)
- Ranking System: Like/dislike system for community-driven quality control
- Authentication: Email/password and Google OAuth 2.0 login
- User Profiles: Personal dashboards with composition history and statistics
- Instrument-Focused Search: Find songs specifically for your instrument
- Community Collaboration: Share and discover different arrangements
- Real-time Statistics: Track views, likes, and community engagement
- Responsive Design: Works perfectly on desktop and mobile devices
- Modern UI/UX: Smooth animations and intuitive navigation
- HTML5 + CSS3: Modern, semantic markup with CSS Grid and Flexbox
- Vanilla JavaScript: No frameworks, pure ES6+ with modern APIs
- CSS Animations: Smooth, performant animations for better UX
- Responsive Design: Mobile-first approach with progressive enhancement
- Node.js + Express: Fast, scalable server with RESTful APIs
- MongoDB + Mongoose: Flexible document database with ODM
- JWT Authentication: Secure token-based auth with refresh capabilities
- Google OAuth 2.0: Third-party authentication integration
- Express Security: Helmet, CORS, rate limiting, and input validation
- Users: Authentication, profiles, and user statistics
- Songs: Official lyrics, metadata, and community metrics
- Compositions: User-submitted arrangements with voting system
- LikesDislikes: Community feedback and ranking system
- Node.js (v16 or higher)
- MongoDB (local or MongoDB Atlas)
- Git
-
Clone the repository
git clone <repository-url> cd ly-platform
-
Backend Setup
cd backend npm install cp .env.example .env # Edit .env with your configuration npm run dev
-
Frontend Setup
cd frontend # Serve with your preferred static server # For example, using Python: python -m http.server 3000 # Or using Node.js http-server: npx http-server -p 3000
-
Database Setup
- Install MongoDB locally or create a MongoDB Atlas account
- Update the
MONGODB_URIin your.envfile - The application will create collections automatically
Create a .env file in the backend directory:
NODE_ENV=development
PORT=5000
MONGODB_URI=mongodb://localhost:27017/ly-platform
JWT_SECRET=your-super-secret-jwt-key
JWT_EXPIRE=7d
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
FRONTEND_URL=http://localhost:3000
SESSION_SECRET=your-session-secret- Go to Google Cloud Console
- Create a new project or select existing one
- Enable Google+ API
- Create OAuth 2.0 credentials
- Add authorized redirect URIs:
http://localhost:5000/api/auth/google/callback(development)https://yourdomain.com/api/auth/google/callback(production)
ly-platform/
├── backend/
│ ├── models/
│ │ ├── User.js
│ │ ├── Song.js
│ │ ├── Composition.js
│ │ └── LikeDislike.js
│ ├── routes/
│ │ ├── auth.js
│ │ ├── songs.js
│ │ ├── compositions.js
│ │ └── users.js
│ ├── middleware/
│ │ └── auth.js
│ ├── package.json
│ ├── server.js
│ └── .env
├── frontend/
│ ├── css/
│ │ ├── style.css
│ │ └── animations.css
│ ├── js/
│ │ ├── api.js
│ │ ├── auth.js
│ │ ├── utils.js
│ │ └── main.js
│ ├── index.html
│ └── ...
└── README.md
POST /api/auth/register- Register new userPOST /api/auth/login- Login userGET /api/auth/google- Google OAuth loginGET /api/auth/me- Get current userPUT /api/auth/profile- Update user profile
GET /api/songs- Get songs with filteringGET /api/songs/trending- Get trending songsGET /api/songs/:id- Get single songPOST /api/songs- Create new song (auth required)PUT /api/songs/:id- Update song (auth required)DELETE /api/songs/:id- Delete song (auth required)
GET /api/compositions- Get compositions with filteringGET /api/compositions/featured- Get featured compositionsGET /api/compositions/:id- Get single compositionPOST /api/compositions- Create composition (auth required)PUT /api/compositions/:id- Update composition (auth required)DELETE /api/compositions/:id- Delete composition (auth required)POST /api/compositions/:id/vote- Vote on composition (auth required)
GET /api/users- Get users listGET /api/users/:id- Get user profileGET /api/users/:id/compositions- Get user's compositionsGET /api/users/me/dashboard- Get user dashboard (auth required)
`
Happy Composing! 🎵