🎵 Muzibu Dinleme İzin Sistemi - Yeniden Yapılandırma

Premium üyelik teşvik sistemi: Şarkı dinleme için kayıt zorunluluğu
📅 12 Aralık 2025 🎯 Tenant: muzibu.com (Tenant 1001) 👤 Talep: Şarkı dinleme izin mantığı değişikliği

❌ Mevcut Durum (Kaldırılacak)

🎧 Üye Olmayan Kullanıcılar

1. Play butonuna tıklayınca şarkı 30 saniye çalmaya başlıyor

2. 30 saniye sonunda şarkı fade-out ile duruyor (3 saniye yumuşak geçiş)

3. Guest Modal açılıyor: "Kayıt olun, tam dinleyin" mesajı

4. Modal'da iki seçenek: "Kayıt Ol" veya "Giriş Yap" butonları

📍 Kod Konumu: play-limits.js:102-106 (Guest 30s checker)
📍 Modal: play-limits.js:182-233 (handleGuestLimit)

👤 Üye Olan (Deneme/Premium Bitmiş)

1. Play butonuna tıklayınca şarkı 30 saniye çalmaya başlıyor

2. Backend her 5 saniyede bir progress tracking yapıyor

3. 30 saniye sonunda şarkı pause ile duruyor

4. Member Limit Modal açılıyor: "Premium'a geçin" mesajı

📍 Kod Konumu: SongStreamController.php:77 (isPremiumOrTrial check)
📍 Preview Response: SongStreamController.php:298-347

⚠️ Problem: Kullanıcı Deneyimi

Mevcut sistemde kullanıcı önce dinliyor, sonra engelleniyordu. Bu yaklaşım kullanıcının dinleme beklentisi oluşturduğu için hayal kırıklığı yaratıyor. Ayrıca kayıt olma motivasyonu düşük çünkü zaten 30 saniye dinleyebiliyorlar.

✅ İstenen Durum (Yeni Sistem)

🎧 Üye Olmayan Kullanıcılar Yüksek Öncelik

1. Play butonuna tıklayınca şarkı HİÇ ÇALMASIN (0 saniye)

2. Direkt olarak Register Sayfası açılsın: /register

3. Kullanıcı kayıt olduktan sonra otomatik deneme üyeliği başlasın

4. Deneme üyeliği ile sınırsız şarkı dinleyebilsin

🎯 Hedef: Kayıt olmadan dinleme yok! Kayıt olunca deneme üyeliği + sınırsız müzik.
✨ Kullanıcı Deneyimi: Net bir mesaj - "Dinlemek için kayıt olmalısın!"

👤 Üye Olan (Deneme/Premium Bitmiş) Orta Öncelik

1. Play butonuna tıklayınca şarkı HİÇ ÇALMASIN (0 saniye)

2. Direkt olarak Subscription Plans Sayfası açılsın: /subscription/plans

3. Kullanıcı planlardan birini seçip premium olabilsin

🎯 Hedef: Süresi bitmiş kullanıcılar premium yenilemeye yönlendirilsin.
✨ Kullanıcı Deneyimi: "Premium süreniz bitti, yenilemek için planları görün!"

💡 Yeni Sistemin Avantajları

  • Net kayıt zorunluluğu: Kullanıcı direkt kayıt sayfasına yönlendiriliyor
  • Hayal kırıklığı yok: 30 saniye dinleyip sonra engellenme yok
  • Deneme üyeliği teşviki: Kayıt olan direkt deneme üyeliği kazanıyor
  • Premium dönüşüm artışı: Süresi bitenler planları görüp yenileyebiliyor

🔧 Teknik Planlama

1

Frontend: Player Play Kontrolü

Play butonuna tıklandığında premium kontrolü yapılacak. Eğer kullanıcı premium değilse, şarkı çalmadan direkt yönlendirme yapılacak.

Dosya: public/themes/muzibu/js/player/core/player-core.js

Değişiklik: playSong() metoduna premium check ekle

Mantık:

  • • Kullanıcı login değilse → window.location.href = '/register'
  • • Kullanıcı login ama premium/trial değilse → window.location.href = '/subscription/plans'
  • • Kullanıcı premium/trial ise → Normal şarkı çalma devam eder

🎯 Sonuç: Şarkı çalmaya başlamadan önce yönlendirme yapılacak (0 saniye ses çıkmaz)

2

Backend: Stream API Kontrolü

Stream API endpoint'inde premium olmayan kullanıcılar için 30 saniye preview vermeyi kaldıracağız. Direkt unauthorized veya redirect_required status dönülecek.

Dosya: Modules/Muzibu/app/Http/Controllers/Api/SongStreamController.php

Metod: stream() - Line 37-140

Değişiklik:

  • • Line 58-60: Guest kontrolünde getPreviewStreamResponse() çağrısını KALDIR
  • • Yerine: return response()->json(['status' => 'unauthorized', 'redirect' => '/register'], 401)
  • • Line 77-79: Free member kontrolünde getPreviewStreamResponse() çağrısını KALDIR
  • • Yerine: return response()->json(['status' => 'subscription_required', 'redirect' => '/subscription/plans'], 402)

🎯 Sonuç: Backend API'den stream URL dönmeyecek, frontend bu yanıtı alınca yönlendirme yapacak

3

Temizlik: Eski Preview Kodlarını Kaldır

30 saniye preview sistemi artık kullanılmayacağı için ilgili kodları temizleyeceğiz (opsiyonel, çalışan koda zarar vermez).

Silinecek/Pasifleştirilecek:

  • play-limits.js → Guest 30s checker (startGuestTimeCheck())
  • play-limits.jshandleGuestLimit() fade-out mantığı
  • play-limits.js → Guest/Member modal UI kodları
  • SongStreamController.phpgetPreviewStreamResponse() metodu (artık kullanılmıyor)
  • config/config.phppreview_duration config (opsiyonel)

⚠️ Dikkat: Bu adım opsiyonel - Önce yeni sistem test edilsin, sonra eski kodlar kaldırılabilir

4

Kayıt Sonrası Deneme Üyeliği

Kullanıcı /register sayfasından kayıt olduktan sonra otomatik olarak deneme üyeliği (trial) başlatılacak.

Kontrol: Mevcut kayıt sisteminde trial subscription oluşturuluyor mu?

  • Event Listener: Modules/Muzibu/Providers/EventServiceProvider.php kontrol edilecek
  • UserCreated Event: Otomatik trial subscription oluşturuluyor mu?
  • Trial Süresi: Subscription plan'larında trial period tanımlı mı?

🎯 Sonuç: Yeni kayıt olan kullanıcı direkt trial üyelikle sınırsız dinleme hakkına sahip olacak

5

Test Senaryoları

Değişiklikler uygulandıktan sonra aşağıdaki test senaryoları çalıştırılacak.

✓ Test 1: Guest Kullanıcı

  • 1. Logout yap (incognito mode)
  • 2. Herhangi bir şarkıda Play butonuna tıkla
  • 3. Beklenen: Hiç ses çıkmadan /register sayfası açılsın
  • 4. Kayıt ol → Trial subscription oluşsun → Şarkı çalabilsin

✓ Test 2: Süresi Bitmiş Üye

  • 1. Premium/Trial süresi bitmiş hesapla giriş yap
  • 2. Herhangi bir şarkıda Play butonuna tıkla
  • 3. Beklenen: Hiç ses çıkmadan /subscription/plans sayfası açılsın
  • 4. Plan seç → Premium ol → Şarkı çalabilsin

✓ Test 3: Premium/Trial Üye

  • 1. Aktif premium/trial hesapla giriş yap
  • 2. Herhangi bir şarkıda Play butonuna tıkla
  • 3. Beklenen: Şarkı normal şekilde çalsın (değişiklik yok)

📊 Teknik Dosya Haritası

🎨 Frontend Dosyalar

player-core.js

Player ana dosyası, playSong() metodunda premium check

play-limits.js

30s preview sistemi (artık gereksiz, kaldırılabilir)

auth.js

Login/Register modal kontrolü

muzibu-router.js

SPA router, register/subscription sayfalarına yönlendirme

⚙️ Backend Dosyalar

SongStreamController.php

Stream API, premium kontrolü ve redirect response

User.php (Model)

isPremiumOrTrial() metodu (mevcut, değişmeyecek)

EventServiceProvider.php

Kayıt sonrası trial subscription oluşturma

web.php (Routes)

/register ve /subscription/plans route'ları (mevcut)

⚠️ Riskler & Dikkat Edilecekler

1. SEO & Kullanıcı Deneyimi

Google bot'ları ve arama motorları siteyi ziyaret ettiğinde şarkı çalmaya çalışmayacaklar, bu nedenle sorun yok. Ancak yeni kullanıcılar hiç dinleyemeden kayıt zorunda kalacaklar - bu dönüşüm oranını etkileyebilir.

Öneri: Register sayfasına çekici bir mesaj ekleyin: "Ücretsiz kaydol, 30 gün deneme üyeliğiyle sınırsız müzik dinle!"

2. Trial Subscription Kontrolü

Kayıt sonrası otomatik trial subscription oluşturulduğundan emin olun. Aksi halde kullanıcı kayıt olduğu halde şarkı dinleyemeyecek!

Kontrol: EventServiceProvider.php içinde UserCreated event'inde trial subscription oluşturuluyor mu?

3. Mevcut Kullanıcılar

Sistemdeki mevcut kullanıcıların premium/trial durumları doğru mı? Deneme süresi bitmiş kullanıcılar subscription sayfasına yönlendirilecek, bu toplu şikayetlere yol açabilir.

Öneri: Değişiklik öncesi kullanıcılara duyuru mail'i gönderin: "Deneme süreniz dolmak üzere, premium planlara göz atın!"

4. Cache Temizleme

JavaScript dosyaları değiştiğinde kullanıcıların eski cache'li dosyayı kullanmaması için npm run prod ve cache clear yapın.

Komut: php artisan view:clear && npm run prod

🎯 Beklenen Sonuçlar

📈

Kayıt Artışı

Dinlemek için kayıt zorunluluğu ile kullanıcı kayıt oranları artacak

💎

Premium Dönüşüm

Deneme süresi bitenler subscription sayfasına yönlendirilince premium dönüşümü artacak

🎵

Kaliteli Kullanıcı

Kayıt olmayan ziyaretçiler yerine, deneme üyeliği almış aktif kullanıcılar olacak