Build a playlist together with your favorite people — no sign-up required.
🔗 Live Demo → shared-playlist.com
Shared Playlist is a lightweight, real-time collaborative playlist app. Create a room, share the link, and start adding tracks together — no email, no password, no friction.
Whether it's a road trip, a party, or a late-night music session with a friend across the world, Shared Playlist makes it easy to discover what everyone's vibing to.
- Instant Rooms — Create a room in one click and share the link with anyone
- No Sign-up Required — Just enter a nickname and you're in
- Collaborative Playlist — Add, view, and manage tracks in real time
- 👎 Dislike System — Let your friends know when a track isn't hitting
- Dislike Awards — A live leaderboard of the most disliked contributors
- Screenshot Export — Clean capture-ready view to recreate the playlist in any streaming app
- Text Export — Copy the full playlist as plain text
- Member Tracks — Click any member's name to see what they've added
- Room Management — Extend expiry by 7 days or delete the room anytime
- Bilingual — Full Korean 🇰🇷 and English 🇺🇸 support
| Layer | Technology |
|---|---|
| Framework | NestJS |
| Language | TypeScript |
| ORM | Prisma |
| Database | MySQL (AWS RDS) |
| Auth | Cookie-based sessions with NestJS Guards |
| Music Data | Last.fm API |
| Layer | Technology |
|---|---|
| Framework | React + Vite |
| Language | TypeScript |
| Routing | React Router |
| Styling | Inline styles + CSS variables |
| i18n | Custom translation layer |
| Layer | Technology |
|---|---|
| Backend Hosting | AWS EC2 |
| Containerization | Docker |
| Frontend Hosting | Vercel |
| Database | AWS RDS (MySQL) |
┌─────────────────────┐ ┌──────────────────────────┐
│ React + Vite │ HTTPS │ NestJS API │
│ (Vercel) │ ──────▶│ (AWS EC2 + Docker) │
│ │ │ │
│ - Room UI │ │ - Room Management │
│ - Search │ │ - Track Service │
│ - Playlist │ │ - Auth Guard (Cookie) │
└─────────────────────┘ └────────────┬─────────────┘
│
┌─────────────▼─────────────┐
│ MySQL (AWS RDS) │
│ Prisma ORM │
└───────────────────────────┘
- Node.js 20+
- Docker & Docker Compose
- MySQL (or use Docker)
# Clone the repo
git clone https://github.com/eschoi04/Shared-Playlist.git
cd Shared-Playlist
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Fill in DATABASE_URL and other required vars
# Run database migrations
npx prisma migrate dev
# Start in development mode
npm run start:devcd frontend
# Install dependencies
npm install
# Start development server
npm run devThe app will be available at http://localhost:5173.
Note: For local development against the production backend, configure
vite.config.tsto proxy API requests.
docker compose up --build| Method | Endpoint | Description |
|---|---|---|
POST |
/rooms |
Create a new room |
POST |
/rooms/:id/enter |
Enter a room with a nickname |
GET |
/rooms/:id |
Get room info & members |
PATCH |
/rooms/:id |
Extend room expiry by 7 days |
DELETE |
/rooms/:id |
Delete a room |
GET |
/tracks/search |
Search tracks via Last.fm |
GET |
/rooms/:id/tracks |
Get playlist |
POST |
/rooms/:id/tracks |
Add a track |
DELETE |
/rooms/:id/tracks/:trackId |
Delete a track |
PATCH |
/rooms/:id/tracks/:trackId |
Dislike a track |
GET |
/rooms/:id/users/:userId/tracks |
Get tracks by user |
├── src/
│ ├── common/
│ │ └── guards/ # Auth guard (cookie-based session)
│ ├── modules/
│ │ ├── room/ # Room creation & management
│ │ └── track/ # Playlist & track services
│ └── main.ts
├── prisma/
│ └── schema.prisma
├── Dockerfile
└── docker-compose.yml
Feedback and bug reports are welcome!
👉 Submit an issue here
MIT License © 2026 Eunsong Choi
Music data powered by Last.fm API 🎵