A full-stack music event discovery platform that helps users find concerts and discover new artists based on song attributes like tempo, energy, and danceability.
- Event Search: Search concerts by artist, venue, location, genre, or date with multi-parameter filtering
- Vibe-Based Matching: Find events that match the energy, tempo, and danceability of your favorite songs
- Song Recommendations: Get personalized song suggestions based on events you're interested in
- Artist Discovery: Explore artist profiles with top songs and vibe analysis
- Hidden Gems: Discover underrated events with high-energy performances from emerging artists
- Similar Songs: Find tracks similar to ones you love using computed similarity scores
- React 18 with React Router
- Material UI component library
- Recharts for data visualization
- Node.js with Express.js
- PostgreSQL database (AWS RDS)
- RESTful API architecture
- Materialized views for pre-computed aggregations
- Composite indexes for efficient filtering
- Complex SQL queries with CTEs and window functions
├── client/ # React frontend
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── pages/ # Page components
│ │ └── helpers/ # Utility functions
│ └── package.json
├── server/ # Express backend
│ ├── server.js # Express app configuration
│ ├── routes.js # API route handlers
│ └── package.json
└── migration.sql # Database optimization scripts
- Node.js (v16+)
- PostgreSQL database
- npm or yarn
- Clone the repository
git clone https://github.com/yourusername/livesync.git
cd livesync- Install dependencies
# Install server dependencies
cd server
npm install
# Install client dependencies
cd ../client
npm install- Configure the database
Copy server/config.example.json to server/config.json and fill in your database credentials:
{
"rds_host": "your-rds-host.region.rds.amazonaws.com",
"rds_port": "5432",
"rds_user": "your_username",
"rds_password": "your_password",
"rds_db": "your_database",
"server_host": "localhost",
"server_port": "8080"
}- Run the application
# Start the server (from server directory)
npm start
# Start the client (from client directory)
npm start- Open http://localhost:3000 in your browser
| Endpoint | Description |
|---|---|
GET /api/search/events |
Search events with filters (artist, venue, location, genre, date) |
GET /api/search/songs |
Search songs by title or artist |
GET /api/search/artists |
Search artists by name |
GET /api/events/:id/top-songs |
Get top songs for an event's performing artist |
GET /api/artists/:id/top-songs |
Get an artist's top songs by popularity |
GET /api/songs/:id/similar |
Find similar songs based on audio features |
GET /api/recommendations/events-by-vibe |
Find events matching a song's vibe profile |
GET /api/recommendations/events-by-genre |
Find events by song genre |
GET /api/recommendations/songs-by-event |
Get song recommendations based on event |
GET /api/events/by-vibe |
Filter events by energy/danceability (hype vs chill) |
GET /api/events/hidden-gems |
Discover underrated high-energy events |
GET /api/artists/:id/vibe-profile |
Get artist's genre/emotion breakdown |
The application uses the following main tables:
events- Concert/event informationartists- Artist profilessongs- Song metadata with audio features (tempo, energy, danceability, etc.)similarsongs- Pre-computed song similarity scores
This project is licensed under the MIT License - see the LICENSE file for details.
- Song data sourced from Spotify audio features
- Event data aggregated from public concert listings
- This project could not have been completed without the contributions of my wonderful group members