2017 ile 2020 arasında PWA bir teknoloji hype döngüsünün zirvesindeydi. Konferanslar, blog yazıları, Google ve Microsoft'tan resmi destekler. Sonra hayal kırıklığı geldi — iOS önemli API'leri kapalı tuttu, kurulum adımları kafa karıştırıcıydı ve native uygulamaların pazarlaması hâlâ daha güçlüydü. Topluluk Flutter, React Native ve Capacitor'a yöneldi.
Ancak arka planda sessizce başka bir şey oldu. PWA altyapısı olgunlaşmaya devam etti. Apple son birkaç yılda eksik API'leri ekledi, tarayıcılar kurulum akışını iyileştirdi, service worker standartları oturdu. Ve büyük bütçesi olmayan ürün ekipleri için PWA şaşırtıcı derecede güçlü bir seçenek hâline geldi.
Bu yazı, PWA olarak inşa edilmiş bir kurumsal tahmin ligi olan trefa.app'in canlıda geçen bir yılının ardından hazırlanan dürüst bir vaka çalışmasıdır. Neler işe yaradı, neler eksik kaldı ve bugün PWA'yı kimlere tavsiye ederim?
Bağlam: trefa.app nedir?
Trefa.app, kurumsal tahmin ligleri için tasarlanmış bir web uygulamasıdır. Kullanıcı Google ile giriş yapar, şirketi için bir lig oluşturur, bir bağlantı ya da QR kod aracılığıyla iş arkadaşlarını davet eder ve birlikte maç sonuçlarını tahmin ederler. Uygulama, spor API'lerinden (NHL, Premier Lig, Dünya Şampiyonaları) verileri senkronize eder ve puanları gerçek zamanlı olarak yeniden hesaplar.
Frontend tarafında Next.js 16 + React 19 + Tailwind var ve Vercel üzerinde barındırılıyor. Backend tarafında ise Hetzner üzerinde Django 5 + DRF + Channels çalışıyor. Aradaki katmanda Supabase üzerinde PostgreSQL ve gerçek zamanlı iletişim için Redis bulunuyor.
Hoş bir ayrıntı: native bir iOS ya da Android uygulaması yok. Tek istemci PWA'nın kendisi. iPhone, Android, Windows ve macOS kullanıcılarının hepsi tam olarak aynı şeyi kullanıyor.
Neden native yerine PWA'yı seçtik?
Bu karar büyük ölçüde ekonomikti. Native bir uygulama şu anlama gelirdi:
- İki paralel istemci geliştirmek (iOS Swift + Android Kotlin) ya da çapraz platform bir framework kullanmak (Flutter, React Native).
- App Store + Google Play yayın süreci — yayın ücretleri, inceleme gecikmeleri, backend API değişikliklerinde periyodik olarak yeniden yayınlama.
- APNs ve FCM üzerinden push bildirimleri; iki ayrı altyapı, iki ayrı sertifikasyon süreci.
- Mağazalar üzerinden güncelleme akışı — kullanıcının aktif olarak güncelleme yapması gerekir, kullanıcıların önemli bir kısmı aylarca eski bir sürümde kalır.
Hedef kitlesi nispeten küçük olan bir ürün için (kitlesel pazar değil, şirket ekipleri), native geliştirmenin maliyeti faydasından belirgin biçimde yüksekti. PWA, yukarıdaki her şeyi tek seferde ortadan kaldırdı.
Kullanıcıların asla fark etmeyeceği teknik avantajlar
Bu, canlıya geçmeden önce hafife alacağım kısımdı. Geliştirme açısından bakıldığında PWA, yılda haftalarca iş tasarrufu sağlayan bir dizi somut avantaj sunuyor:
Dağıtım anında gerçekleşiyor. main dalına push at → Vercel derlesin → 2 dakika içinde yeni sürüm tüm kullanıcıların önünde. Yayın yok, bekleme yok, istemci ile backend sürümleri arasında uyumluluk cambazlığı yok. Geriye dönük uyumluluğu bozan bir API değişikliği yaparsam, ertesi gün bir düzeltme gönderebilirim ve herkeste anında oluyor.
Her şey için tek bir kod tabanı. iOS, Android, Windows, macOS, Linux — her yerde aynı uygulama. Platforma özgü hatalar yok ("bu yalnızca karanlık moddaki iPhone 13'te bozuluyor"), tekrarlanan implementasyon yok.
Kullanıcıya giden kısa yol. Bir bağlantı gönder, tıkla, uygulamadasın. "Uygulamamızı App Store'dan indir, kaydol, sonra giriş yap" yok. Düşük sıklıkta kullanılan B2B ürünleri için (bir tahmin ligi yalnızca bir spor turnuvası boyunca çalışır) bu, dönüşüm açısından muazzam bir avantaj.
Push bildirimleri kurulum yapılmadan bile çalışıyor. Service worker, push aboneliğini kaydediyor. Kullanıcı "Bildirimlere izin ver" dediğinde, uygulamayı ana ekrana ekleyip eklemediğine ya da sadece arada bir Safari'de açıp açmadığına bakılmaksızın maçlardan önce uyarılar almaya başlıyor.
PWA'nın yapamadıkları (dürüst bölüm)
Burada dürüstlük pazarlamadan daha önemli. PWA'nın canlıda karşılaştığımız gerçek sınırları var.
iOS push bildirimleri bazı koşullarla geliyor. Apple Web Push, iOS 16.4'ten beri var ama yalnızca kullanıcı PWA'yı ana ekrana eklediyse çalışıyor. Uygulamayı Safari sekmeleri üzerinden kullanıyorsa push aboneliği kalıcı olmuyor. Bu, native uygulamalarda olmayan bir sürtünme.
App Store görünürlüğü eksik. Bazı alıcı profilleri için (İK departmanları, kurumsal BT yöneticileri) "App Store'da yok", "ciddi değil" anlamına geliyor. Öznel ama gerçek.
Bazı işletim sistemi API'leri kullanılamıyor. Bluetooth Low Energy, NFC, tam dosya sistemi erişimi — tipik bir uygulama için sorun değil ama bu özelliklere ihtiyacın varsa PWA seni sınırlıyor.
Çevrimdışı mod mümkün ama otomatik değil. Service worker'ın manuel olarak kurulması, önbellek stratejilerinin tasarlanması, senkronizasyon kuyruklarının uygulanması gerekiyor. Tamamen çevrimdışı öncelikli bir uygulama için bu, geliştiricilerin beklediğinden daha fazla iş demek.
Native'e karşı performans karşılaştırması: PWA, ilk yüklemede (JS bundle ayrıştırması) ~%15–25, günlük etkileşimlerde ise ~%5–10 daha yavaş. Çoğu uygulama için fark edilmez, ama ağır oyunlar ya da video düzenleme için anlaşmayı bozan bir etken.
Canlıda geçen bir yılın ardından sonuçlar
trefa.app'in bir yıllık çalışmasının ardından somut veriler:
- Platformlar arası kararlılık — tek kişilik bir geliştirme ekibi, uygulamayı tüm işletim sistemlerinde platforma özgü hatalar olmadan sürdürüyor. Hepsi için aynı test döngüsü.
- Dağıtım sıklığı — Vercel üzerinden ortalama haftada 3–5 dağıtım. Hiçbiri App Store yayın gecikmeleriyle uğraşmıyor.
- Push bildirimleri — kullanıcıların ~%70'i aktif, push teslim oranı Android'de ~%95, iOS'ta ~%85 (ana ekrana kurulum gerekliliği nedeniyle).
- App Store ücreti yok — geliştirici hesaplarında yılda kabaca 70 USD tasarruf, artı işlemler üzerindeki yaklaşık %30 komisyon (aksi takdirde uygulama içi satın almalar için geçerli olurdu).
Ancak asıl iş faydası teknik değildi. İterasyon hızıydı. Bir müşteri "bu özellik bana yardımcı olurdu" diye yazdığında, genellikle aynı gün başlar ve hafta içinde yayına alırdım. Bu, native bir uygulamayla basitçe mümkün değil.
Bugün PWA'yı kimlere tavsiye ederim?
Aşağıdakilerden en az ikisi geçerliyse PWA uygun bir seçenek:
- Kısıtlı kaynakların var ve iki native uygulamanın yanı sıra bir de web sürümünü karşılayamıyorsun.
- Kullanıcıların uygulamayı arada bir kullanıyor (her gün değil), bu yüzden ilk açılışta düşük sürtünme önemli.
- Uygulamanın ağır işletim sistemi API'lerine ihtiyaç duymuyor (Bluetooth, NFC, tam dosya sistemi).
- Uygulama mağazaları araya girmeden dağıtım yapmak istiyorsun.
- Kitlen karışık — iOS artı Android, mobil artı masaüstü.
PWA muhtemelen doğru tercih değil eğer:
- Uygulaman her gün, günde birkaç saat çalışıyor ve kullanıcılar onu yoğun biçimde kullanıyorsa (sosyal medya, mesajlaşma).
- Gelişmiş işletim sistemi entegrasyonlarına ihtiyacın varsa.
- Alıcıların App Store görünürlüğü bekliyorsa.
- Performans kritikse (oyun, video, AR).
Sonuç
PWA hype'ı geride kalmış olabilir ama teknoloji, birçok ürün için native'e geçmekten daha iyi bir tercih hâline gelecek noktaya sessizce olgunlaştı. Trefa.app bir yıldır PWA üzerinde çalışıyor ve bunu değiştirmek için hiçbir neden görmüyorum. Aksine — bugün yeniden başlasaydım, bu yola daha hızlı girerdim.
Projen için PWA ile native bir uygulamayı karşılaştırıyorsan, teknik argümanların ötesinde bir şeyi de göz önünde bulundur: PWA seni yayına daha hızlı taşır. Ve erken aşamalarda iterasyon hızı her şeyden daha değerlidir.
Bu arada, trefa.app'i kendin de deneyebilirsin — kurulum yok, sadece bir tık ve tahmin yapmaya başlıyorsun.
