🎵 Muzibu SPA Player Sorunu

Şarkı çalarken sayfa değişince müzik duruyor - SPA navigation sistemi analizi ve çözüm planı
📅 15 Aralık 2025 🎯 Tenant: muzibu.com 👤 Player durma sorunu

🚨 Sorun Nedir?

Player SPA Değil - Tam Sayfa Yenileniyor

Kullanıcı bir şarkı dinlerken başka bir sayfaya geçtiğinde müzik duruyor. Site SPA olması gerekiyordu ama full page reload yapılıyor.

Beklenen Davranış: Şarkı çalarken sayfa değişse bile müzik kesintisiz devam etmeli (Spotify gibi)

🔍 Teknik Analiz

📊 Mevcut Durum

SPA Router Mevcut

spa-router.js dosyası var ve doğru çalışıyor. Normal link'leri yakalayıp AJAX ile sayfa içeriğini yüklüyor, player state korunuyor.

Livewire wire:navigate Kullanılıyor

79 adet wire:navigate directive kullanımı tespit edildi! Bu Livewire'ın kendi SPA sistemi ama full page reload yapıyor.

Livewire wire:navigate → Sayfayı tamamen yeniler → Audio element resetlenir → Müzik durur

⚠️ Çakışan İki SPA Sistemi

Hem custom SPA router var, hem Livewire wire:navigate kullanılıyor. wire:navigate olan link'ler SPA router'ı bypass ediyor ve full reload yapıyor.

🎯 Sorunun Kök Nedeni

1.

wire:navigate directive'i full page reload tetikliyor

2.

Full reload → Alpine.js yeniden initialize → Audio element reset → HLS/Howler instance kayboluyor

3.

Custom SPA router link'leri yakalasa da, wire:navigate attribute'u olan link'ler öncelik kazanıyor

🎯 Çözüm Stratejisi

💡

Ana Strateji

Tüm wire:navigate directive'lerini kaldırıp, mevcut custom SPA router sistemini kullanacağız. SPA router zaten hazır ve doğru çalışıyor, sadece tüm link'lerin bu sistemi kullanması gerekiyor.

1

wire:navigate Temizliği Yüksek Öncelik

29 dosyada toplam 79 adet wire:navigate kullanımı var. Bunların hepsini kaldırıp normal <a href=""> link'lere dönüştüreceğiz.

Nasıl Yapılacak:

  • • Tüm blade dosyalarında wire:navigate directive'ini bul
  • • Directive'i kaldır, sadece href attribute'unu bırak
  • • SPA router otomatik olarak bu link'leri yakalayacak

Beklenen Sonuç: Tüm link'ler SPA navigation kullanacak, sayfa geçişlerinde player çalmaya devam edecek

2

Alpine.js Re-initialization Kontrolü Orta Öncelik

SPA navigation'dan sonra yeni yüklenen içerikteki Alpine.js component'lerinin doğru initialize edildiğinden emin olacağız.

Kontrol Edilecekler:

  • • Yeni içerik yüklendikten sonra Alpine directives çalışıyor mu?
  • • Context menu, playlist modals gibi interactive component'ler çalışıyor mu?
  • • Event listener'lar yeniden bağlanıyor mu?

Not: Layout'ta zaten livewire:navigated event handler var, Alpine re-init yapıyor. SPA router da aynı yaklaşımı kullanacak.

3

Test & Validation Kritik

Tüm navigation flow'larını test ederek SPA sisteminin kusursuz çalıştığından emin olacağız.

Test Senaryoları:

  • ✓ Şarkı Çalarken Navigasyon: Ana sayfa → Playlist → Albüm → Şarkı detay geçişlerinde müzik devam etmeli
  • ✓ Browser Back/Forward: Geri/ileri tuşları çalışmalı, player state korunmalı
  • ✓ Direct URL Access: URL'e direkt gidildiğinde sayfa doğru yüklenmeli
  • ✓ Auth Pages Bypass: Login/register sayfaları full reload yapmalı (farklı layout)
  • ✓ Context Menu & Modals: Sağ tık menü, playlist ekleme modalları çalışmalı

⚙️ Teknik Detaylar

🚀 SPA Router Nasıl Çalışıyor?

1.

Tüm internal link'leri event listener ile yakalıyor

2.

AJAX ile sayfa içeriğini yüklüyor

3.

Sadece main content'i değiştiriyor (player sabit kalıyor)

4.

Browser history API ile URL güncelleniyor

5.

Audio element ve player state korunuyor

⚔️ wire:navigate vs SPA Router

❌ wire:navigate

  • • Livewire'ın SPA sistemi
  • • Full page reload yapıyor
  • • Audio element resetleniyor
  • • Player state kayboluyor

✅ Custom SPA Router

  • • Sadece content değişiyor
  • • Audio element korunuyor
  • • Player state korunuyor
  • • Müzik kesintisiz devam ediyor

📁 Etkilenen Dosyalar

29 dosya içinde 79 adet wire:navigate kullanımı var:

🧩 Components

  • • sidebar-left.blade.php (7 adet)
  • • sidebar-right.blade.php (3 adet)
  • • header.blade.php (8 adet)
  • • bottom-nav.blade.php (2 adet)
  • • profile-sidebar.blade.php (4 adet)

📄 Pages

  • • dashboard.blade.php (8 adet)
  • • playlists/index.blade.php (1 adet)
  • • albums/index.blade.php (1 adet)
  • • sectors/index.blade.php (1 adet)
  • • genres/index.blade.php (1 adet)

🧱 Partials

  • • song-detail.blade.php (2 adet)
  • • album-detail.blade.php (2 adet)
  • • playlist-detail.blade.php (2 adet)
  • • favorites-list.blade.php (8 adet)

📦 Grids

  • • playlists-grid.blade.php (1 adet)
  • • albums-grid.blade.php (1 adet)
  • • sectors-grid.blade.php (1 adet)
  • • genres-grid.blade.php (1 adet)

💡 Tüm bu dosyalarda wire:navigate directive'i kaldırılacak, normal href link olarak kalacak

🎯 Öncelik Sıralaması

YÜKSEK

wire:navigate temizliği - Ana sorunun kaynağı

ORTA

Alpine.js re-initialization kontrolü

KRİTİK

Detaylı test ve validation

✨ Beklenen Sonuç

Şarkı çalarken sayfa değişimlerinde müzik kesintisiz devam edecek Spotify benzeri SPA deneyimi

Sayfa geçişleri hızlı ve akıcı olacak Sadece content değişiyor, full reload yok

Player state (queue, current time, volume) korunacak HLS/Howler instance'ları ayakta kalacak

Tüm interactive özellikler çalışmaya devam edecek Context menu, modals, Alpine directives