Teknik Detaylar
Uygulama MVC mimarisi üzerinde Swift 5.6 ve UIKit ile geliştirildi. 97 dosyalık kod tabanı 4 ana modül içeriyor: Habits, Statistics, Notifications, Gamification.
Veri Katmanı:
Firebase Realtime Database ile bulut depolama. Veri yapısı: /users/{uid}/habits/{habitId}/completions/{date} şeklinde normalize edilmiş. Her alışkanlık objesi title, category, frequency (daily/weekly/custom), reminderTime, streakCount, longestStreak, totalCompletions ve createdAt alanlarını içerir. Completions alt koleksiyonunda her gün için {date: timestamp, completed: boolean, note: string?} kaydı tutulur.
Streak Hesaplama:
Calendar.current.startOfDay() ile gün başlangıcı normalize edilir. DateComponents ile gün farkı hesaplanır. Grace period için kullanıcı ayarındaki toleransSaati eklenerek eşik kontrol edilir. Streak kırıldığında en uzun streak (longestStreak) ayrı alan olarak saklanır — liderlik tablosu ve rozetler için referans.
Bildirim Sistemi:
UNUserNotificationCenter ile yerel bildirim zamanlama. UNCalendarNotificationTrigger ile tekrarlayan bildirimler (günlük, haftalık, özel günler). UNMutableNotificationContent ile kategori bazlı ikon ve mesaj şablonları. 64 bildirim limitini yönetmek için NotificationScheduler sınıfı: öncelik puanı = streak_uzunluğu * 2 + tamamlama_oranı * 1.5 + son_boş_geçen_gün_sayısı * 3. En yüksek puanlı 60 bildirim zamanlanır, kalan 4 slot acil hatırlatmalar için reserve edilir.
Gamification:
Rozet sistemi BadgeManager sınıfında merkezi yönetilir. Her rozet BadgeType enum'unda tanımlı: .beginner(days: 7), .developing(days: 21), .habit(days: 30), .expert(days: 66), .master(days: 100), .legend(days: 365). Rozet açıldığında UIView.animate ile scale + opacity animasyonu, UIImpactFeedbackGenerator ile haptic, ve konfeti efekti (CAEmitterLayer ile particle system). XP sistemi: günlük tamamlama 10 XP, streak bonusu streak*2 XP, rozet açma 50-500 XP. Seviye eşikleri: Level N = N*100 XP (Level 1: 100 XP, Level 10: 1000 XP).
İstatistik Grafikleri:
Charts framework ile 4 farklı görselleştirme: (1) Haftalık tamamlama çubuk grafiği (BarChartView), (2) Aylık trend çizgi grafiği (LineChartView), (3) Kategori bazlı pasta grafiği (PieChartView), (4) Isıtma haritası takvim görünümü (özel UICollectionView). Her grafik canlı veri ile güncellenir, animasyonlü geçiş efektleri ile görsel zenginlik sağlanır.
Widget:
WidgetKit ile Today widget — en önemli 3 alışkanlığın günlük durumu, streak sayısı ve tamamlama yüzdesi. Timeline provider ile her saat başında widget güncellenmesi. Deep link ile widget'tan doğrudan alışkanlık işaretleme ekranına geçiş.