habiloop

🔁 Habiloop

Aralıklı alışkanlık takibi. Klasik “her gün streak” yerine her alışkanlığın bir penceresi var: yaptığın günden itibaren ideal gün ve son gün hesaplanır, yapınca pencere sıfırlanır.

Örnek: Kedi kumu — her 3 günde bir, 1 gün tolerans. Çarşamba temizlersen:

Gün Durum
Perşembe, Cuma 🟢 Rahat
Cumartesi 🟡 İdeal gün
Pazar 🔴 Son gün
Pazartesi ⛔ Gecikti

Özellikler

Kurulum

  1. Supabase projesi oluştur (supabase.com).
    • SQL Editor’de supabase/migrations/0001_init.sql dosyasını çalıştır.
    • Authentication → URL Configuration: Site URL’yi uygulama adresin yap, https://<app>/auth/callback adresini Redirect URLs’e ekle.
  2. Ortam değişkenleri: .env.example dosyasını .env.local olarak kopyala ve doldur.
    • VAPID anahtarları: npm run vapid
    • CRON_SECRET: rastgele uzun bir değer (openssl rand -hex 32)
  3. Yerelde çalıştır: npm install && npm run dev
  4. Yayınla: Vercel’e import et, aynı ortam değişkenlerini ekle.
  5. Hatırlatmaları etkinleştir: supabase/cron.sql içindeki URL ve secret’ı düzenleyip Supabase SQL Editor’de çalıştır. Saatlik çalışır; her kullanıcıya kendi saat diliminde seçtiği saatte bildirim gider.

iPhone’da bildirim için uygulamayı Safari → Paylaş → Ana Ekrana Ekle ile kurman gerekir (iOS 16.4+).

Cron’u elle denemek için:

curl -X POST -H "x-cron-secret: $CRON_SECRET" http://localhost:3000/api/cron/remind

Geliştirme

npm test          # pencere, istatistik, öneri ve hatırlatma mantığı testleri
npm run typecheck
npm run lint
npm run build

Çekirdek mantık saf fonksiyonlar halinde src/lib/ altında: schedule.ts (pencere hesaplama), stats.ts (zamanında yapma oranı), suggest.ts (aralık önerisi), reminders.ts (bildirim metni).