Skip to content

regi4nt/StarryNightMPlayer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

466 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŒŒ Starry Night Music Player

Music player bertema luar angkasa, dibangun dengan React + Vite + Tailwind CSS, didukung multi-provider AI.

Starry Night Music Player

Deploy with Vercel


โœจ Fitur

Pemutaran

  • ๐ŸŽต Player lokal โ€” upload MP3/FLAC/WAV/OGG dari perangkat atau Google Drive
  • ๐Ÿ“ป Radio live โ€” RadioBrowser (50.000+ stasiun), SomaFM, NTS, Radio Garden
  • ๐ŸŽฌ Streaming embed โ€” YouTube Music, SoundCloud, Spotify, dan 600+ platform lain
  • ๐Ÿ” Web search audio โ€” Jamendo, ccMixter, Free Music Archive, Audius
  • ๐Ÿ” Repeat / shuffle / sleep timer / antrian putar

AI (multi-provider, race ke yang tercepat)

  • ๐Ÿ”ฎ Vibe Search โ€” deskripsikan mood, AI temukan lagunya
  • โœจ Cosmic Insight โ€” puisi singkat tentang lagu yang sedang diputar
  • ๐Ÿ’ฌ Chat Starry AI โ€” asisten musik yang tahu lagu aktif & cuaca saat ini
  • ๐ŸŽฏ For You โ€” rekomendasi lagu personal berdasarkan histori
  • ๐ŸŽต Lyrics + terjemahan + romanisasi (LRCLib + AI)
  • ๐ŸŽ™๏ธ Shazam โ€” kenali lagu dari mikrofon atau audio perangkat

Tampilan & UX

  • ๐ŸŒŒ 9 tema background animasi: Starry, Bedroom, Journey, Ocean, Fantasy, Future City, Night Garden, Night Highway, Solar System
  • โšก Mode Lite โ€” matikan semua animasi & fitur AI, hemat baterai & data (auto-aktif di RAM โ‰ค 2GB)
  • ๐Ÿ“ฑ Responsif penuh: mobile portrait/landscape, desktop portrait/landscape
  • ๐Ÿ”ง PWA โ€” bisa diinstall di HP seperti aplikasi native
  • ๐ŸŒ Bilingual โ€” Indonesia / English

๐Ÿ› ๏ธ Tech Stack

Lapisan Teknologi
Framework React 18
Build Tool Vite 5
Styling Tailwind CSS 3
Icons Lucide React
AI Proxy Vercel Serverless Functions
AI Providers Claude, GPT, Gemini, Groq, DeepSeek, Grok, OpenRouter, dll
Deployment Vercel
PWA vite-plugin-pwa + Workbox
Rate Limiting Upstash Redis (opsional)

๐Ÿš€ Jalankan Lokal

# 1. Clone
git clone https://github.com/YOUR_USERNAME/starry-night-mplayer.git
cd starry-night-mplayer

# 2. Install (butuh Node.js 20+)
npm install

# 3. Buat file env
cp .env.example .env.local
# Isi minimal satu API key AI di .env.local (lihat bagian Environment Variables)

# 4. Jalankan
npm run dev
# Buka http://localhost:5173

๐ŸŒ Deploy ke Vercel

Step 1 โ€” Push ke GitHub

git init
git add .
git commit -m "feat: initial commit"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/starry-night-mplayer.git
git push -u origin main

Step 2 โ€” Import di Vercel

  1. Buka vercel.com/new โ†’ Import Git Repository
  2. Pilih repo yang baru di-push
  3. Tambahkan environment variables (lihat tabel di bawah)
  4. Klik Deploy โœ…

Step 3 โ€” GitHub Secrets untuk CI/CD otomatis

Di GitHub repo โ†’ Settings โ†’ Secrets and variables โ†’ Actions:

Secret Cara dapat
VERCEL_TOKEN vercel.com/account/tokens
VERCEL_ORG_ID Jalankan vercel CLI โ†’ lihat .vercel/project.json
VERCEL_PROJECT_ID File .vercel/project.json yang sama

Setelah ini, setiap push ke main akan auto-deploy ke production.


๐Ÿ”‘ Environment Variables

Semua key bersifat opsional โ€” app tetap jalan tanpa satu pun. Tambahkan sesuai fitur yang ingin diaktifkan.

AI Providers (minimal satu untuk fitur AI)

Variable Provider Cara dapat
ANTHROPIC_API_KEY Claude (Haiku/Sonnet) console.anthropic.com
OPENAI_API_KEY GPT-4o / GPT-3.5 platform.openai.com
GEMINI_API_KEY Gemini 2.0 Flash aistudio.google.com
GROQ_API_KEY Llama / Gemma (cepat) console.groq.com
GROK_API_KEY Grok 3 console.x.ai
DEEPSEEK_API_KEY DeepSeek V3 / R1 platform.deepseek.com
OPENROUTER_API_KEY 100+ model (ada yang gratis) openrouter.ai
CLOUDFLARE_API_KEY + CLOUDFLARE_ACCOUNT_ID Llama / Qwen via Cloudflare dash.cloudflare.com
HUGGINGFACE_API_KEY Llama / Qwen via HuggingFace huggingface.co/settings/tokens
GITHUB_API_KEY GPT-4o / Llama via GitHub github.com/settings/tokens
SAMBANOVA_API_KEY Llama / Qwen via SambaNova cloud.sambanova.ai

App menggunakan race โ€” semua provider yang ada key-nya dipanggil bersamaan, respons tercepat yang dipakai.

Fitur Lainnya

Variable Fungsi
GOOGLE_CLIENT_ID Login Google Drive (upload/stream lagu dari Drive)
YOUTUBE_API_KEY YouTube search via Google API (fallback ke Piped/Invidious jika kosong)
SPOTIFY_CLIENT_ID + SPOTIFY_CLIENT_SECRET Search & preview Spotify
JAMENDO_CLIENT_ID Search audio gratis Jamendo
UPSTASH_REDIS_REST_URL + UPSTASH_REDIS_REST_TOKEN Rate limiting via Redis (opsional, ada fallback in-memory)

๐Ÿ“ Struktur Project

starry-night-mplayer/
โ”œโ”€โ”€ api/                        # Vercel Serverless Functions
โ”‚   โ”œโ”€โ”€ _lib/
โ”‚   โ”‚   โ””โ”€โ”€ rateLimit.js        # Rate limiting (Upstash Redis / in-memory)
โ”‚   โ”œโ”€โ”€ ai.js                   # Proxy multi-provider AI
โ”‚   โ”œโ”€โ”€ jamendo.js              # Proxy Jamendo API
โ”‚   โ”œโ”€โ”€ radio-proxy.js          # Proxy stream radio HTTPโ†’HTTPS
โ”‚   โ”œโ”€โ”€ radio.js                # RadioBrowser search
โ”‚   โ”œโ”€โ”€ shazam.js               # Identifikasi lagu
โ”‚   โ”œโ”€โ”€ spotify-token.js        # Spotify client credentials flow
โ”‚   โ”œโ”€โ”€ youtube.js              # YouTube search (API + Piped + Invidious)
โ”‚   โ””โ”€โ”€ yt-status.js            # Cek ketersediaan YouTube API key
โ”œโ”€โ”€ public/
โ”‚   โ”œโ”€โ”€ favicon.svg
โ”‚   โ”œโ”€โ”€ icon-192.png / icon-512.png
โ”‚   โ”œโ”€โ”€ manifest.webmanifest    # PWA manifest
โ”‚   โ””โ”€โ”€ screenshot-*.png
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”‚   โ”œโ”€โ”€ Player.jsx          # Komponen player (progress ring, kontrol)
โ”‚   โ”‚   โ”œโ”€โ”€ PlaylistViews.jsx   # Tampilan playlist & form
โ”‚   โ”‚   โ”œโ”€โ”€ SettingsPanel.jsx   # Panel pengaturan
โ”‚   โ”‚   โ”œโ”€โ”€ SongRow.jsx         # Baris lagu di library
โ”‚   โ”‚   โ”œโ”€โ”€ UploadModal.jsx     # Modal upload file
โ”‚   โ”‚   โ””โ”€โ”€ PlatformLogo.jsx    # Logo platform streaming
โ”‚   โ”œโ”€โ”€ App.jsx                 # Komponen utama (~13.500 baris)
โ”‚   โ”œโ”€โ”€ constants.js            # Konstanta, SONGS, provider AI, utilitas
โ”‚   โ”œโ”€โ”€ index.css               # Global styles + animasi tema
โ”‚   โ”œโ”€โ”€ main.jsx                # Entry point React
โ”‚   โ”œโ”€โ”€ radioStations.js        # Data stasiun radio built-in
โ”‚   โ”œโ”€โ”€ reducers.js             # useReducer untuk state besar (search, radio, dll)
โ”‚   โ”œโ”€โ”€ streamingPlatforms.js   # Data 600+ platform streaming (lazy loaded)
โ”‚   โ”œโ”€โ”€ translations.js         # String UI Indonesia/English
โ”‚   โ””โ”€โ”€ useMemoizedValues.js    # Custom hooks useMemo untuk performa
โ”œโ”€โ”€ .env.example
โ”œโ”€โ”€ index.html
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ tailwind.config.js
โ”œโ”€โ”€ vercel.json                 # Routing SPA + cache headers
โ””โ”€โ”€ vite.config.js              # Vite + PWA + manual chunk splitting

๐Ÿ“ NPM Scripts

npm run dev      # Dev server (http://localhost:5173)
npm run build    # Build production โ†’ /dist
npm run preview  # Preview hasil build secara lokal

โš™๏ธ Kustomisasi

Menambah lagu built-in

Edit array SONGS di src/constants.js:

{
  id: 10,
  title: "Judul Lagu",
  artist: "Nama Artist",
  album: "Nama Album",
  cover: "https://url-gambar.jpg",
  src: "https://url-audio.mp3",
  color: "#6366f1",
  bg: "rgba(99,102,241,0.15)",
  mood: "chill, lo-fi"
}

Menambah stasiun radio

Edit src/radioStations.js atau tambah stasiun via UI (tab Stream โ†’ RadioBrowser).

Menambah domain radio ke proxy

Edit ALLOWED_DOMAINS di api/radio-proxy.js:

const ALLOWED_DOMAINS = [
  'stream.live.vc.bbcmedia.co.uk',
  'nama-domain-stream-kamu.com',   // โ† tambah di sini
];

๐Ÿ“„ Lisensi

MIT