Local-first, no-backend habit tracker. Built with Flutter (desktop-first: Windows + Linux). See BLUEPRINT.md for the original design rationale.
Dört modül + bunları tek ekranda birleştiren bir panel: alışkanlıklar · mood · görevler · odak seansları.
En son sürümü indir →
(Windows, portable — kurulum gerektirmez, zip'i açıp aktenak_habit_tracker.exe'yi
çalıştırman yeterli.)
Uygulama imzasız olduğu için Windows SmartScreen bir uyarı gösterebilir ("Bilinmeyen yayımcı"). Bu bilinen bir sınır — kod imzalama sertifikası şu an kapsam dışı. Devam etmek için: Ek bilgi → Yine de çalıştır. Kaynağa güvenmek istemiyorsan kodun tamamı bu repoda, MIT lisanslı — inceleyip kendin derleyebilirsin.
Sorun/öneri için Issues sekmesini kullanabilirsin.
- Panel (açılış ekranı, günlük kullanımın çoğunu tek başına karşılar):
- üstte tarih,
X/Y alışkanlık, 7 günlük tamamlanma yüzdesi ve açık görev sayısı - bugünün alışkanlıkları — tek dokunuşla ✓ → ✗ → – → boş; sayılabilir olanlarda miktar girişi
- her alışkanlık için 30 günlük ısı şeridi (kendi renginin açık→koyu yoğunluğu; sayılabilir alışkanlıkta kısmi ilerleme de görünür) + 7 günlük yüzde
- odak sayacı (pomodoro 25/45/15 dk) ve bugün / son 7 gün odak süresi
- bu hafta görev bloğu + tek satırlık hızlı görev ekleme
- mood seçimi ve 30 günlük mood çizgisi
- genişliğe göre 3 / 2 / 1 sütuna iner
- üstte tarih,
- Görevler: başlık, durum (yapılacak/yapılıyor/bitti), öncelik, tarih. Aciliyete göre gruplanır (geciken · bugün · yarın · bu hafta · sonra · tarihsiz).
- Aylık: klasik kağıt tracker grid'i — satırlar alışkanlıklar, sütunlar günler (1-31). Hücreye dokununca durum döner. Grid'in hemen altında aynı gün eksenine hizalı mood çizgi grafiği. Ay ileri/geri gezilebilir.
- İstatistik: genel kartlar + her alışkanlık için mevcut/en uzun seri, tamamlanma yüzdesi ve son 30 gün şeridi. Ayrıca mood ↔ tamamlama oranı korelasyon görünümü (mood başına ortalama tamamlama + Pearson r).
- Alışkanlıklar: oluştur / düzenle / arşivle / sil. Ad, açıklama, tür (yap-yapma / sayılabilir + günlük hedef), kategori (Beden/Konuşma/Zihin), renk, ikon ve planlı günler (boş = her gün).
- Tema: koyu varsayılan; açık ya da sistem (Windows temasını takip eder) seçilebilir — üst çubuktaki düğme üçü arasında döner, Ayarlar'da da seçilir (tercih kalıcı). Her iki temada da metin/durum renkleri WCAG AA kontrast eşiğini (4.5:1) geçer.
- Pencere: boyutu, konumu ve büyütülmüş hali hatırlanır. Kayıtlı yer artık bağlı olmayan bir monitördeyse varsayılan yerde açılır.
- Sistem tepsisi (Windows/Linux): pencereyi kapatmak uygulamayı kapatmaz, tepsiye
küçültür — tepsi ipucu bugünkü
X/Ydurumunu gösterir, sağ tık menüsünden bugün için bekleyen alışkanlıkları tek tıkla ✓ işaretleyebilirsin. Tamamen çıkmak için menüdeki Çıkış. - Klavye kısayolları: Ctrl+1..4 sekmeler arası geçiş, Ctrl+N alışkanlık ekler.
- Ayarlar (Yedek & Ayarlar): Windows başlangıcında otomatik açılma (kapalı başlar, isteğe bağlı; açıksa oturum açılışında pencere fırlamaz, uygulama tepside başlar) ve akşam hatırlatıcısı — seçtiğin saatte bekleyen alışkanlık varsa bir bildirim gösterir.
- Yedek: tüm veri tek
.jsondosyası (format v4: alışkanlıklar + işaretlemeler + mood + görevler + seanslar). v1/v2/v3 yedekler içe aktarılabilir. Birleştir veya Tamamen değiştir seçenekleri. - Otomatik yedek: her gün bir kez veri klasöründeki
yedekler/altına tam JSON yedek alınır, son 14 gün saklanır (elle aldığın yedeklere dokunulmaz). Ayarlar'da veri klasörünün yolu görünür, Klasörü aç / Yedekleri aç ile açılır.
Veri tamamen yerel: drift (SQLite) ile cihazda saklanır. Sunucu, hesap, login yok.
Windows'ta yeri %APPDATA%\com.aktenak\aktenak_habit_tracker\ (v1.2.0–v1.2.1 yanlışlıkla
…\Aktenak Habit Tracker\ kullanıyordu; v1.3.0 oradaki veriyi ilk açılışta bir kez geri
taşır).
- Seri: planlı günlerde kesintisiz ✓; – (atlandı) seriyi bozmaz, ✗ ve boş geçmiş gün bozar; bugünün henüz işaretlenmemiş olması bozmaz.
- Tamamlanma oranı: ✓ / (planlı − atlanan).
Üç katman. core/ içinde tek bir GUI importu yoktur — bu kural
test/core_purity_test.dart ile zorlanır. Amacı: mantık ve şema başka bir arayüze
(telefon) taşınırken olduğu gibi kalsın, sadece features/ yeniden yazılsın.
lib/
main.dart # ProviderScope + locale init
app.dart # MaterialApp + üç sekmeli kabuk (Bugün/Aylık/İstatistik)
core/ # SAF MANTIK — Flutter importu yok
constants.dart # AppConstants, kWeekdayShort
enums.dart # EntryStatus, HabitKind, TaskStatus, SessionKind, Mood…
date_utils.dart # dayOf() — gün sınırının TEK kaynağı
streak.dart # alışkanlık başına seri / tamamlanma
stats.dart # günlük oran, heatmap, Pearson korelasyon
tasks.dart # görev gruplama / sıralama / özet
sessions.dart # odak süresi toplamları, süre biçimlendirme
data/
database/ # drift tabloları + AppDatabase (+ .g.dart), schema v4
models/ # HabitTodayView
repositories/ # habit_, task_, session_, backup_repository
providers.dart # Riverpod (tema, dayStartHour, todayProvider, özetler)
features/ # ARAYÜZ — hesap yapmaz, core'u çağırır
dashboard/ tasks/ home/ stats/ habits/ backup/
shared/ # sunum ortakları
theme.dart # AppColors (ThemeExtension) + AppTheme + kTabularNums
habit_style.dart # renk/ikon paletleri
habit_actions.dart # işaretleme akışı (bool döngü / sayı girişi)
widgets/ # HabitAvatar, StreakBadge, StatusMark, CountEntryDialog
Her migration adımı idempotent olmalı: sütun/tablo eklemeden önce varlığı kontrol
edilir. Gerekçe gerçek bir arıza: uygulama yükseltme sırasında kapanınca DDL kalıcı oldu
ama sürüm numarası geri alındı; sonraki her açılış duplicate column name ile patladı ve
veritabanı kalıcı olarak kilitlendi. test/migration_test.dart bu senaryoyu tutuyor.
Bir izleme günü gece yarısında değil, day_start_hour'da (varsayılan 04:00) başlar.
Saat 01:35'te işaretlenen alışkanlık biten güne yazılır. Tüm tarih hesapları
core/date_utils.dart'taki dayOf() fonksiyonundan geçer; arayüz günü doğrudan değil
todayProvider'dan okur (uygulama gece açık kalırsa kendiliğinden döner).
kind='bool'— tek dokunuş ✓/✗/–kind='count'— günlüktarget'a karşı sayı (ör. 10000 adım);habit_entries.valuegirilen miktarı tutar, hedefe ulaşınca gün ✓ sayılır.
Testler: flutter test → 72 test (71 geçer, 1 gerçek yedek dosyası olmayan makinelerde
atlanır) — saf mantık (seri, istatistik, görev sıralama,
odak toplamları), gün sınırı, core/ saflığı, migration (gerçek veri + yarım kalmış
yükseltme onarımı), panel düzeni üç kırılma noktasında, uçtan uca alışkanlık ekleme.
Gereksinimler: Flutter SDK (stable), Windows
masaüstü derlemesi için Visual Studio Build Tools + "Desktop development with C++" workload
(flutter doctor eksik olanı gösterir).
flutter pub get
dart run build_runner build # drift kod üretimi (tabloları değiştirince)
flutter analyze
flutter test
flutter run -d windows # veya: flutter build windows --release