Pemutar musik dari YouTube dengan antrian playlist bersama. Diputar di satu laptop/komputer yang tersambung ke speaker, sementara rekan kerja bisa menambah lagu dan mengantrekannya dari perangkat masing-masing. Kontrol bersifat kolaboratif — semua orang bisa play/pause/skip.
pemutar musik untuk semua
- Antrian bersama real-time — semua orang menambah lagu ke satu antrian yang sama.
- Tambah lagu 2 cara: cari via YouTube (butuh API key) atau tempel tautan YouTube (tanpa API key — judul & thumbnail otomatis via oEmbed).
- Mode Speaker — satu perangkat dijadikan pemutar (output suara); perangkat lain jadi remote. Kalau perangkat lain mengambil alih, yang lama otomatis berhenti (tidak dobel suara).
- Kontrol kolaboratif — play, pause, skip, geser urutan, hapus, seek.
- Nama panggilan — tiap lagu menampilkan "oleh <nama>" (disimpan lokal, tanpa login).
- PWA — installable, ada offline shell (service worker).
- Desain modern — dark glassmorphism, responsif, ramah dipakai di laptop.
- Next.js 16 (App Router, Turbopack) + React 19 + TypeScript
- Tailwind CSS v4
- @vercel/blob untuk penyimpanan antrian (dengan compare-and-swap / ETag agar bebas race saat banyak orang menambah lagu bersamaan)
- SWR untuk polling state, lucide-react untuk ikon
- YouTube IFrame Player API untuk pemutaran
npm install
npm run dev # http://localhost:3000
# atau dengan HTTPS lokal (sertifikat self-signed otomatis):
npm run dev:httpsTanpa konfigurasi apa pun, aplikasi memakai penyimpanan file lokal
(.data/state.json) sehingga langsung bisa dites. Fitur tempel tautan YouTube
sudah berfungsi penuh tanpa API key.
Salin .env.example menjadi .env.local lalu isi bila perlu:
| Variabel | Wajib? | Kegunaan |
|---|---|---|
BLOB_READ_WRITE_TOKEN |
Produksi | Token Vercel Blob (penyimpanan antrian). Kosong = fallback file lokal. |
YOUTUBE_API_KEY |
Opsional | Mengaktifkan fitur search. Tanpa ini, tempel-URL tetap jalan. |
YouTube API key (untuk search): buat di
Google Cloud Console → aktifkan
YouTube Data API v3 → buat API key → tempel ke YOUTUBE_API_KEY.
- Push repo ini ke GitHub, lalu Import di vercel.com.
- Buka tab Storage proyek → Create → Blob. Vercel otomatis mengisi
BLOB_READ_WRITE_TOKENke Environment Variables. - (Opsional) tambahkan
YOUTUBE_API_KEYdi Settings → Environment Variables. - Deploy. HTTPS aktif otomatis.
Untuk dev lokal memakai Blob yang sama seperti produksi:
vercel linklaluvercel env pull .env.local.
Antrian disimpan sebagai satu state.json. Setiap perubahan memakai
compare-and-swap berbasis ETag (ifMatch): jika dua orang menambah lagu
bersamaan, penulisan yang kalah akan otomatis retry membaca versi terbaru —
sehingga tidak ada lagu yang hilang.
- Buka aplikasi di laptop yang tersambung speaker, klik "Jadikan perangkat ini speaker" lalu putar (klik pertama = izin autoplay).
- Rekan kerja buka URL yang sama di perangkat mereka, isi nama, lalu cari / tempel tautan untuk menambah lagu.
- Antrian jalan otomatis; siapa pun bisa play/pause/skip/geser/hapus.
| Perintah | Fungsi |
|---|---|
npm run dev |
Dev server (Turbopack) |
npm run dev:https |
Dev server dengan HTTPS lokal |
npm run build |
Build produksi |
npm run start |
Menjalankan hasil build |
npm run gen:icons |
Regenerate ikon PWA dari SVG |
npm run lint |
ESLint |