Yönetici Özeti
Ne Yapıyoruz?
Muzibu, işletmelere (kafe, restoran, otel, ofis) kesintisiz arka plan müziği sunan bir B2B platformudur. Kullanıcılar sabah uygulamayı açar, müziği başlatır ve gün boyu (10-15 saat) hiç dokunmadan çalmasını bekler.
Mobil uygulama, web sitesiyle aynı deneyimi sunmalı: Sabah aç, akşama kadar donmadan çalsın.
Teknoloji Seçimi: Flutter
Google'ın cross-platform framework'ü
1. Hedef & Vizyon
Tipik Kullanıcı Senaryosu
Hedef Kullanıcı Profili
Cihaz Durumu
- • 5-7 yıllık eski iPad/Android tablet
- • 2-3 GB RAM (düşük bellek)
- • Genellikle prize takılı (şarj sorunu yok)
İnternet Durumu
- • Yavaş veya düzensiz bağlantı
- • WiFi kesintileri olabilir
- • Bazen 3G/4G'ye düşer
Kullanıcı Profili
- • Teknik bilgisi düşük
- • "Tek tıkla çalsın" beklentisi
- • Sorun çözme kapasitesi sınırlı
Kritik Beklenti
- • ASLA donmamalı
- • ASLA sessiz kalmamalı
- • ASLA çökmemeli
Başarı Kriterleri
2. Neden Flutter?
Basit Anlatım
Flutter, Google'ın geliştirdiği bir framework. Tek kod yazarak hem iPhone hem Android için uygulama çıkarabiliyoruz. React Native'e göre daha hızlı çalışıyor çünkü kod doğrudan makine diline derleniyor (JavaScript köprüsü yok).
Detaylı Karşılaştırma
| Kriter | React Native | Flutter | Neden Önemli? |
|---|---|---|---|
| Audio Kütüphaneleri | react-native-track-player | just_audio + audio_service ✓ | Flutter'ın audio sistemi daha olgun ve HLS desteği native |
| Gapless Playback | Sınırlı ⚠ | Native destek ✓ | Şarkılar arası boşluk kullanıcıyı rahatsız eder |
| Background Playback | Extra setup gerekli | audio_service isolate ✓ | Uygulama arka planda müzik çalmalı |
| Performans | JS Bridge overhead | Native ARM compile ✓ | 15 saat çalışacak, her ms önemli |
| Memory Management | GC tahmin edilemez ⚠ | Dart VM optimize ✓ | Memory leak = 15 saatte çökme |
| UI Tutarlılığı | Platform-specific | Pixel-perfect ✓ | Marka tutarlılığı için önemli |
| Hot Reload | Fast Refresh | Stateful Hot Reload ✓ | Geliştirme hızı |
| Build Size | ~20 MB | ~12 MB ✓ | Eski cihazlarda depolama sınırlı |
| Öğrenme Eğrisi | JS/React biliyorsan kolay ✓ | Dart öğrenmek gerek | Dart öğrenmesi kolay, 1-2 hafta |
Audio için yetersiz, memory sorunları olabilir
Audio mükemmel, performans yüksek, memory stabil
3. Kesintisiz Müzik Sistemi
Basit Anlatım
Müziğin donmaması için 3 temel strateji uyguluyoruz: (1) İnternet hızına göre otomatik kalite ayarı (HLS), (2) Şarkı bitmeden sonrakini arka planda yükleme (preload), (3) İnternet kesilirse bile çalmaya devam (buffer).
HLS Adaptive Streaming (Akıllı Kalite)
HLS (HTTP Live Streaming), internet hızına göre otomatik kalite ayarı yapar. Bağlantı yavaşlarsa kaliteyi düşürür ama asla durmaz.
Fallback Zinciri (Yedek Planlar)
HLS başarısız olursa sırayla yedek planlara geçer. Hiçbir durumda sessiz kalmaz.
Teknik Uygulama (Flutter)
// Flutter'da kesintisiz müzik için kullanılacak paketler just_audio: ^0.9.36 → HLS/MP3 playback, gapless queue, preload audio_service: ^0.18.12 → Background playback (uygulama kapalıyken) → Lock screen controls (kilit ekranında kontrol) → Notification player (bildirim çubuğunda mini player) audio_session: ^0.1.18 → Audio focus yönetimi (telefon gelince duraklat) → Ses kesintisi handling (başka uygulama ses çalınca) // Gapless queue örneği final playlist = ConcatenatingAudioSource( children: [ AudioSource.uri(Uri.parse('song1.m3u8')), AudioSource.uri(Uri.parse('song2.m3u8')), AudioSource.uri(Uri.parse('song3.m3u8')), ], ); await player.setAudioSource(playlist); // Şarkılar arası boşluk YOK - otomatik preload
Gapless Playback
Şarkılar arası boşluk yok. Sonraki şarkı önceden yüklenir.
Aggressive Buffer
30 saniyelik buffer. İnternet 30 sn kesilse bile çalmaya devam.
Auto Recovery
Bağlantı gelince otomatik devam. Manuel müdahale gerekmez.
5. Ödeme Sistemi (In-App Purchase)
Basit Anlatım
Kullanıcılar uygulama içinden abonelik satın alabilecek. Apple kullanıcıları App Store üzerinden, Android kullanıcıları Google Play üzerinden ödeme yapacak. Her iki platform da %15-30 komisyon alıyor.
Google Play Billing
Android için
App Store Connect
iOS için
Abonelik Planları
Teknik Uygulama
# pubspec.yaml - Ödeme Paketleri dependencies: in_app_purchase: ^3.1.13 # Official Flutter IAP purchases_flutter: ^6.17.0 # RevenueCat SDK (opsiyonel) # RevenueCat neden öneriliyor? → Tek API ile hem iOS hem Android yönetimi → Otomatik receipt validation → Subscription analytics dashboard → Webhook entegrasyonu (backend'e bildirim) → Churn prevention tools # Purchase flow: 1. Kullanıcı plan seçer 2. Store native payment sheet açılır 3. Kullanıcı parmak izi/Face ID ile onaylar 4. Purchase receipt alınır 5. Receipt backend'e gönderilir 6. Backend store API ile doğrular 7. Kullanıcı premium olur
Backend Webhook Gereksinimleri
Google Play
- • Real-time Developer Notifications
- • Pub/Sub webhook endpoint
- • Receipt verification API
App Store
- • Server-to-Server Notifications V2
- • verifyReceipt endpoint
- • JWS token validation
6. API Entegrasyon
Mevcut Durum
Muzibu'nun REST API'si hazır ve çalışıyor. Mobil uygulama bu API'yi kullanacak. Sanctum token sistemi ile güvenli iletişim. Rate limiting ile korunuyor.
Authentication
| POST | /api/auth/login | E-posta/şifre ile giriş |
| POST | /api/auth/social | Social login (Google/FB/Apple) |
| GET | /api/auth/me | Kullanıcı bilgisi + premium durumu |
| POST | /api/auth/logout | Çıkış yap |
Streaming
| GET | /api/muzibu/songs/{id}/stream | HLS/MP3 stream URL al |
| POST | /api/muzibu/songs/{id}/track-start | Çalma başladı (analytics) |
| POST | /api/muzibu/songs/{id}/track-hit | 30sn dinlendi (play count) |
| POST | /api/muzibu/songs/{id}/track-end | Çalma bitti |
Queue & Content
| GET | /api/muzibu/queue/initial | Başlangıç şarkı listesi |
| POST | /api/muzibu/queue/refill | Daha fazla şarkı yükle |
| GET | /api/muzibu/playlists | Playlist listesi |
| GET | /api/muzibu/genres | Tür listesi |
| GET | /api/muzibu/sectors | Sektör listesi |
7. Uygulama Mimarisi
┌────────────────────────────────────────────────────────────────┐
│ FLUTTER APP │
├────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ UI LAYER │ │
│ │ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │ │
│ │ │ Login │ │ Home │ │ Player │ │Library │ │ │
│ │ └────────┘ └────────┘ └────────┘ └────────┘ │ │
│ └──────────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────┐ │
│ │ STATE MANAGEMENT (Riverpod) │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │AuthState │ │PlayerState│ │ContentState│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └──────────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────┐ │
│ │ SERVICE LAYER │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │ │
│ │ │ Auth │ │ Music │ │ Payment │ │Analytics│ │ │
│ │ │ Service │ │ Service │ │ Service │ │ Service │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └─────────┘ │ │
│ └──────────────────────────┬───────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────┐ │
│ │ REPOSITORY LAYER │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Remote │ │ Local │ │ Cache │ │ │
│ │ │ (API) │ │ (Hive) │ │ Manager │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
├────────────────────────────────────────────────────────────────┤
│ AUDIO SERVICE (Background Isolate) │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ just_audio + audio_service + audio_session │ │
│ │ • HLS Adaptive Streaming │ │
│ │ • Gapless Queue │ │
│ │ • Lock Screen Controls │ │
│ │ • Background Playback │ │
│ └────────────────────────────────────────────────────────┘ │
└────────────────────────────────────────────────────────────────┘
│
▼
┌────────────────────────────────────────────────────────────────┐
│ MUZIBU REST API │
│ Laravel + Sanctum + Multi-tenant │
└────────────────────────────────────────────────────────────────┘
lib/ ├── main.dart # Entry point ├── app/ │ ├── app.dart # MaterialApp │ ├── routes.dart # GoRouter navigation │ └── theme.dart # Muzibu tema ├── core/ │ ├── api/ │ │ ├── dio_client.dart # HTTP client │ │ └── interceptors/ # Auth, error handling │ ├── constants/ # API URLs, keys │ └── utils/ # Helpers ├── features/ │ ├── auth/ # Login, Social Login │ ├── home/ # Ana sayfa │ ├── player/ # Audio player │ ├── playlists/ # Playlist yönetimi │ ├── search/ # Arama │ ├── library/ # Kütüphane │ ├── subscription/ # Abonelik & IAP │ └── settings/ # Ayarlar ├── services/ │ ├── audio_handler.dart # Background audio │ ├── auth_service.dart # Authentication │ ├── payment_service.dart # In-App Purchase │ └── analytics_service.dart # Play tracking ├── models/ # Data models ├── providers/ # Riverpod providers └── widgets/ # Reusable components
8. Tasarım Sistemi
Renk Paleti
Ekranlar
9. Geliştirme Yol Haritası
Geliştirme Stratejisi
Geliştirme 6 fazda ilerleyecek. Her faz sonunda çalışan bir ürün olacak (MVP yaklaşımı). İlk 3 faz sonunda temel uygulama hazır olacak, sonraki fazlar ek özellikler ekleyecek.
Faz 1: Temel Altyapı
KritikFlutter projesi kurulur, tasarım sistemi oluşturulur, API bağlantısı yapılır. Bu faz tamamlandığında giriş yapılabilir ve boş bir ana sayfa görülebilir.
Faz 2: Audio Player (Kalp)
En KritikUygulamanın kalbi olan audio player geliştirilir. HLS streaming, background playback, gapless queue ve lock screen kontrolleri bu fazda tamamlanır. Bu faz en önemli fazdır.
Faz 3: İçerik & Keşif
MVP TamamlamaAna sayfa, arama, playlist yönetimi ve kütüphane ekranları tamamlanır. Bu faz sonunda MVP (Minimum Viable Product) hazır olur.
Faz 4: Social Login & Payments
MonetizationGoogle/Facebook/Apple ile giriş ve uygulama içi satın alma eklenir. Bu faz sonunda gelir elde edilebilir.
Faz 5: Kurumsal & İleri Özellikler
B2B FeaturesKurumsal müşteriler için özel özellikler: spot/anons sistemi, sektör seçimi, offline cache ve push notifications.
Faz 6: Test & Release
ProductionKapsamlı testler, performans optimizasyonu, 15 saatlik oturum testleri ve store yayın hazırlığı.
10. Teknik Detaylar
# pubspec.yaml - Tüm Paketler # Core flutter: SDK cupertino_icons: ^1.0.6 # State Management flutter_riverpod: ^2.4.9 # State management riverpod_annotation: ^2.3.3 # Code generation # Audio just_audio: ^0.9.36 # Audio playback (HLS, gapless) audio_service: ^0.18.12 # Background playback audio_session: ^0.1.18 # Audio focus # Network dio: ^5.4.0 # HTTP client connectivity_plus: ^5.0.2 # Network status # Storage flutter_secure_storage: ^9.0.0 # Secure token storage hive: ^2.2.3 # Local database hive_flutter: ^1.1.0 # Hive Flutter bindings # Auth google_sign_in: ^6.2.1 # Google OAuth flutter_facebook_auth: ^6.1.1 # Facebook Login sign_in_with_apple: ^5.0.0 # Apple Sign In # Payments in_app_purchase: ^3.1.13 # In-App Purchase purchases_flutter: ^6.17.0 # RevenueCat (opsiyonel) # UI cached_network_image: ^3.3.1 # Image caching shimmer: ^3.0.0 # Loading skeleton go_router: ^13.0.0 # Navigation # Notifications firebase_messaging: ^14.7.10 # Push notifications flutter_local_notifications: # Local notifications
11. Riskler & Çözümler
Risk: Memory Leak (15 saat çalışma)
Uzun oturumlarda bellek sızıntısı uygulama çökmesine yol açabilir.
Çözüm: Dart DevTools ile profiling, WeakReference kullanımı, periyodik GC tetikleme, 15 saat stress testleri.
Risk: Zayıf İnternet Bağlantısı
Kötü internet müziğin durmasına neden olabilir.
Çözüm: HLS adaptive streaming, 30sn buffer, fallback chain, offline cache.
Risk: Eski Cihaz Uyumsuzluğu
5-7 yıllık cihazlarda performans sorunları yaşanabilir.
Çözüm: Minimum SDK iOS 12 / Android 6, düşük RAM optimizasyonu, hafif UI animasyonları.
Risk: Store Komisyonları
Apple/Google %15-30 komisyon alıyor.
Çözüm: Yıllık abonelik teşviki, web üzerinden alternatif ödeme (kurumsal), Small Business Program başvurusu.
Sonuç
Muzibu mobil uygulaması, Flutter ile geliştirilecek. Kesintisiz müzik için HLS adaptive streaming, gapless playback ve aggressive buffer kullanılacak. Google/Facebook/Apple login ve In-App Purchase ile tam ticari ürün oluşturulacak.
4. Social Login Sistemi
Basit Anlatım
Kullanıcılar e-posta/şifre yerine mevcut Google, Facebook veya Apple hesaplarıyla tek tıkla giriş yapabilecek. Bu hem kullanıcı için kolay, hem de şifre unutma sorunlarını ortadan kaldırır.
Google
google_sign_in
Facebook
flutter_facebook_auth
Apple
sign_in_with_apple
Flutter Paketleri
Backend API Gereksinimi
Mevcut Laravel backend'e yeni endpoint eklenmeli:
POST /api/auth/social { "provider": "google|facebook|apple", "id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6..." }