🎁 Trial Sistemi

Tam Uygulama Planı - Tüm Sorulara Cevap

❓ Kullanıcı Üye Olunca Trial Otomatik Başlasın mı?

🤔 İki Yaklaşım:

Yaklaşım A: Otomatik Başlar

Kullanıcı kayıt olur olmaz sistem otomatik trial subscription oluşturur.

✅ Artıları:

  • Kullanıcı hemen premium deneyimi yaşar
  • Friction yok (hiçbir seçim yapmasına gerek yok)
  • Conversion artışı (direkt deneme başlar)
  • Spotify, Netflix, YouTube Premium modeli

❌ Eksileri:

  • Kullanıcı trial istemeyebilir (nadir)
  • Anında karar verilmiş olur
Yaklaşım B: Kullanıcı Seçer

Kayıt sonrası kullanıcıya sorulur: "7 gün ücretsiz denemek ister misin?"

✅ Artıları:

  • Kullanıcı kontrolü
  • Şeffaf (kullanıcı bilinçli seçim yapar)

❌ Eksileri:

  • Friction (ekstra adım)
  • Kullanıcı hayır diyebilir (conversion kaybı)
  • Daha az deneme başlar
  • Karmaşık UX

✅ ÖNERİ: Yaklaşım A (Otomatik)

Kullanıcı kayıt olur olmaz otomatik 7 gün trial başlasın!
Bu endüstri standardı ve en yüksek conversion'ı sağlar.

💡 Nasıl Çalışacak?
  1. Kullanıcı kayıt formu doldurur (email, şifre)
  2. Submit → Sistem kullanıcı oluşturur
  3. Otomatik giriş yapılır
  4. Sistem: has_used_trial kontrol eder → false
  5. Sistem: Trial subscription oluşturur (7 gün)
  6. Sistem: has_used_trial = true işaretler
  7. Kullanıcıya mesaj: "🎉 Hoş geldin! 7 gün ücretsiz premium başladı"

⏰ Trial Süresi (Kaç Gün) Nereden Gelecek?

✅ CEVAP: Trial Planının Cycle Süresinden

Admin panelde trial planı oluştururken cycle süresine "7 gün" yazarsın.
Sistem otomatik o süreyi kullanır.

📋 Mantık:

1. Admin Panel - Trial Planı Oluştur

  • Plan Adı: "Trial"
  • ☑️ Bu bir deneme üyeliğidir (checkbox işaretli)
  • Cycle Ekle → Süre: 7 gün, Fiyat: ₺0.00

2. Kullanıcı Kayıt Olunca

// Trial planını bul $trialPlan = SubscriptionPlan::where('is_trial', true) ->where('is_active', true) ->first(); // İlk (ve tek) cycle'ı al $trialCycle = $trialPlan->cycles[0]; // Süreyi al $durationDays = $trialCycle['duration_days']; // 7 // Subscription oluştur $subscription = Subscription::create([ 'user_id' => $user->id, 'plan_id' => $trialPlan->id, 'starts_at' => now(), 'ends_at' => now()->addDays($durationDays), // 7 gün sonra 'status' => 'active', ]);
💡 Süreyi Değiştirmek:

Trial süresini 7 → 14 gün yapmak istersen:

  1. Admin Panel → Trial Planı → Düzenle
  2. Cycle süresini 7 → 14 güne çevir
  3. Kaydet → Artık yeni kullanıcılar 14 gün trial alır!

🔍 Kullanıcı Trial Kullandı mı Nasıl Anlayacağız?

✅ CEVAP: has_used_trial Field (Users Tablosunda)

Users tablosuna yeni bir field: has_used_trial (boolean)

📋 Database Migration:

Schema::table('users', function (Blueprint $table) { $table->boolean('has_used_trial') ->default(false) ->after('email_verified_at') ->comment('Kullanıcı trial kullandı mı?'); // Performans için index $table->index('has_used_trial'); });

🔄 Nasıl Çalışacak?

Yeni Kullanıcı Kayıt Olur

has_used_trial = false (varsayılan)

Sistem Kontrol Eder
if ($user->has_used_trial === false) { // Trial ver! } else { // Trial verme! Zaten kullanmış. }
Trial Başladığında İşaretle
$user->update(['has_used_trial' => true]);

⚠️ Bu field bir defa TRUE oldu mu, bir daha FALSE olmaz!

Sonraki Kontroller

Kullanıcı subscription'ı silse bile, tekrar kayıt olsa bile:

$user->has_used_trial === true // Hep TRUE kalır! // ❌ Bir daha trial alamaz!
🚫 Kritik Kural:

has_used_trial field'i ASLA manuel olarak FALSE yapılmamalı!

Tek istisna: Admin manuel olarak "trial hakkı yenile" işlemi yaparsa.

👀 Admin Panelde Trial Durumunu Nasıl Göreceğiz?

1️⃣ Users Listesi

ID İsim Email Trial Durumu Subscription
101 Ahmet Yılmaz ahmet@mail.com 🎁 Trial Aktif (3 gün kaldı) Trial
102 Mehmet Demir mehmet@mail.com Trial Kullanıldı Premium (Aylık)
103 Ayşe Kaya ayse@mail.com Trial Kullanıldı -
104 Ali Çelik ali@mail.com Trial Kullanılmadı -

2️⃣ User Detail Sayfası

Kullanıcı detay sayfasında kart:

Trial Durumu

  • Kullanıldı mı: ✅ Evet
  • Başlangıç: 2025-12-04 14:30
  • Bitiş: 2025-12-11 23:59
  • Kalan Süre: 3 gün 9 saat

3️⃣ Subscriptions Listesi

Trial subscription'ları filtrele:

SELECT s.*, u.name, u.email FROM subscriptions s JOIN users u ON s.user_id = u.id JOIN subscription_plans sp ON s.plan_id = sp.subscription_plan_id WHERE sp.is_trial = TRUE ORDER BY s.created_at DESC;

⏱️ Trial Bitince Ne Olacak?

1. Günlük Cron Job Çalışır

Her gün 00:00'da otomatik çalışan script:

// Bugün biten trial'ları bul $expiredTrials = Subscription::whereHas('plan', function($q) { $q->where('is_trial', true); }) ->where('status', 'active') ->whereDate('ends_at', '<=', now()) ->get(); foreach ($expiredTrials as $trial) { // Status'u expired yap $trial->update(['status' => 'expired']); // Kullanıcıya bildirim gönder (opsiyonel) // "Trial'ın bitti, premium'a geç!" }

2. Kullanıcı Normal Üye Olur

  • user->isPremium()false döner
  • 30 saniye önizleme limiti geri gelir
  • Premium özelliklere erişemez

3. Premium'a Geçiş Teşviki

  • Müzik çalarken: "Premium'a geç, limitsiz dinle!" banner
  • Email: "Trial'ın bitti, %20 indirimle premium al!"
  • Bildirim: "Trial bitti, şimdi premium'a geç!"
💡 Hatırlatma Sistemi:

6. Gün (1 gün kala):

  • Email: "Yarın trial'ın bitiyor, premium'a geç!"
  • Push bildirim: "Trial sona eriyor!"

7. Gün (Son gün):

  • Email: "Bugün son gün! Özel indirim: %30"
  • Banner: "Trial bugün bitiyor! Kaçırma!"

📋 ÖZET: Baştan Sona Tüm Akış

🎬 Adım Adım:

Adım 1: Admin Trial Planı Oluşturur (Bir Kere)
  • Plan Adı: "Trial"
  • ☑️ Bu bir deneme üyeliğidir
  • Cycle: 7 gün, ₺0.00
  • Kaydet
Adım 2: Kullanıcı Kayıt Olur
  • Email, şifre girer
  • Submit
  • has_used_trial = false (varsayılan)
Adım 3: Sistem Otomatik Trial Başlatır
// 1. Trial planını bul $trialPlan = SubscriptionPlan::where('is_trial', true)->first(); // 2. Subscription oluştur Subscription::create([ 'plan_id' => $trialPlan->id, 'user_id' => $user->id, 'starts_at' => now(), 'ends_at' => now()->addDays(7), 'status' => 'active', ]); // 3. İşaretle $user->update(['has_used_trial' => true]);
Adım 4: Kullanıcı Premium Deneyimi Yaşar (7 Gün)
  • Sınırsız müzik dinler
  • isPremium() → true
  • Tüm premium özelliklere erişir
Adım 5: Hatırlatmalar (6. ve 7. Gün)
  • Email: "Trial bitiyor, premium'a geç!"
  • Banner: "Son 1 gün kaldı!"
Adım 6: Trial Biter (8. Gün)
  • Cron job: status = expired
  • Kullanıcı normal üye olur (30 saniye limit)
  • isPremium() → false
Adım 7: Premium Satın Alma (İsteğe Bağlı)
  • Kullanıcı aylık/yıllık plan seçer
  • Ödeme yapar
  • Premium subscription başlar
  • Trial subscription sona erer

🔧 Özel Durumlar & Çözümler

❓ Durum 1: Kullanıcı Trial Kullandı, İptal Etti, Tekrar Kayıt Olmak İstiyor

Cevap: Alamaz!

// Aynı email ile yeni kayıt olsa bile $user = User::where('email', 'ahmet@mail.com')->first(); $user->has_used_trial; // true (kalıcı) // ❌ Trial alamaz!

❓ Durum 2: Admin Kullanıcıya Trial Hakkı Yenilemek İstiyor

Çözüm: Manuel reset butonu (admin panelde)

// Admin Panel → User Detail → Trial Hakkı Yenile $user->update(['has_used_trial' => false]); // Şimdi kullanıcı tekrar trial alabilir

❓ Durum 3: Kullanıcı Trial Bitince Premium Almadan Bir Süre Normal Kullanıyor

Cevap: Sorun yok! İstediği zaman premium alabilir.

  • Trial bitti → Normal üye
  • 2 ay sonra → Premium satın alır
  • Premium başlar

❓ Durum 4: Trial Süresini 7 → 14 Güne Çıkardık, Mevcut Aktif Trial'lar?

Cevap: Mevcut trial'lar etkilenmez!

  • Ahmet'in 7 günlük trial'ı → 7 gün kalır
  • Yeni Mehmet'in trial'ı → 14 gün olur

✅ SON KARAR

🎯 Trial Sistemi - Kesin Kararlar

  1. Otomatik Başlatma: Kullanıcı kayıt olur olmaz trial otomatik başlar
  2. Süre Kaynağı: Trial planının cycle süresinden alınır (dinamik)
  3. Tek Kullanım: has_used_trial field ile garanti
  4. Checkbox: is_trial field (slug yerine)
  5. Tek Trial Planı: Sistemde sadece 1 plan is_trial = TRUE
  6. Tek Cycle: Trial planında sadece 1 cycle olabilir
  7. Otomatik Bitirme: Cron job ile günlük kontrol