
Things to Say: Bazı Sözler Zamanını Bekler
Müşteri
Bazı sözleri bugün yazmak, ama başka bir gün paylaşmak isteriz. Bir doğum gününde okunacak mektup, yıldönümüne bırakılmış bir mesaj ya da artık haber veremediğimiz bir zamanda yakınımıza ulaşmasını istediğimiz birkaç satır. Things to Say, bağımsız bir girişimcinin bu ihtiyaçtan yola çıkarak geliştirmek istediği mobil üründü.
Türkçede Söylenecekler adıyla da geçen uygulamanın çıkış noktası, “Bazı sözler zamanını bekler” cümlesinde karşılığını buluyor. Kullanıcı mektubunu yazıyor, isterse fotoğraf veya video ekliyor ve teslimat koşullarını belirliyor. Alıcıya ulaşan mektup tarayıcıda açılıyor; uygulama yüklemesi gerekmiyor.
Internative olarak kurucu için mobil uygulamayı, arayüzleri, backend’i, yönetim panelini ve web sitesini geliştirdik. Google Play mağaza hazırlığı, kapalı test ve yayın süreci de çalışmanın kapsamındaydı.
İhtiyaç
Bir zamanlanmış mesaj uygulaması için mektubu kaydetmek işin başlangıcı. İçeriğin beklediği süre boyunca gizli kalması, seçilen saat diliminin korunması ve teslimat zamanı geldiğinde gönderimin işlenmesi gerekiyor. Alıcının da kendisine gelen mektubu okuyabilmek için uygulamaya kayıt olması ya da uygulama kurması istenmiyordu.
Üstelik bütün mektuplar takvimdeki bir güne bağlı değildi. Kullanıcının düzenli iyilik yoklamalarına yanıt vermemesi durumunda gönderilecek mektuplar da vardı. Bu akışta, yoklamanın ardından beklenecek sürenin teslimat koşulunun bir parçası olarak ele alınması gerekiyordu.
Hedef kitlenin önemli bir bölümünü yaşça büyük yetişkinler oluşturuyordu. Dolayısıyla metni rahat okuyabilmek, menünün ne işe yaradığını anlamak ve uygulamanın simgesini bulabilmek temel ürün ihtiyaçlarıydı. Gizlilik, zamanlama ve erişilebilirlik kararlarını aynı geliştirme kapsamı içinde ele aldık.
Neler geliştirdik?
Yazma ve gönderim kararlarını bir araya getiren uygulama
Things to Say’i Flutter ile geliştirdik. Uygulama baştan sona Türkçe ve İngilizce kullanılabiliyor. Mektup yazma akışında metin, fotoğraf ve video ekleri, alıcılar ve gönderim ayarları bir araya geliyor. Kullanıcı her alıcı için e-posta, WhatsApp ile teslimat veya SMS seçeneklerinden birini belirleyebiliyor.
Gönderim türleri farklı ihtiyaçlara karşılık veriyor. Tek seferlik mektuplarda gün ve saat seçiliyor. Tekrarlayan gönderimler doğum günü ve yıldönümü gibi tarihler için kullanılıyor. Zamansız gönderimde ise uygulama belirli aralıklarla kullanıcının iyi olup olmadığını soruyor. Belirlenen bekleme süresinde yanıt gelmezse mektup teslim ediliyor.
Fotoğraf ve videolar cihazda optimize ediliyor; video işlemleri için yerel bir modül bulunuyor. Uygulamada push bildirimlerinin yanı sıra kredi sistemi ve aylık üyelik de yer alıyor. Satın alma akışı Google Play Billing üzerinden çalışıyor ve 14 günlük ücretsiz deneme sunuluyor.
Bu mobil uygulama geliştirme çalışmasında, mektubun içeriği kadar ne zaman ve hangi kanaldan ulaşacağı da ürünün parçasıydı. Flutter ile mobil uygulama geliştirme yaklaşımımızın başka bir örneği için bir diğer Flutter projemiz Sportez’in hikâyesine göz atabilirsiniz.
Cihazda başlayan, tarayıcıda çözülen şifreleme
Mektup ve eklenen medya, kullanıcının cihazında AES-256-GCM ile şifreleniyor. Sunucuda yalnızca şifreli içerik ve sarılmış anahtar tutuluyor. Ana anahtar ise Cloudflare Workers üzerinde çalışan ayrı bir anahtar servisinde bulunuyor.
Alıcıya gönderilen bağlantıda çözme anahtarı, URL’nin # işaretinden sonraki bölümünde taşınıyor. URL fragment’i adı verilen bu kısmı tarayıcılar sunucuya göndermiyor. İçeriğin şifresi alıcının tarayıcısında çözülüyor. Böylece sunucular ve teslimat kanalı sağlayıcıları mektubun açık metnini görmüyor.
Bu mimari, şifreli mesaj ile uygulama gerektirmeyen okuma deneyimini birlikte ele alıyor. Alıcının mektubu açtığı tarayıcı, içeriğin okunabilir hâle geldiği yer oluyor. Teslimat kanalı ise alıcıya bağlantıyı ulaştırıyor.
Gizlilik kararları operasyon tarafında da sürüyor. Loglara mesaj içeriği, anahtar veya alıcı adresi yazılmıyor. Yönetim panelinde mektupların içeriği hiçbir zaman gösterilmiyor. Uygulama güvenliği çalışmasının kapsamı böylece saklanan veriden teslimat bağlantısına ve yönetim ekranlarına kadar uzanıyor. Sistemi yönetmek için gereken bilgilerle kişisel mektubun içeriği ayrı tutuluyor.
Zamanı gelen mektup için belirlenmiş gönderim akışı
NestJS API, her 60 saniyede bir zamanı gelen mektupları bulup Dragonfly üzerinde çalışan BullMQ kuyruğuna ekliyor. Gönderimi ayrı bir worker süreci gerçekleştiriyor. Tarama ile gönderimin görevleri bu şekilde ayrılıyor.
Kuyruğa ulaşılamadığı durum için de bir yol bulunuyor: tarama süreci mektubu kendisi gönderiyor. Böylece teslimat akışının kuyruk erişimine bağlı kalan noktasında tanımlı bir alternatif var.
Teslimat işlemi idempotent çalışıyor; aynı mektubun yeniden işlenmesi yeni bir teslimat oluşturmuyor. Kanal başına hız sınırları ve teslimat bildirimleri bulunuyor. Her zamanlamayla birlikte saat dilimi bilgisi de saklanıyor.
Geleceğe mektup yazarken seçilen gün ve saat, anlatılmak istenenin bir parçası. Bu nedenle zamanlamanın arkasında tarama, kuyruğa alma ve gönderim görevlerini açıkça tanımladık. Kullanıcının seçtiği tarih uygulamada görünürken, teslimatın işlenmesi backend ve worker tarafından yürütülüyor.
Kapalı testin değiştirdiği ekranlar
Kapalı testte gelen geri bildirimler oldukça somuttu. Uygulama simgesi Samsung ana ekranında görünmüyordu. İkincil metinler yaşça büyük okurlar için ince kalıyordu. En büyük yazı boyutu yeterli bulunmamıştı ve alt menü anlaşılmıyordu.
Bu geri bildirimleri bir sürümde ürüne yansıttık. Yeni koyu yeşil simge, daha kalın yazılar, erişilebilirlik ekranı ve ilk girişte gösterilen kısa tur bu değişiklikler arasındaydı.
Erişilebilirlik ekranında beş yazı boyutu, kalın yazı seçeneği ve seçilebilir üç uygulama simgesi bulunuyor. İlk giriş turu ise uygulamayı kullanmaya başlayan kişiye kısa bir tanıtım sunuyor. Böylece testte dile getirilen okuma ve yön bulma ihtiyaçları, arayüzde karşılığı olan düzenlemelere dönüştü.
Bu projede arayüz tasarımı ve görsel sistemler çalışması, yazıların görünümünden uygulamanın ana ekranda bulunmasına kadar uzandı. Kapalı test, hangi noktaların yeniden ele alınması gerektiğini gösterdi. Yapılan değişikliklerin dayanağı da kullanıcıların karşılaştığı bu belirli sorunlardı.
Mektupları göstermeden ürünü yönetmek
Next.js ile geliştirdiğimiz yönetim panelinde kullanıcılar, SSS içerikleri, fiyat ve kredi tanımları, teslimat ve kanal durumları ile yedekler yönetilebiliyor. Türkçe ve İngilizce sözleşme metinleri sürümlü olarak tutuluyor; kayıt sırasında alınan onay kayıtları da panelin kapsamında yer alıyor.
Operasyonu takip eden kişi teslimat durumuna erişebiliyor, ancak mektubun içeriğini göremiyor. Bu ayrım yönetim panelinin işleyişine doğrudan yansıtıldı. Panelin sunduğu operasyonel görünürlük, kişisel mesajların okunmasını gerektirmiyor.
Backend tarafında uygulama içi satın almalar doğrulanıyor ve mağaza bildirimleri işleniyor. Yedekler her gece doğrulanıyor. Mobil uygulamaya eşlik eden Türkçe ve İngilizce thingstosay.app tanıtım sitesi ile alıcının mektubunu açtığı güvenli görüntüleme sayfasını da geliştirdik. Tanıtım sitesinde izleme kodu, çerez veya üçüncü taraf analitik bulunmuyor.
Sonuç
Things to Say, 8 Ekim 2026’dan beri Google Play’de yayında. Kapalı test tamamlandı, üretim erişimi onaylandı ve test sırasında alınan geri bildirimler bir sürümde ürüne işlendi.
Teslim edilen kapsam; mobil uygulama, backend, teslimat worker’ı, yönetim paneli, tanıtım sitesi ve alıcı görüntüleme sayfasını içeriyor. Cihazda şifreleme, saat dilimiyle birlikte saklanan zamanlama ve erişilebilirlik ayarları, yayındaki ürünün çalışan parçaları arasında yer alıyor.
Kapalı testten çıkan düzenlemeler, lansman sonrası destek ve iyileştirme çalışmalarına da somut bir yaklaşım örneği sunuyor. Görünmeyen bir simge, okunması zor bir metin veya anlaşılmayan bir menü, kapsamı belli bir ürün değişikliğine dönüşebiliyor. Things to Say’de bu geri bildirimler yayın öncesindeki geliştirmeye doğrudan yön verdi.
Teknoloji
Flutter · Riverpod · NestJS · Node.js · MongoDB · Dragonfly · BullMQ · Next.js · Cloudflare Workers ve R2 · OneSignal · Google Play Billing
Benzer bir ürün mü planlıyorsunuz?
Kişisel içerik, zamanlanmış teslimat veya erişilebilirlik ihtiyaçları olan bir mobil ürün planlıyorsanız bizimle iletişime geçin. Fikrinizi ve teknik gereksinimlerinizi birlikte ele alıp geliştirme kapsamını belirleyelim.
İlgili hizmetler
Bu konunun bir projeye dönüştüğü yer.





Okumaya devam edin
Müşteri Hikayeleri kategorisinden daha fazla yazı.



