Kişisel proje · 2026
MoodUs
Asıl ürünün widget olduğu bir çift uygulaması: partnerinin nasıl hissettiğini ana ekranında ve kilit ekranında tek bakışta gör.
- Rol
- Tek geliştirici ve tasarımcı — marka, mimari, iOS ve Android widget'ları
- Yıl
- 2026
- Durum
- Devam ediyor
- Teknolojiler
- React Native · Expo SDK 57 · TypeScript · Zustand · Firebase · Cloud Functions · SwiftUI WidgetKit · Expo native modules
Problem
Çiftler, uygulama açmadan birbirlerinin nasıl olduğunu sessizce bilmek istiyor. Uygulama sade kalıyor; ürünü widget taşıyor.
Yaklaşım
Widget'lar native olduğu için tek bir ortak widget durum sözleşmesi iki kez çiziliyor: iOS ana ve kilit ekranı için SwiftUI'da, Android için ana ekran widget'ı olarak. Özel bir Expo native modülü, uygulama ile iOS widget'ı arasında App Group üzerinden köprü kuruyor.
Veri katmanı, değiştirilebilir bir arayüzün arkasında önce sahte (mock) veriyle başladı; böylece Firebase daha yokken bütün uygulama çalıştı. Gerçek uygulama da ekranlara dokunmadan yerine oturdu. Firestore kuralları, eşleşme akışını kör katılım (blind join) mantığıyla doğruluyor.
Bilerek yepyeni bir Expo SDK'sı seçtim ve B planını yazdım: her native kütüphaneyi eklendiği anda doğrula, biri engel olursa sürümü düşür. Hiçbiri engel olmadı.
Nasıl akıyor
01
A bir ruh hâli seçer
Expo uygulaması · Zustand
02
Firestore
Tek çift dokümanı, gerçek zamanlı
03
B'nin uygulaması
Açıkken canlı dinleyici
04
Ortak widget durumu
Tek sözleşme · App Group / widget deposu
05
Native widget'lar
iOS ana + kilit ekranında SwiftUI · Android ana ekran
06 · Sıradaki
Push ile yenileme
Widget'ları arka planda günceller — sıradaki aşama
Neler geliştirdim
- Anonim kimlik doğrulama ile davet koduyla eşleşme
- Gerçek zamanlı ruh hâli, durum ve canlı sayaç
- “Özledim” sayacı ve “birlikteyiz” durumu
- iOS ana ve kilit ekranı widget'ları, Android ana ekran widget'ı
- On adet yazılı mimari karar kaydı (ADR)
Şu anki durum
iOS ve Android'de canlı Firebase ile çalışıyor; widget'lar iki platformda da hazır: iOS ana ve kilit ekranı, Android ana ekranı. Simülatör ve emülatörde doğrulandı. Sıradaki adımlar: bildirimle (push) tetiklenen widget yenileme ve gerçek cihazda test.