Örnek: tek codebase hem Telegram Mini App hem PWA
Müşterilerin bir kısmı Telegram’da yaşar. Bir kısmı botu hiç açmaz. Subeasy tarzı çift kapı: önce yerel UI, bir yolda initData, diğerinde normal oturum, messenger içindeyken Stars. Ürünü ayırmadan bunu nasıl kurardım.
Yalnızca Telegram içinde açılan bir Mini App tek kapılı bir üründür. Müşterileri zaten bota yazan bir salon için doğru. Instagram biosundan gelen sonraki kullanıcısı olan bir abonelik takipçisi, kurs kabini veya küçük bir SaaS için yanlış. Hem PWA hem Mini App olan abonelik takipçisi Subeasy, o ikinci durum için alacağım modeldir.
Bu örnekteki iş kişisel bir abonelik listesi: Netflix, spor salonu, Adobe, unuttuğunuz alan adı. İlginç olan liste değil. Aynı ekranların iki uygulamayı sürdürmeden hem Telegram panelinde hem ana ekran simgesinde çalışması.
1. İki kapı, bir ürün
Host’u algılayın. Pazarlama hikâyesini değil.
- Telegram içinde: `initData` var. Sunucuda HMAC doğrula, oturum = Telegram user id. Tema `themeParams`’tan. «Ekle» ve «upgrade» için MainButton. Bot «Adobe 3 gün sonra çekecek» diye hatırlatabilir.
- Tarayıcı / yüklü PWA: `initData` yok. Magic link veya passkey. Aynı liste UI. MainButton yerine alttaki CSS düğmesi. Çalıştığı yerde Web Push; iOS’ta uygulama içi zil.
- İki yolda da local-first. IndexedDB veya küçük bir yerel store listeyi tutar. Oturum varken Postgres’e senkron. Subeasy’nin noktası: ilk beş abonelik bir login duvarından önce eklenir.
2. Ne ortak kalmalı, ne ayrılmalı
Ekranları ayırırsanız Mini App, PWA’den üç hafta geride kalır. Adaptörleri ayırın. Sayfaları ortak tutun.
- Ortak: domain modeli, liste UI, grafikler, dışa aktarma, fiyat metni. Tek Next.js uygulaması. Bir `runtime` nesnesi: `platform: "telegram" | "web"`.
- Ayırın: auth adaptörü, krom (MainButton vs CSS), haptic, CloudStorage vs localStorage, ödeme. Telegram yolu Stars açabilir. Web Stripe veya Mono açar. Postgres’te aynı yetki satırı.
- Hesapları ilk boyamada değil sonra bağlayın. Kullanıcı PWA’de başlayıp sonra Telegram’ı açarsa bir kez «bu Telegram’ı bağla» sunun. Mini App’te birinci dakikada e-postayı zorlamayın.
3. İki checkout çizmeden para kazanmak
Premium platform başına SKU değil, kullanıcıdaki bir bayraktır. Duvar aynıdır: temalar, dışa aktarma, aile koltukları, AI «yayın için medyanın 3 katını ödüyorsunuz». Paranın girişi kapıya göre değişir.
- Telegram kapısı: bir aylık premium için Stars. Telegram’ın aldığının ötesinde Apple kesintisi yok. 4-12 € karşılığı için iyi. Bot makbuzu gönderebilir.
- Web kapısı: Stripe veya Mono aboneliği. Aynı webhook `premium_until` yazar. İkinci bir plan adı uydurmayın.
- Ücretsiz katman yararlı kalır. Subeasy takip uygulamasını bilerek sınırsız tutar. Ücretsiz Mini App bir demoyse PWA’yi de kimse kurmaz.
4. PWA ile ne zaman uğraşmazdım
İşin %90’ı zaten var olan bir grupta oluyorsa ikinci kapı kibirdir. Masraf bölüşme örneğinin PWA’ye ihtiyacı yoktur. Yalnızca Telegram’da sipariş veren müdavimler için yemek menüsünün de yoktur.
- Yabancılar bir URL’den geliyorsa çift kapı kurun: Instagram, site, e-posta. Mini App zaten sizinle yazışan kohort içindir.
- Masaüstü admin’i «yapabiliyoruz diye» PWA’ye sarmayın. Panel hâlâ telefon-öncelikli. Admin normal bir site olarak kalır.
Aynı ekranlar, iki host, bir defter
Hem «Telegram’da yaşıyorum» hem «bot kurmam» ile ayakta kalması gereken bir abonelik takipçisi, kurs kabini, freelancer’lar için küçük bir CRM veya herhangi bir araç için bu modelle açardım. Next.js, bir `runtime` anahtarı, local-first liste, girişte Postgres, Telegram içinde Stars ve web’de sıkıcı bir kart checkout’u. İki codebase yerine bu çift kapıyı istiyorsanız - formdan yazın. Para zaten oradaysa önce Telegram yolunu üretime alır, sonra PWA’yi aynı route’lara asarız.
Sadece okumak değil, kurmak mı lazım?
Telegram Mini App geliştirme: Next.js, ödemeler, botlar. Doğrudan yüklenici.
Projenizi konuşalım mı?
React ve Next.js konusunda uzman kıdemli bir web geliştiriciyim - dünya çapında freelance projelere açığım.
E-posta
i.vynnychenko@gmail.comKonum
Kyiv, Ukrayna
Upwork
Profili görüntüleTelegram
Bana yazınViber
Bana yazın