Finansal-Takip-

Proje Dokümantasyonu

Finansal Takip Paneli’nin teknik yapısı. Genel tanıtım için README.md, geliştirme kuralları için RULES.md.

1. Genel yapı

Uygulama iki parçadan oluşur:

Worker adresi ön yüzde MY_WORKER sabitindedir.

2. Kimlik doğrulama ve hesaplar

Panel çok kullanıcılıdır. Kayıt ekranı yoktur; hesapları yönetici açar.

  1. Tablolar (D1): users (id, email UNIQUE, ad, pass_hash, pass_salt, pass_iter, role 'admin'|'user', disabled, must_change, created_at, last_login, foto, ayar) (foto: 192×192 JPEG data URL, en fazla 120 KB, FOTO_RE ile doğrulanır; ayar: JSON tercihler, yalnız TERCIH_ALANLARI = acilis; iki sütun semaHazirla‘da pragma_table_info kontrolüyle bir kez eklenir), sessions (token_hash PK, user_id, created_at, expires_at, last_seen), ukv (user_id, key, value, updated_at, PK(user_id, key)), auth_fail (ip, ts). Eski tek kullanıcılı kv tablosu yedek olarak durur, artık okunmaz.
  2. Şifre: PBKDF2-SHA256, 16 bayt rastgele tuz, SIFRE_ITER = 20.000 tekrar (Workers ücretsiz planı istek başına ~10 ms CPU verir; 60.000 ≈ 22 ms ölçüldü). Tekrar sayısı kullanıcı başına saklanır; artırılırsa eski şifreler kendi sayısıyla doğrulanmaya devam eder. En az 8 karakter.
  3. Giriş: POST /auth/login {email, password} → {token, kullanici:{id,email,ad,rol,sifreDegismeli}}. Token 32 rastgele bayt (base64url); veritabanında yalnızca SHA-256 özeti tutulur. 60 gün geçerli, kullanıldıkça uzar (saatte en fazla bir yazma; eski 180 günlük oturumlar ilk kullanımda 60 güne çekilir). Kayıtlı olmayan e-postada da aynı PBKDF2 hesabı yapılır (e-postanın kayıtlı olup olmadığı süreden anlaşılmasın); hata mesajı hangi bilginin yanlış olduğunu söylemez.
  4. Kilit: her hatalı deneme auth_fail‘e IP ve e:<eposta> olarak yazılır; 15 dakikada 8 hata → o IP ve o e-posta 429. Açık oturumla yapılan istekleri e-posta kilidi etkilemez.
  5. Ön yüz: oturum anahtarı ft_erisim, hesap bilgisi ft_kullanici (yalnızca yerel). window.fetch sarmalanmıştır: yalnızca MY_WORKER adresine giden isteklere Authorization: Bearer <oturum> eklenir; üçüncü taraf proxy’lere asla. Worker 401 dönerse giriş ekranı açılır (“Oturumun sona erdi”).
  6. Zorunlu şifre değişimi: yöneticinin açtığı ya da şifresini sıfırladığı hesapta must_change = 1; açılışta kapatılamayan “Şifremi değiştir” penceresi çıkar (formModal). POST /auth/sifre {eski, yeni} başarılıysa diğer oturumlar kapatılır.
  7. Cihazda hesap değişimi: oturumKaydet önceki ft_kullanici.id farklıysa yerel senkron verisini, senkron durumunu ve ft_yedek_* anahtarlarını siler (veriler karışmasın). Hesap bilgisi olmayan eski cihazdaki veri yöneticinin sayılır.
  8. Eski sürümden geçiş: ft_erisim‘de eski erişim kodu varsa ve ft_kullanici yoksa oturumYukselt açılışta /auth/me (eski kodla) → /auth/login (aynı e-posta ve kodla) yapar ve kodu oturum anahtarıyla değiştirir; kullanıcı yeniden giriş yapmaz. Worker geçiş süresince Bearer == ACCESS_TOKEN‘ı ilk yöneticinin oturumu sayar ve /auth/check‘i yanıtlar. Kullanıcı tablosu boşsa ilk istekte LOGIN_USER + ACCESS_TOKEN ile yönetici açılır ve kv satırları ona kopyalanır (semaHazirla, bir kez).
  9. Yönetici: menüde Yönetim › Kullanıcılar ve kılavuzdaki ilgili bölüm .nav-yonetim[hidden] ile yalnız yöneticide görünür (hesapArayuzu); Worker’daki /admin/* uçları ayrıca rolü kontrol eder. Yönetici kendi hesabını devre dışı bırakamaz ve silemez. 9b. Profil: kenar çubuğunun en üstünde #profilKutu (avatar avatarHtml: fotoğraf ya da baş harfler, renk e-posta/id’den; görünen ad gorunenAd); tıklayınca profil sekmesi (menüde ayrı öğe değil, switchTab('profil')). Hesap bilgisi ft_kullanici‘de önbelleklenir, açılışta ve Profilim açılınca /auth/me ile tazelenir (profilYenile). Fotoğraf tarayıcıda ortadan kare kırpılıp 192 px JPEG’e çevrilir (profilFotoSec). Açılış sayfası tercihi sayfa yüklenirken uygulanır (acilisSayfasi; yönetici sayfası yalnız yöneticide). Telefonda üst satırda avatar + ad solda, senkron durumu sağda; çıkış Diğer › Hesap ve Profilim’de.
  10. Çıkış: bekleyen değişiklikler gönderilir, /auth/logout oturumu siler, yerel veriler silinir.
  11. Yapay zekâ (kendi anahtarını getir): yönetici ANTHROPIC_API_KEY ile çalışır. Diğer kullanıcı Profilim › Bay Piyasa’da anahtarını ekler: POST /auth/ai-anahtar biçimi denetler (sk-ant-…), Anthropic GET /v1/models ile ücretsiz doğrular, AES-GCM ile şifreler (anahtar: secret AI_ANAHTAR_SIFRE; ek doğrulama verisi kullanıcı kimliği — şifreli metin başka hesaba kopyalanırsa çözülmez) ve users.ai_anahtar / ai_ipucu / ai_eklendi‘ye yazar; DELETE siler. İstemciye yalnız aiAnahtar: {var, ipucu: 'sk-ant-…ab12', eklendi} döner. /ai ve /extract-loan kullanıcının anahtarını çözer; yoksa 403 anahtar_gerekli, Anthropic anahtarı reddederse 400 anahtar_gecersiz (401 dönülmez: panelde oturum bitti sayılır). Panelde aiKullanilabilir(): anahtarı olmayana Bay Piyasa’da “Anahtarını ekle” notu ve göndermede yönlendirme; haber çevirisi yapılmaz. Yer kararı: BYOK uygulamalarındaki yaygın kalıp (ayarlar + özelliğin kilitli olduğu yerde bağlam düğmesi).

3. Veri saklama ve senkron

Anahtar İçerik
ft_harcamalar_v1 (ek alan) Kartla ödenen harcamada kartEk: { kartId, tutar, ts } (karta eklenen tutar; atlandi: true → eklenmedi)
ft_yatirimlar_v1 Yatırımlar (portföy); kalemde isteğe bağlı maliyet = birim başına ortalama maliyet (ABD/kripto $/adet, BİST ₺/adet, emtia ₺/gram)
ft_varliklarim_v1 Varlıklar
ft_custom_loans_v1 Kullanıcının eklediği krediler
ft_closed_loans_v1 Kapatılan kredilerin id listesi
ft_sabit_krediler_v1 Eski sürümde kodda tanımlı olan krediler (yalnız ilk yöneticinin hesabında; yeni kullanıcıda boş — kod artık kişisel kredi verisi içermez)
ft_kredi_kartlari_v1 Kredi kartları
ft_kmh_v1 KMH borçları
ft_elden_nakit_v1 Elden nakit borçlar
ft_alacaklar_v1 Alacaklar (sana borçlu olanlar): { id, ad, tutar (kalan), ilk, tarih (beklenen YYYY-MM-DD \| null), eklendi }
ft_bay_piyasa_v1 Bay Piyasa sohbetleri, ayarları, harcama
ft_haber_ceviri_v1 Haber başlığı çeviri önbelleği
ft_harcamalar_v1 Harcamalar: tek harcama kayıtları ve elle yazılan aylık kategori toplamları
ft_butce_v1 Bütçe: kategori başına aylık sınır [{ id:'b-<kat>', kat, limit, tarih }]; aya özel { id:'b-<kat>-YYYY-MM', kat, ay, limit }
ft_gelirler_v1 Gelirler: { id, tur:'duzenli', ad, tutar, baslangic, bitis } ya da { id, tur:'tek', ad, tutar, ay } (aylar YYYY-MM)
ft_borc_plan_v1 Borç planı ayarları: { id:'ayar', ek, tek, strateji }, faiz işleyen kartlar { id:'kart-<kartId>', faizli, oran, asgari } ve Nakit Akışı varsayımları { id:'nakit-ayar', enf, elle, artis }
ft_odemeler_v1 Ödeme Takvimi (kart kaydında ayrıca donem, ekstre, asgari, plan: { 'YYYY-MM': tutar }; düzenli ödemede harcamaKat, atla): düzenli ödemeler { id:'o-…', tur:'duzenli', ad, tutar, gun, periyot:'aylik'\|'yillik', ay, kat } ve kart son ödeme günleri { id:'kart-<kartId>', tur:'kart', kartId, gun }
ft_net_gecmis_v1 Günlük net varlık kaydı { id:'YYYY-MM-DD', net, varlik, yatirim, borc, usd, gram, t, tamam? } (gram: o anki gram 24 ayar altın TL fiyatı; tamam: ay sonu sonradan tamamlandıysa varlık/borcun alındığı gerçek kaydın günü)
ft_hedefler_v1 Birikim hedefleri { id:'hd-…', ad, hedef, birim:'TL'\|'USD', ay, kaynak:'elle'\|'tum'\|'yatirim'\|'varlik', yatirimlar:[id], varliklar:[id], acil?, birikmis, baslangic, baslangicDeger } (eski kaynak:'y:<id>' de okunur)
ft_kartlar_v1 Piyasa Özeti kart seçimi: { id:'ayar', gorunen:[kart anahtarları, sırayla] } ve kullanıcının eklediği semboller { id:'oz-<sembol>' (kripto: 'oz-k-<sembol>'), tur:'etf'\|'kripto', sembol, ad }. Kayıt yoksa yöneticide tüm hazır kartlar, diğerlerinde VARSAYILAN_KARTLAR (Dolar, Euro, Altın, Bitcoin, VOO, QQQM); bu varsayılan kendiliğinden yazılmaz
ft_raporlar_v1 Aylık Rapor’un Bay Piyasa yorumları { id:'YYYY-MM', metin, model, maliyet, ts } (son 36 ay)

Yalnızca yerelde tutulanlar: ft_erisim (oturum anahtarı), ft_kullanici (giriş yapan hesap: id, e-posta, ad, rol, şifre değişmeli mi), ft_giris_eposta (son giriş e-postası), ft_senkron_meta (senkron durumu), ft_fx_son_bilinen_v1 (son bilinen kurlar), ft_gram_altin_son_v1 (son bilinen gram altın TL fiyatı; altın cinsinden varlık için, fiyat gelmeden açılışta), ft_harcama_birim (Harcama grafiği birimi), ft_gunluk_kur_v1 (günlük USD/TRY ve gram altın kapanışları; kuru olmayan eski net varlık kayıtları için), ft_aylik_kur_v1 (her ayın ortalama USD/TRY kuru ve gram altın fiyatı; harcamaların dolar/altın karşılığı için), ft_yatirim_son_fiyat_v1 (yatırımların son bilinen fiyat/tutarı; fiyat her yenilendiğinde senkron listesi yeniden yazılmasın diye ayrı tutulur).

Senkron akışı:

4. Worker uç noktaları

/ ve /auth/login dışındaki her uç nokta geçerli bir oturum ister; /data her zaman oturum sahibinin verisini okur/yazar.

Yol Metot Görev
/ GET Sağlık kontrolü ({ok:true})
/auth/login POST {email, password} → {token, kullanici}; hatalı denemede kilit sayacı
/auth/me GET Oturumun hesabı (ad, foto, ayar, üyelik ve son giriş tarihi, açık oturum sayısı)
/auth/logout POST Oturumu siler
/auth/profil POST {ad?, foto?, ayar?} (foto null = kaldır) → güncel kullanici
/auth/ai-anahtar POST, DELETE {anahtar}: Anthropic’te doğrula, şifreli sakla → güncel kullanici (anahtar asla dönmez); DELETE siler
/auth/cikis-diger POST Bu oturum dışındaki bütün oturumları siler → {kapanan}
/auth/sifre POST {eski, yeni}: kendi şifresini değiştirir, diğer oturumları kapatır
/auth/check GET Eski panel uyumluluğu (geçiş süresince)
/admin/kullanicilar GET, POST Yönetici: hesap listesi (kayıt sayısı ve boyutla) / hesap aç {email, ad, sifre} (geçici şifre, must_change=1)
/admin/kullanicilar/:id/sifre POST Yönetici: geçici şifre ver, oturumlarını kapat
/admin/kullanicilar/:id/durum POST Yönetici: {disabled} girişi kapat/aç
/admin/kullanicilar/:id DELETE Yönetici: hesabı, oturumlarını, mesaj kayıtlarını ve tüm verisini sil
/mesajlar GET Kendi kutusu: mesajlar (gelen: kendine, herkese — kendi duyurusu dahil — ve yöneticiyse @yonetici‘ye yazılanlar; kaldırdıkları hariç, en fazla 100; {id, baslik, metin, ts, herkese, yoneticiye, okundu, gonderen, yanit}), gonderilen (kendi yazdıkları, en fazla 50, kime, okuyan), okunmamis
/mesajlar POST Mesaj yaz {baslik, metin, alici?}: kullanıcı her zaman @yonetici‘ye (günde en fazla 20, aşınca 429); yönetici * ya da kullanıcı kimliğine
/mesajlar/sil POST Toplu silme {gelen:[…], giden:[…]} (en fazla 100): gelenler yalnız kendi kutusundan (mesaj_durum.silindi), gidenler yalnız kendi Gönderilen listesinden (mesajlar.gonderen_sildi); alıcıda kalır
/mesajlar/okundu POST {ids:[…]} ya da {hepsi:true} → okundu (yalnız kendi görebildiği mesajlar)
/mesajlar/:id DELETE Mesajı yalnız kendi kutusundan kaldırır
/admin/mesajlar GET, POST Yönetici: gönderilenler + kaç kişi okudu (herkesSayisi) / gönder {alici: kullanıcı kimliği \| '*', baslik ≤120, metin ≤4000}
/admin/mesajlar/:id DELETE Yönetici: mesajı geri al (herkesin kutusundan silinir)
/data GET since sonrası değişen kayıtlar
/data/:anahtar PUT Kayıt yazar ({value, expected}), en fazla 1,5 MB
/proxy?url= GET CORS proxy; yalnızca izin listesindeki adresler; 60 sn ortak önbellek
/kap?kodlar=TUPRS,ISMEN GET Resmî KAP bildirimleri, son 30 gün (en fazla 30 kod, kod başına 200 bildirim); kap.org.tr member/filter + disclosure/members/byCriteria; şirket kimliği 30 gün, liste 5 dk önbellek; kod başına {kod, liste} ya da {kod, hata}
/rapor-al POST Gmail Apps Script’ten aracı kurum PDF raporu; oturum değil X-Rapor-Anahtar (kişisel rapor anahtarı, SHA-256 özeti users.rapor_anahtar); gövde {mesajId, gonderen, konu, tarih, dosya, pdf(base64)}; aynı mesajId ikinci kez kaydedilmez; PDF ≤ 20 MB, günde ≤ 30 rapor; PDF rapor_parca‘ya 900 KB’lık base64 parçalar halinde
/raporlar GET Kullanıcının raporları (en yeni 300, özet JSON dahil, PDF hariç)
/raporlar/:id/pdf · /raporlar/:id/ozetle · /raporlar/:id GET · POST · DELETE PDF (yalnız sahibine) · hemen özetle (kilitli, en fazla 1 eşzamanlı) · sil
/raporlar/anahtar GET · POST Rapor anahtarı var mı · yenisini üret (düz hali yalnız bu cevapta)
/ai POST Anthropic Messages API geçidi (model beyaz listesi, max_tokens 200–16000, isteğe bağlı web araması)
/extract-loan POST Kredi planı PDF’ini (pdfBase64) Claude ile JSON’a çevirir (banka, faiz, anapara, kullandırım tarihi, ödeme planı)
/td GET Twelve Data anlık fiyat (5 dk önbellek: günlük 800 kredilik ortak kota kullanıcı sayısından bağımsız ≈288/gün kalır)
/td-series GET Twelve Data geçmiş veri (grafik; 10 dk önbellek)
/fh GET Finnhub anlık fiyat (60 sn önbellek)
/fh-ara GET ?q=: ABD hisse/ETF araması (Finnhub symbol lookup, exchange=US); yalnız Common Stock / ADR / ETP / REIT ve ^[A-Z][A-Z.]{0,6}$ semboller, en fazla 15, tam eşleşme önce; aynı sorgu 1 gün önbellekte
/uranyum GET Uranyum (U3O8) fiyatı, MetalCharts sayfasından; 20 dk önbellek
/uranyum-gecmis GET ?aralik=1M (günlük) / 1Y (haftalık): U3O8 $/lb geçmişi, MetalCharts API /v1/history/UXA (secret metalcharts). Ücretsiz katman ayda 200 istek: sonuç D1 onbellek tablosunda 12 saat tutulur (en fazla ~120 istek/ay); geçici hata 1 saat, kalıcı hata (plan kapsamı, geçersiz anahtar) 7 gün önbelleklenir (kota boşa gitmez). Durum (2026-10-01): ücretsiz katman UXA geçmişini kapsamıyor (“Upgrade to basic or higher”); grafik SRUUF eğilimiyle çalışır, Basic API planına geçilirse kod değişmeden gerçek geçmişe döner, varsa eski sonuç döner. Ücretsiz katman şartı: grafikte görünür “Metal prices by MetalCharts” bağlantısı (#chartKaynak)

5. Veri kaynakları

Veri Kaynak
ABD hisse ve ETF’leri (QQQM, VOO, URA, XLE, REMX, NVDA…) Resmi kapanış ve normal seans: Finnhub (/fh). Seans öncesi / sonrası: Yahoo 5 dk’lık grafik (includePrePost, son 5 gün)
Dolar/TL, Euro/TL Yahoo Finance (/proxy); yedek Twelve Data
Kripto (BTC, ETH, SOL, AAVE, HYPE) Binance 24 saatlik ticker (doğrudan, anahtarsız); yedek CoinGecko. Grafikler Binance
Altın (spot ons) Twelve Data (/td)
Brent ve diğerleri Yahoo Finance / FRED (/proxy)
BİST hisseleri (Yatırımlarım, kod + adet) Yahoo KOD.IS (≈15 dk gecikmeli), 5 dakikada bir (bistFiyatlariYenile); eklerken kod doğrulanır (404 → hemen uyarı). Eski, elle TL değeri girilmiş BİST kayıtları (kod alanı yok) elle güncellenir
Gümüş (yalnızca Yatırımlarım’da gümüş varsa) Yahoo COMEX gümüş SI=F (gumusFiyatYenile); gram = ons ÷ 31,1035
Uranyum MetalCharts (/uranyum), hata olursa Yahoo
Haberler Kurumların kendi RSS yayınları (/proxy): Investing.com Türkiye (kripto 301, emtia 11, borsa 25, piyasa 285, ekonomi 14), Bloomberg HT, Anadolu Ajansı ekonomi, BBC Business, CNBC Markets, MarketWatch. Reuters ve Bloomberg: Google News RSS (site: filtresiyle)

Yenileme: fiyatlar 60 sn, haberler 10 dk, senkron 5 dk.

Yenileme sırası: Her turda önce Dolar/TL ve Euro/TL paralel çekilir, ardından kripto; hemen sonra tlKarsiliklariniYenile() tüm TL karşılıklarını (elden nakit USD/EUR borçlar, yatırımlar, altın, net değer, borç toplamı, portföy puanları) yeniden hesaplar. Tur sonunda (altın ve ETF’ler geldikten sonra) bir kez daha çalışır.

ABD seansları (ETF/hisse kartları): Kartın ana değeri o an açık seansın fiyatıdır (değişim bir önceki resmi kapanışa göre). Altındaki satırlar diğer seansları gösterir:

An (ABD saati) Ana değer Alt satırlar
Seans öncesi 04:00–09:30 Öncesi Kapanış (önceki gün), Sonrası (önceki gün)
Normal seans 09:30–16:00 Canlı fiyat Öncesi
Seans sonrası 16:00–20:00 Sonrası Öncesi, Kapanış, Sonrası
Gece / hafta sonu Kapanış Öncesi, Sonrası

Öncesi yüzdesi önceki kapanışa, Sonrası yüzdesi o günün kapanışına göredir. Sonrası dilimi 16:05’ten başlar (16:00 çubuğu kapanış müzayedesini içerir). Gece seansı (20:00–04:00 ET) verisi ücretsiz kaynaklarda (Yahoo, Nasdaq, Finnhub) bulunmadığı için gösterilmez. Seans verisi seans öncesi/sonrası penceresinde her turda, diğer zamanlarda 5 dakikada bir tazelenir. Haber kuralları: Yalnızca köklü haber kurumları; basın bültenleri (NEWS_BULTEN_RE: Chainwire, GlobeNewswire, EQS-News…), fiyat/fon tanıtım sayfaları ve 4 kelimeden kısa başlıklar elenir; son 3 gün. Türkçe haberler doğrudan, BBC/CNBC haberleri Google Çeviri (*.translate.goog) ile Türkçe açılır. Google Çeviri’yi engelleyen MarketWatch ve Google News’ten gelen Reuters/Bloomberg “İngilizce” etiketlidir ve sütun başına en fazla 1 tanedir (okunabilir haber azsa boşluğu doldurur). İngilizce başlıklar Claude Haiku ile Türkçeye çevrilir.

Proxy yedekleri (NEWS_PROXIES / fetchWithFallback): Worker proxy’si başarısız olursa Yahoo, FRED ve haber istekleri sırayla allorigins.win, corsproxy.io ve codetabs.com üzerinden denenir (bu isteklere erişim kodu gönderilmez).

6. Yapay zekâ kullanımı

Özellik Model
Bay Piyasa Kullanıcı seçer: Haiku 4.5, Sonnet 5 (varsayılan), Opus 5.5, Fable 5.1
Haber çevirisi claude-haiku-4-5-20251001
Kredi PDF çıkarma claude-sonnet-5

Worker’daki ALLOWED_MODELS listesi ile ön yüzdeki model listesi (BP_MODEL_IPUCU vb.) uyumlu tutulmalıdır.

7. Krediler

7b. KMH (canlı faiz)

8. Harcama Takibim

8b. Bütçe Planlaması

8c. Nakit Akışı

8j. Bildirimler ve mesaj kutusu

8i. Kullanım Kılavuzu

8h. Aylık Rapor

8k. Hesap Araçları

8g. Birikim Hedefleri

8f. Net Varlık Geçmişi

8e. Ödeme Takvimi

8d. Borç Kapatma Planı

9. Arayüz

10. Deploy

11. Sürüm geçmişi

Tarih Değişiklik      
2026-09-29 Worker repoya eklendi; /td-series parametreleri URL’ye kodlanıyor; wrangler.toml ile CLI deploy; API anahtarları secret’a taşındı; README/PROJECT/RULES ve .gitignore eklendi      
2026-10-01 Fiyat (dakikada bir) ve haber (10 dakikada bir) turları yalnız sekme görünürken çalışır; sekmeye dönünce eskimişse hemen tazelenir (arkaPlanTuru). Ölçüm: açık sekme dakikada ~10–16 Worker isteği; 100 kullanıcıda arka plan sekmeleri Workers ücretsiz planının günlük 100 bin isteğini aşardı      
2026-10-02 Aylık Rapor yorumu yeniden yazıldı: ayrı “uzmanlık paketi” RAPOR_SISTEM (Türkiye koşullarında kişisel finans danışmanı: tasarruf oranı, borç servis oranı, KKDF/BSMV dahil etkin faiz ve çığ önceliği, acil fon 3–6 ay, TÜFE ile reel değişim, net varlığın $/altın bazında yorumu, yatırım yoğunlaşması; öncelik sırası; rakam uydurmama, eksik veriyi söyleme; çıktı: özet, sağlık tablosu, öne çıkanlar, gelecek ay planı, dikkat). Veri dosyası raporMetni genişledi: veri durumu/eksikler, gelir-nakit akışı ve son 3 ay tasarruf oranı, reel harcama, kategori payları, net varlık ay sonu değişimi (₺/$/gr), yatırım dağılımı, borçlar ve aylık faiz maliyeti, borç planı, acil fon/hedefler, gelecek ay (taksit + takvim ödemeleri + tahmini harcama), TÜFE. max_tokens 1200 → 3000; Haiku seçiliyse rapor için Sonnet. Sayfadaki kurallı öne çıkanlara reel değişim, borç servis oranı, faiz maliyeti, acil fon ve ay sonu net varlık (₺/$) eklendi (raporSaglik)      
2026-10-02 Piyasa Özeti grafiği açılışta 1 Yıl aralığıyla gelir (currentPeriod = 'yil')      
2026-10-02 Bay Piyasa karakteri: “BP” yazılı sarı daire yerine Benjamin Graham’ın “Mr. Market”inden esinli karakter (BP_AVATAR_SVG: silindir şapka, yuvarlak gözlük, bıyık, papyon; şapka bandı ve papyon yükseliş yeşili), sarı daire zemin korunur; daire sohbette 30 → 40 px, karşılama ekranında 48 → 88 px; kırpma 3 varyantla denendi (viewBox 6 4 52 52: yüz büyür, papyon görünür)      
2026-10-02 Başlık toplamları beyaz ve 17 px (kullanıcı tercihi; satır tutarları 15 px): Varlıklarım, Yatırımlarım › Portföyüm ve tür çerçeveleri, Borçlarım; satır tutarları türün renginde kalır      
2026-10-02 Çerçeveli listelerin (Varlıklarım, Yatırımlarım türleri, Borçlarım) başlığı ayraçla listeden ayrıldı ve toplamın önüne “TOPLAM” etiketi geldi: başlık toplamı ilk satırın tutarıyla karışıyordu. 3 varyant denendi (yalnız ayraç: yetersiz; nötr renk: Borçlarım’daki renk eşleşmesini bozuyordu). Telefonda uzun başlıklar iki satıra kayar (KMH, Elden Nakit Borçlar kesiliyordu)      
2026-10-02 Aylık Rapor: “Bay Piyasa’nın yorumu” artık KPI kutularının hemen altında, “Öne çıkanlar” ondan sonra; yorum başlığında 44 px Bay Piyasa karakteri ve “Kişisel finans danışmanın · değerlendirmesi" alt satırı, başlık altı ayraç (4 yerleşim denendi; telefonda düğme alt satıra iner, başlık kesilmez). Veri dosyasında acil durum fonu tek satır: TL + dolar bazlı tutar ($), kaç aylık zorunlu gider ve gider dökümü (harcama + taksit); hedef özetindeki tekrar kaldırıldı      
2026-10-02 Aylık Rapor yorumu yarıda kesiliyordu: model yazmadan önce düşünüyor ve düşünme de max_tokens‘tan harcıyor; 3000’de görünen metin birkaç cümlede bitiyordu. Rapor bütçesi 12000, Worker /ai üst sınırı 4000 → 16000 (ücret yalnız üretilen token kadar). stop_reason: max_tokens gelirse en fazla 2 kez “kaldığın yerden devam et” istenir, parçalar birleştirilir; yine kesikse metnin sonuna not düşülür. Veri dosyasında her acil fon hedefi ayrı satır: hedef (kendi biriminde ve ₺), biriken, kaynak, yüzde, tamamlanınca kaç aylık gider; birikim 0 ise modele “fonun yok deme, birikimi girmesini öner” uyarısı      
2026-10-02 Aylık Rapor › Öne çıkanlar işaretleri: iyi = yeşil ▲, kötü = kırmızı ▼ (eskiden nokta), durağan = koyu sarı – (#C9A227) ve aynı renkte sol şerit      
2026-10-02 Aylık Rapor: “Öne çıkanlar” → “Öne Çıkan Gelişmeler”; bütün maddeler devrik/eksik cümle yerine tam cümle (ör. “Harcaman, son 6 ayın ortalaması olan ₺84.000 tutarının %12 üstüne çıkarak ₺93.000 oldu.”): önceki aya ve ortalamaya göre (±%1 içinde “neredeyse aynı”), kategori artış/azalışı önceki ve yeni tutarla, ortalamanın katı, bütçe (kullanılmayan kısım / aşım), bütçeyi aşan kategoriler bütçeye karşı tutarla, gelir-çıkış-kalan, taksitin anapara ve faiz kısmı, reel değişim, borç servis oranı, faiz maliyeti, acil fon (birikimi 0 ise “girilmemiş”), net varlığın yeni değeri      
2026-10-02 Aylık Rapor › Bay Piyasa’nın yorumu: başlığın sağında küçük ▾ okuyla aç/kapa (raporYorumKatla); varsayılan açık, kapalılık yalnız bu cihazda ft_rapor_yorum_kapali ile hatırlanır (eşitlenmez); yeni yorum istenince kendiliğinden açılır; telefonda kapalıyken “Yeniden yorumla” düğmesi de gizlenir      
2026-10-02 Yorum aç/kapa oku “Yeniden yorumla”nın soluna alındı ve belirginleştirildi: 36 px amber düğme, SVG ok; 1,4 sn’de dolu amber ↔ boş çerçeve yanıp söner, etrafa halka yayılır, ok kendi yönünde hafifçe zıplar (kapalıyken sağa döner); üstüne gelince durur, “hareketi azalt” tercihinde sabit. İlk deneme (ince parıltı) yan düğmeden ayırt edilmiyordu      
2026-10-02 Aç/kapa oku başlığın hemen sağına taşındı (“Bay Piyasa’nın yorumu ⌄”, 26 px); düğme yanındayken “Yeniden yorumla”ya aitmiş gibi algılanıyordu. İki yer denendi: başlık yanı (seçildi) ve karakterin solu (telefonda alt satırı sıkıştırıyor, ayrı bir düğme gibi duruyordu). Başlık metni de tıklanınca açar/kapar      
2026-10-02 Bildirimler: sağ üstte zil (masaüstünde üst çubuğun en sağı, telefonda üstteki profil satırının sağı) + okunmamış sayısı (kırmızı rozet, acil varsa nabız) + açılır panel (“Yaklaşan ödemeler” ve “Uyarılar” grupları, okunmamış vurgulu, × ile kaldır, “Tümünü okundu say”, tıklayınca ilgili sayfa, dışarı tıklama/Esc ile kapanır). bildirimUret: ödeme son gününden 1 gün önce (sarı, “Yarın …”) ve son gün (kırmızı, “Bugün …”; başlık türe göre: taksit günü / son ödeme günü / ödenecek), bu ayın bütçesini aşan (kırmızı) ya da %90’ı dolan (sarı) kategori, asgarinin altında planlanan kart ödemesi. Bildirimler veriden her seferinde üretilir; kimlik tarih/düzey içerir, okundu/kaldırıldı yalnız bu cihazda ft_bildirim_durum (90 gün sonra budanır). Açılışta, sekme değişince ve görünürken dakikada bir güncellenir. Test: tarih 5 ve 6 Ekim’e sabitlenip kira/abonelik/kart/bütçe senaryolarıyla; panel içinde yeniden çizilen düğmeye tıklamanın paneli kapatması hatası bulunup düzeltildi      
2026-10-02 Mesaj kutusu ve bildirim iyileştirmeleri: yönetici Kullanıcılar sayfasından tek kişiye ya da herkese mesaj/duyuru gönderir (okuma sayısı, geri alma); kullanıcı Profilim › Mesaj kutusu’nda okur, kaldırır; okunmamış mesaj zilde “Mesajlar” grubunda ve menüdeki adın yanında mavi ✉ sayı olarak görünür. Worker: mesajlar, mesaj_durum tabloları; /mesajlar, /mesajlar/okundu, /mesajlar/:id, /admin/mesajlar(/:id); hesap silinince mesaj kayıtları da silinir. Zil panelinde “Tümünü okundu say” yazısı yerine çift tik simgesi. Ayrı zarf simgesi denendi, seçilmedi (gerekçe 8j). Hata düzeltmesi: ilk resize olayı zil panelini kendiliğinden kapatıyordu (başlangıç genişliği kaydedildi). Yerel wrangler dev ile uçtan uca sınandı (21 API + arayüz denetimi)      
2026-10-02 Mesaj gönder: alıcı listesi “Herkes (duyuru)” + “Kişiye özel” grubu (açık hesapların ad — e-postası, yönetici en sonda “(sen)”); form hesap listesi yüklenmeden açılırsa önce listeyi çeker (yalnız “Herkes” kalma sorunu); başka hesap yoksa formda not. /mesajlar: yalnız kendi duyurusu yöneticiye gelmez, kendine yazdığı (deneme) mesaj gelir      
2026-10-02 Zilin soluna ✉ zarf (masaüstü ve telefon): okunmamış mesaj sayısı zildeki gibi kırmızı rozetle; dokununca Profilim › Mesaj kutusu, en yeni okunmamış mesaj açık. Mesajlar zilden çıkarıldı (iki yerde sayılmasın); menüdeki profil kutusundaki zarf işareti kaldırıldı. Yerel worker ile denendi: zarfta 1, zil saymıyor, zarf zilin hemen solunda, dokununca kutu ve sayı sıfırlanıyor      
2026-10-02 İki yönlü mesaj: Profilim › Mesaj kutusu’nun sağında “✉ Yeni mesaj” (kullanıcı yöneticiye yazar; yönetici herkese ya da kişiye), açık mesajda “↩ Yanıtla”, “Gelen / Gönderilen” sekmeleri (okundu bilgisiyle), gönderince yeşil onay notu. Worker: POST /mesajlar (kullanıcıda alıcı her zaman @yonetici, günde 20 sınırı), GET /mesajlar gönderilenleri de döner, yönetici @yonetici mesajlarını gelen kutusunda görür (gönderen ad · e-posta, KULLANICIDAN etiketi); Kullanıcılar › Gönderilen listesine kullanıcı mesajları karışmaz; hesap silinince yazdığı mesajlar da silinir. Yerel worker ile uçtan uca 19 denetim (kullanıcı yazar → yönetici zarfında 1 → yanıtlar → kullanıcıda 1, gönderilende okundu ✓; 20 sınırı; herkese yazamama)      
2026-10-02 Zarf açılır liste oldu (zil gibi): son mesajlar okunmamış vurgulu, mesaja dokununca Profilim’de o mesaj açık ve görünür; “Tüm mesajlar” / “Yeni mesaj” bağlantıları. Dışarı tıklama yakalama aşamasına alındı (“Kutumdan kaldır” gibi olayı durduran düğmeye basınca açık liste kapanmıyordu). Yerel worker ile masaüstü + telefonda denendi      
2026-10-02 Mesaj kutusunda seçip silme: her mesajda kutucuk, üstte “Tümünü seç · N seçili · 🗑 Sil” (seçim yokken Sil pasif, onay penceresi); Gelen’de yalnız kendi kutusundan, Gönderilen’de yalnız kendi listesinden kalkar (alıcıda kalır). Worker: POST /mesajlar/sil, mesajlar.gonderen_sildi sütunu (Kullanıcılar › Gönderilen listesi de bunu dikkate alır). Telefonda araç çubuğu tek satır (“✓ Okundu”). Yerel worker ile 17 denetim + önceki mesaj testleri      
2026-10-02 Hesap Araçları sayfası (Planlama grubu): hesap makinesi, kredi, KMH / kart faizi, vadeli mevduat (8k). Elle hesapla karşılaştırıldı (kredi taksiti ₺10.998,01; KMH 30 gün ₺1.105; mevduat net ₺2.893,15; günlük bileşik ₺2.934,06), 10 hesap makinesi senaryosu, kalıcılık, telefon. Menü yoğunluk kademeleri 880 → 960 px, yeni 800 ve 740 px kademeleri (1280×720 yönetici menüsü 5 px taşıyordu). Kullanıcı gözüyle düzeltmeler: günlük hesapta gizlenmesi gereken alan görünüyordu ([hidden] CSS ile eziliyordu), telefonda araç şeridi yatay kayıyor ve araçlar görünmüyordu (2×2)      
2026-10-02 Hesap Araçları: sıra Kredi Faizi → KMH → Vadeli → Hesap makinesi (açılış Kredi Faizi); hesap makinesi bilimsel (5 sütun: DER/RAD, parantez, sin/cos/tan, √, ln/log, x²/xʸ, π/e, 1/x, n!), yeni ayrıştırıcı; geçmiş makinenin sağında dar sütun. 33 senaryo (öncelik, sağdan üs, −2², trigonometri DER/RAD, tan 90 = Hata, √−4 = Hata, örtük çarpma, büyük sayı ve devamı, klavye) + telefon      
2026-10-02 Kılavuz ve SSS yeniden tasarlandı (8i): arama başlığı + öneriler; kılavuzda kurulum kontrol listesi (verine göre ✓ ve ilerleme), rehberler kart ızgarası + okuma görünümü (önceki/sonraki); SSS’de kategori düğmeleri, en çok sorulanlar, soru kartları. Kullanıcı gözüyle düzeltmeler: okuma görünümünde başlık dev kutunun ortasında kalıyordu (eşit boy kuralı açık karta da uygulanıyordu); telefonda kılavuz ~4.300 px uzundu → 2 sütun döşeme ve sade adımlarla 3.265 px; SSS telefonda 4.155 → 3.661 px. 40 akış denetimi (masaüstü + telefon)      
2026-10-02 Duyuru gönderenin kendi zarfına da düşer (önceden bilerek hariçti; kullanıcı zarfta görmek istedi): gönderince zarf hemen tazelenir (Kullanıcılar formundan da), okunan mesaj zarf listesinde soluk kalır (%55 opaklık), kutuda da hafif soluk. Okuma sayısı göndereni saymaz (“1/1 kişi okudu”). Yerel worker ile duyuru akışı (13 denetim) + önceki 5 mesaj testi      
2026-10-02 Açık tema + sağ üstte tema anahtarı (sol açık, sağ koyu; varsayılan koyu). 50+ sabit koyu renk ve 30 palet rengi değişkene bağlandı; koyu tema eski haliyle piksel piksel karşılaştırıldı (8 sayfa aynı). Açık temada 20 sayfa WCAG kontrast taramasıyla dolaşıldı ve renkler döngüyle ayarlandı: ikincil gri, amber, yeşil, kırmızı ve kategori renkleri koyulaştırıldı (küçük yazıda ≥4,5); amber zeminler ayrı --amber-dolgu (kahverengi görünmesin), seçili sekme beyaz, kartlara hafif gölge, giriş düğmesi yazısı. Telefonda üst satır sıkışınca ad görünmüyordu → senkron yazısı kısaltıldı      
2026-10-02 Açık tema saf beyazdan mat kreme alındı (kullanıcı: göz alıyor). Yüzeyler --a-* taban değişkenlerine bağlandı; 4 varyasyon denendi (Krem, daha mat Krem, Kum, Sıcak taş): Kum kart/zemin ayrımını kaybedip donuk, Taş gri kalıyordu; seçilen mat krem (zemin #E8E2D6, kart #F3EEE5). Gri yazılar sıcak griye, amber/yeşil/kırmızı ve kategori renkleri krem zemine göre koyulaştırıldı; 20 sayfa masaüstü + 9 sayfa telefon kontrast taraması temiz (yalnız bilerek soluk “—”); koyu tema içeriği piksel karşılaştırmasıyla aynı      
2026-10-02 Açık tema bir kademe açıldı (kullanıcı: beyaza daha yakın olsun): mevcut mat krem, L1 (beyaza yakın) ve L2 (açık krem) karşılaştırıldı, L1 seçildi — zemin #F2EFE9, kart #FBF9F5. Kontrast taraması 20 sayfa + telefon temiz      
2026-10-02 Açık tema bir kademe daha beyaza kaydı (kullanıcı isteği): zemin #F6F4F0, kart #FDFCFA, seçili sekme/üst yüzey #FFFFFF; çizgiler buna göre açıldı. Kontrast taraması temiz      
2026-10-02 Açık tema çok az daha açıldı (kullanıcı isteği): zemin #F8F7F4, kart #FEFEFD. Kontrast taraması temiz      
2026-10-02 Açık tema bir tık daha açıldı (kullanıcı isteği): kartlar beyaz #FFFFFF, zemin #FAF9F7 (kartlar ince çizgi + hafif gölgeyle ayrışır). Kontrast taraması temiz      
2026-10-02 Açık tema algılanır biçimde açıldı (kullanıcı: önceki adım gözle belli değildi): zemin #FCFBF9 ve ara tonlar (tablo başlığı, giriş, iz, çizgi) açıldı, kartlara biraz daha gölge. Asıl “koyu/bej” hissini veren kahve-amber çubuklar: açık temada satır içi background/fill: var(--amber) kullanan bütün çubuk ve noktalar --amber-dolgu (parlak amber) olur — Aylık harcamalar grafiği, kategori, hedef çubukları; yazı amberi koyu kalır. Önce/sonra karşılaştırıldı (ortalama parlaklık 246,0 → 247,3, kahverengi alanlar kalktı), kontrast taraması temiz      
2026-10-02 Oturum süresi 180 → 60 gün (kullanıldıkça uzar; 60 gün hiç kullanılmayan oturum düşer). Mevcut 180 günlük oturumlar ilk kullanımda 60 güne çekilir (expires_at > şimdi + 60 gün ise güncellenir). Yerelde denendi: yeni oturum 60,00 gün; elle 180 güne çekilen oturum /auth/me sonrası 60 gün. Ayrı access/refresh token kurulmadı (sunucu taraflı oturum anında iptal edilebilir); HttpOnly çerez + kısa ömürlü access/refresh planı alt alan adına geçişe bırakıldı      
2026-10-02 Bay Piyasa hazır soruları: “Bitcoin bugün neden düşüyor?” → “Bitcoin için bugün piyasa öngörün nedir?” (haberli, senaryolu, tavsiyesiz); 4. soru KAP: bpKapSor Yatırımlarım’daki BİST kodlarını (tur === 'bist') soruya koyar, bu mesaj için web aramasını açar (bpGonder(…, { ara: true }), genel ayar değişmez), ücret ve paylaşım için onay ister; BİST hissesi yoksa uyarır. Not: ilk sürümde tek tırnaklı metinde kaçışsız kesme işareti (Yatırımlarım’da) sayfanın bütün betiğini durduruyordu; yayına çıkmadan sözdizimi denetimiyle yakalandı      
2026-10-02 Bay Piyasa sohbeti yarıda kesilmesin: max_tokens 2500 → 12000 (düşünme, web araması, portföy/haber okuması bu bütçeden harcıyordu); stop_reason: max_tokens gelirse en fazla 2 kez “kaldığın yerden devam et” (yeniden arama yok, webSearch:false), metin parçaları kesintisiz birleşir, araç öncesi ara metin atılır, kaynaklar ve maliyet turlardan toplanır; yine kesikse sonda not. Sahte cevaplarla denendi (kesik + devam, arama + kaynak, maliyet toplamı)      
2026-10-02 Bay Piyasa yalnız güvenilir kaynaklarda arar (45 alan adı, allowed_domains, TR konumu) ve talimatı kaynak sırası/doğrulama/kaynak+tarih ile yönlendirici cevap yapısıyla (“Ne anlama geliyor” / “Ne yapabilirsin”) güçlendirildi; KAP sorusu 5 arama. Worker sahte D1 + sahte Anthropic ile birim testlendi (liste/konum/sayı gidiyor, 5 sınırı, red olursa listesiz tekrar)      
2026-10-02 Bay Piyasa kişiliği: BP_SISTEM‘e en öncelikli “KİŞİLİK VE ÖZGÜN YORUM” bölümü — haberler hammadde, cevabın özü kendi görüşü; “Bence…” ile başlar, 1-3 kanıtla gerekçelendirir, kanaat derecesi ve görüşünü değiştirecek koşulu söyler, Mr. Market’in ruh halini okur, gerekirse konsensüse karşı çıkar, kullanıcıya katılmamaktan çekinmez, kalıp başlık/madde yığını yerine insan gibi akıcı konuşur. Kaynak ve yönlendirme bölümleri buna göre uyarlandı (kaynak bilgi verir görüşü Bay Piyasa kurar; sabit başlıklar zorunlu değil). Aylık Rapor talimatına da “kendi görüşünü söyle” maddesi. RULES 4f: kişilik korunur      
2026-10-02 Bay Piyasa ilk gerçek cevabından düzeltmeler: (1) panel fiyatını “gecikmeli” sanıp 00:00’daki haber fiyatını daha güncel saymıştı → <panel_verisi> fiyatları “CANLI, Zaman anına ait” diye etiketlenir, talimatta TAZELİK kuralı (çelişkide panel esas, fark zaman farkıyla açıklanır), panel verisi en fazla 2 dk eski (önce 30 dk yeniden kullanılıyordu); (2) karışık rakam biçimi ($85,000 / -0,56%) → panel verisi Türkçe yüzde (+%1,51 / −%0,56), talimatta kaynaktan gelen İngilizce rakamları Türkçeye çevirme kuralı; (3) “Ne oldu” en fazla 1-2 cümle; (4) aramadan gelen bilgi cümle içinde kaynağıyla anılır      
2026-10-02 Kullanıcı Bay Piyasa cevabında listede olmayan kaynak (coinstats.app) gördü → kaynak kısıtının o istekte uygulanmadığı anlaşıldı (büyük olasılıkla güvence listeyi kaldırdı). Güvence kademeli yapıldı (önce konum çıkar, liste korunur), red sebebi ve sonuç günlüğe yazılıyor, cevaba _kaynakKisiti ekleniyor ve kısıt kalktıysa cevapta not çıkıyor. Birim test: 3 kademe + bayrak      
2026-10-02 Canlı günlükten kök neden: Anthropic, Anthropic tarayıcısını engelleyen siteler (reuters, bbc, ft, wsj, apnews, marketwatch, barrons, economist) listede olduğu için listenin tamamını reddediyordu; güvence aramayı listesiz yapıyor, sonuçlar thestreet.com / coinstats.app gibi sitelerden geliyordu. Bu 8 site çıkarıldı (37 alan adı); gelecekte yeni engel çıkarsa yalnız engelli siteler ayıklanıp liste korunur (uygulandi-ayiklandi). Talimat, kılavuz ve SSS gerçek listeye göre güncellendi. ABD hazır sorusu New York saatine göre değişir: açılış öncesi / seans içi / kapanış sonrası / hafta sonu (bpAbdSorusu)      
2026-10-02 Canlı günlükte doğrulandı: kaynak kısıtı artık uygulanıyor (uygulandi, kaynak dunya.com). İki cevap arasında Fed toplantısı tarihi çelişince (28-29 / 27-28 Ekim) talimata kural: tarihli olaylar resmî takvimden (federalreserve.gov, bls.gov, tcmb.gov.tr, tuik.gov.tr, kap.org.tr) doğrulanır, doğrulanamazsa “yaklaşık”; İngilizce jargon Türkçe karşılığıyla (hike → faiz artırımı)      
2026-10-02 Yatırımlarım’a kapanabilir KAP ve şirket haberleri bölümü: portföydeki BİST hisseleri için ücretsiz (Google Haberler RSS) KAP bildirimleri ve şirket haberleri; tekrarlar birleşir, başka kurumun bildirimi “Gönderen” ile, kapalıyken “N yeni” rozeti, önce 6 satır. Kılavuz (Yatırımlarım) ve SSS’ye eklendi; yerel anahtar ft_kap_durum      
2026-10-02 KAP bölümü canlıda ilk açılışta “Haber kaynağına ulaşılamadı” gösterdi; canlı günlükte Worker ve Google’ın yanıt verdiği doğrulandı (geçici zaman aşımı). Her hisse için 2 sn sonra otomatik yeniden deneme; tümü düşerse eski liste korunur      
2026-10-01 Finansal Durumum › Varlıklarım standarda alındı: Yatırımlarım’daki tür çerçeveleri gibi cerceve-varlik (yeşil sol çizgi) ve başlıkta “N kalem · servetin %X” açıklaması (başlıktaki toplam artık etiketsiz bir satır gibi okunmuyor); çerçeve başlığındaki açıklama telefonda başlığın altına iner (.bolum-bas.aciklamali, Yatırımlarım tür başlıkları da); form ipucundaki kişisel örnek genel örnekle değiştirildi      
2026-10-01 Yardım grubuna Destek ve İletişim sayfası (DESTEK_EPOSTA): mailto şablonu (konu, hesap e-postası, cihaz/tarayıcı, ekran, panel adresi; finansal veri eklenmez), adresi kopyala, SSS/Kılavuz/Bay Piyasa kısayolları; SSS ve Kılavuz sonunda yönlendirme, SSS’ye “kime yazarım?” sorusu. Menünün 1440×900’e sığması için satır dolgusu 7 → 6,5 px (yönetici görünümü 871 px)      
2026-10-01 Portföy İstatistikleri: Çeşitlendirme, Borç karşılama ve Döviz koruması listeleri Portföy yaşı düzenine geçti (ortak istListe: üstte sarı çizgili özet satırı + sütun adı, satırda nokta · kalın ad · açıklama · kategori çubuk + sarı referans çizgisi kalın değer ikinci değer); dört bölüm aynı sütun ızgarasında (çubuk ve değerler hizalı); referanslar: eşit dağılım payı, toplam borç; borç ölçeği yatırım/borca göre (konut ölçeği ezmiyor); telefonda değer ve ikinci değer sağda alt alta, özet satırı kaydırmalı
2026-10-01 Net Varlık Geçmişi › Aylık özet her ayın son günü: panel ayın son günü açık değilse yeni ayda ilk açılışta tamamlanır (ayTamamlaGecmis, oturumda bir kez): yatırımlar o günün gerçek kapanışlarıyla (Yahoo: ETF/hisse/BİST/GC=F/USDTRY=X, Binance: kripto; hafta sonu/tatilde en fazla 7 gün geriye son işlem günü), varlık ve borç o tarihe kadarki son gerçek kayıttan; o tarihte panelde olmayan yatırımlar sayılmaz; kayıtta tamam alanı. Tabloda “ay sonu”, “ay sonu · tamamlandı ⓘ”, “devam ediyor”, “… gün (ay sonu değil)” etiketleri. Gerçek fiyatlarla test: elle hesapla %0,00 fark      
2026-10-01 Grafikte gezinme çizgisi: fare/dokunma ile dikey kesikli çizgi + noktada işaret, ipucunda tarih (5 yılda “… haftası”), kartın biçiminde fiyat (₺, küçük kripto ondalıkları) ve grafiğin ilk günündeki fiyata göre değişim (“+%9,46 · 3 Eyl 2026 fiyatına göre”; ilk noktada “grafiğin başlangıç günü”); kutu sağ kenarda sola geçer; telefonda touch-action:pan-y (yatay sürükleme çizgi, dikey kaydırma sayfa). Grafik artık yalnız genişlik değişince yeniden çizilir (telefonda adres çubuğu açılıp kapanınca çizgi kaybolmuyordu)      
2026-10-01 Grafik aralıkları 1 Ay · 1 Yıl · 5 Yıl (GRAFIK_ARALIK: Yahoo 1mo/1d, 1y/1d, 5y/1wk; Binance 1d×30, 1d×365, 1w×261; Twelve Data 1day×30, 1day×260, 1week×260; CoinGecko yedeği en fazla 365 gün, 5 yılda haftalık örneklenir; FRED; MetalCharts yalnız 1M/1Y). Başlıkta dönem değişimi; veri aralıktan kısaysa “veri … tarihinden beri”; 1 yıldan uzun aralıkta eksen ay + yıl. Denetim: 50 kart × 3 aralık = 150 grafik gerçek veriyle sorunsuz (yeni varlıklarda tarih notu)      
2026-10-01 Bay Piyasa diğer kullanıcılar için açıldı: Profilim › Bay Piyasa (yapay zekâ) bölümünde kendi Anthropic API anahtarı (doğrulama, AES-GCM şifreleme, ipucu, değiştir/kaldır, nasıl alınır yardımı); Bay Piyasa sayfasında “Anahtarını ekle” düğmesi; anahtarı olan kullanıcıda haber çevirisi, PDF okuma ve Aylık Rapor yorumu da çalışır; yeni secret AI_ANAHTAR_SIFRE; kılavuz ve SSS (2 soru) güncellendi      
2026-10-01 Tüm enstrüman denetimi (gerçek Yahoo/Binance/CoinGecko verisiyle): BİST 130/130, ABD 25/25 (hazır + popüler), kripto 30/30 fiyat ve geçmiş; panelde 50 kartın fiyatı kaynakla %0,00 farkla, 100/100 grafik (günlük ≥15, haftalık ≥20 nokta), 8 yatırım kaleminin TL değeri elle hesapla %0,03 içinde. Bulunan ve düzeltilen: altın grafiği Twelve Data cevap vermezse boş kalıyordu → Yahoo GC=F yedeği; Binance’te geçmişi kısa coinlerde (HYPE: 8 gün) grafik → CoinGecko günlük geçmişi. Not: REXC 6 aylık fon (26 haftalık nokta, doğal); TON’da CoinGecko yedeği Binance’ten %4 farklı (yalnız yedek)      
2026-10-01 BİST araması: doğrulanmış 130 hisselik BIST_LISTE (kod, kısa Türkçe ad, Yahoo resmi adı; her kod Yahoo’da fiyat ve adla doğrulandı, geçersiz 4 aday çıkarıldı) + Türkçe karakterden bağımsız arama (asciiNormal: tüpraş = tupras); listede az sonuç varsa Yahoo araması (borsa IST); kod biliniyorsa doğrudan deneme. Yatırımlarım › BİST’te arama kutusu (kayıtta isim alanı; ad = kod portföy istatistikleri için aynen kalır; eski kayıtların adı listeden gösterilir); Kartları düzenle’de BİST kartı (Yahoo KOD.IS, fmt:'try2' ₺, grup BİST)      
2026-10-01 Hisse araması Yahoo arama servisine geçti (ana kaynak; abdHisseAra, Worker proxy, ABD borsaları NMS/NGM/NCM/NYQ/ASE/PCX/BTS, EQUITY/ETF): şirket adı, ilk harfler ve yazım hatasıyla bulur (“tes” → TSLA, “nvidya” → NVDA, “coca” → KO); bulamazsa Finnhub /fh-ara. Boş arama artık önbelleğe alınmaz (önceki sürümde ilk başarısız arama oturum boyunca boş kalıyordu). Kutuya tıklayınca popüler 18 hisse; adlar sadeleşir (yahooAdDuzelt: “Tesla, Inc.” → “Tesla”); kripto adlarıyla da aranır (“ripple” → XRP); noktalı semboller (BRK.B) Yahoo’da BRK-B’ye çevrilir, kart kimliği oz-brk_b      
2026-10-01 Tüm ABD hisse/ETF’ler aranabilir (/fh-ara, ortak arama kutusu sembolKutusuKur: Kartları düzenle ve Yatırımlarım › ABD ETF & Hisse); şirket adları temizlenir (adDuzelt: “TAIWAN SEMICONDUCTOR-SP ADR” → “Taiwan Semiconductor”); yatırımda aranan hisse Piyasa Özeti’ne eklenmeden takip edilir; en büyük 30 kripto hazır kart (Binance çifti + CoinGecko kimliği doğrulandı), kayıtsız yöneticide eski 18 kart korunur (ESKI_KARTLAR); listede olmayan coin Binance’te denenir      
2026-10-01 Ortak kota: Twelve Data anlık fiyat önbelleği 60 sn → 5 dk (altın fiyatı çok kullanıcıda da günlük 800 kredi sınırına takılmaz). Kullanıcıların piyasa verisi için API anahtarı gerekmez; anahtarlar sunucuda ortak      
2026-10-01 Uranyum grafiği gerçek U3O8 $/lb geçmişi: MetalCharts API (Worker /uranyum-gecmis, D1 onbellek tablosu, 12 saat önbellek, hatada 1 saat bekleme); grafikte zorunlu “Metal prices by MetalCharts” bağlantısı; alınamazsa SRUUF eğilimi      
2026-10-01 Grafik düzeltmesi: ABD hisse/ETF kartlarında (QQQM, VOO, URA, NLR, XLE, REXC, REMX, NVDA ve kullanıcının eklediği semboller) geçmiş Yahoo’dan, yedek Twelve Data; uranyumda UX=F geçmişi olmadığı için eğilim olarak SRUUF (başlıkta not); hızlı kart değişiminde eski cevabın yeni grafiğin üstüne çizilmesi engellendi (_grafikIstek)      
2026-10-01 Kartları düzenle üst çubuğa, saatin yanına taşındı (yalnız Piyasa Özeti’nde; telefonda saatin sağında); saat + düğme boşluğun ortasında, sekme değişince saat kaymaz; dar ekranda durum metni kısalır; ızgaradaki kutu kaldırıldı      
2026-10-01 Kenar menüsünde gruplar (Varlık ve borç, Harcama ve bütçe, İstatistikler, Planlama, Asistan, Yardım, Yönetim) profil çizgisiyle aynı ince çizgiyle ayrıldı; 6 varyant denendi; menü 1440×900’e sığmaya devam ediyor      
2026-10-01 Kenar menüsü sıklaştırıldı: masaüstünde menünün tamamı ekrana sığar (1045 → 836 px), laptop ekranında bir kademe daha sık ve gerekirse menü kendi içinde kayar; senkron durumu ve Çıkış tek satırda      
2026-10-01 Profilim: menünün en üstünde fotoğraf/baş harf, ad soyad ve e-posta; profil sayfası (fotoğraf yükle/kaldır, ad soyad, açılış sayfası, kart düzenleme kısayolu, şifre, açık oturum sayısı, diğer cihazlardan çıkış, çıkış); Worker’da users.foto/users.ayar, /auth/profil, /auth/cikis-diger, zengin /auth/me; Kullanıcılar listesinde avatar; ilk yönetici adı artık boş başlar; kılavuz ve SSS (3 yeni soru) güncellendi      
2026-10-01 Piyasa Özeti’nde kullanıcı başına kart seçimi (ft_kartlar_v1, Worker izin listesine eklendi): göster/gizle, sırala, varsayılana dön, ABD hisse/ETF ve kripto sembolü ekleme (doğrulamalı; Yatırımlarım’da da seçilir); gizli ve kullanılmayan kartların fiyatı çekilmez; “QQM” etiketi QQQM olarak düzeltildi; kılavuz ve SSS güncellendi      
2026-10-01 Çok kullanıcılı yapı: kullanıcı hesapları (PBKDF2 şifre, oturum anahtarı, 180 gün), her kullanıcının verisi ayrı (ukv); yönetici için Kullanıcılar sayfası (hesap aç, geçici şifre, girişi kapat, sil); ilk girişte zorunlu şifre değişimi; Şifremi değiştir; eski erişim kodunun otomatik oturuma yükseltilmesi ve verilerin yönetici hesabına taşınması; IP + e-posta kilidi; Twelve Data / Finnhub / proxy için 60 sn ortak önbellek; koddaki kişisel kredi verisi (LOANS_TOHUM) kaldırıldı; AI şimdilik yalnız yöneticide; kılavuza Hesabın ve Kullanıcılar bölümleri, SSS’ye 5 hesap sorusu; yerelde (wrangler dev, yedek veriyle) uçtan uca test edildi      
2026-10-01 Yardım grubuna Sık Sorulan Sorular sekmesi (26 soru, konulara göre, aranabilir); kılavuzdaki sorular buraya taşındı, kılavuzda yönlendirme kutusu      
2026-10-01 Kullanım Kılavuzu sayfası (Yardım grubu): ilk kurulum, sayfa sayfa anlatım ve örnekler, SSS, terimler, arama; Piyasa Özeti’nde Bitcoin etiketi BITCOIN      
2026-10-01 Nakit / Mevduat varlığı $ / € / gram altın olarak tutulabilir (miktar girilir, TL karşılığı canlı kur ve altın fiyatıyla); acil fon hedefi ve göstergesi bunu kullanır      
2026-10-01 Acil durum fonu: Varlıklarım’a Nakit / Mevduat türü; hedef kaynağı “Varlıklarımdan”; “acil durum fonu” hedefi 3/6 aylık gidere göre öneri ve “kaç aylık gideri karşılıyor” göstergesi (hedef satırı, Finansal Durumum)      
2026-10-01 Harcama Takibim: aylık tablo salt okunur (yalnız kayıtlardan hesaplanır, hücre tıklanınca o ayın kayıtları açılır); eski aylık toplamlar listede görünür ve diğer kayıtlarla toplanır (tablodan yazılan toplamın kayıtları gizlemesi giderildi)      
2026-10-01 Finansal Durumum: Varlık Dağılımı kartı telefonda tam genişlik, halka solda, açıklama tek sütun ve yüzdeler sağa hizalı (yazı taşması giderildi; 360 px’te de kesilmez)      
2026-10-01 Harcama Takibim: aylık harcamalar grafiği ₺ TL / $ Dolar / gram Altın olarak seçilebilir (her ay kendi kuruyla); çubuk üstünde ipucu açılmama hatası giderildi      
2026-10-01 Nakit Akışı tahminleri enflasyon ve satın alma gücüyle: TCMB beklentisi / resmi TÜFE / kişisel / elle enflasyon yolu, harcama bugünün fiyatına taşınıp enflasyonla büyütülür, maaş artışı varsayımı (Ocak / Ocak-Temmuz / yok), “bugünün parasıyla” görünümü      
2026-10-03 KAP bölümü canlıda boş kalıyordu: “Ayrıntı” satırı ve canlı günlük, Google Haberler’in canlı Worker çıkışını (Milano, MXP) her istekte 503 “Sorry” sayfasıyla engellediğini gösterdi (Piyasa Özeti’ndeki Google aramaları da etkileniyor). Aynı noktadan denenen kaynaklar: Bing (çalışıyor ama eski ve eksik), kap.org.tr açık uçları (çalışıyor, resmî). Worker’a /kap eklendi; bildirimler artık doğrudan KAP’tan (özetli, KAP bildirim sayfasına bağlantılı, başka kurumların bildirimleri dahil), Google haberleri yalnız ek ve sessiz. Rutin bildirimler konu başına birleşip soluk gösterilir. RULES Haberler 4      
2026-10-03 Piyasa Özeti kartları dikeyde sıkılaştırıldı (kart iç boşluğu 10/9 → 8/7 px, iç aralık 5 → 3, seans satırları 1,3 → 1,25 satır yüksekliği, kart aralığı 10 → 8, grafik paneli üst boşluğu 20 → 14): 18 kartlı görünümde grafik 53 px yukarı çıktı, dizüstü ekranda kartlar + grafik birlikte sığıyor; yazı boyutları değişmedi      
2026-10-03 Birikim Hedefleri: dolar hedeflerin satırında TL karşılıkları kaldırıldı (tutarın yanındaki “≈ ₺…” ve “ayda $X (₺Y)” parantezi); satır yalnız $birikim / $hedef ve ayda $ gösterir. Üstteki özet kartlar TL toplamında kaldı      
2026-10-03 Kurum Raporları sayfası: aracı kurumların e-postayla gelen PDF raporları kullanıcının kendi Gmail’inden (Apps Script köprüsü, kişisel rapor anahtarı) Worker’a gelir, D1’de arşivlenir, cron ile Claude’a özetletilir (JSON şeması); portföy önde derleme, “Raporlardaki tüm hisseler” kutusu, kategori/konu sekmeleri, kod geçmişi araması, PDF’i sayfasında açma, tavsiye/hedef bildirimi, adım adım kurulum rehberi. Raporlar yalnız sahibine (kurumların dağıtım şartı). Kılavuz ve SSS’ye eklendi; RULES Güvenlik 13c, Yapay zekâ 4g, yerel anahtar ft_kurum_rapor      
2026-10-03 Kurum Raporları görsel düzeni Kılavuz/SSS kalıbına getirildi: üstte yardim-hero (büyük arama, ikonlu sss-kat kategori düğmeleri, “Raporlardaki tüm hisseler” açma-kapama anahtarı, raporlarda geçen portföy kodları için hızlı arama çipleri, rapor/kurum/son rapor/bekleyen bilgi satırı); bölüm başlıkları SSS “En çok sorulanlar” biçiminde; gün/konu başlıkları SSS grup başlığı gibi ikonlu; rapor satırları kategori renkli kv-ikon, kurum · kategori · konu etiketi, başlık, tek cümle, sağda tarih/durum/hisse sayısı ve açılır ok; kurulum Kılavuz’daki “İlk kurulum” gibi ilerleme çubuklu 4 numaralı adım kartı + seçili adımın ayrıntısı (anahtar durumu /raporlar/anahtar‘dan). Rapor yokken arama, kategoriler ve anahtar gizlenir, kurulum öne çıkar      
2026-10-03 ABD hisse/ETF ana fiyatı = en son işlem gören fiyat (fetchEtfHibrit): piyasa kapalıyken (gece/hafta sonu) ya da öncesi seansta henüz işlem yokken, kapanış gününün işlem sonrası fiyatı kapanıştan yeniyse ana fiyat odur (seans closed_son, not “Kapalı · son: sonrası”; değişim önceki kapanışa göre), resmi kapanış “Kapanış” satırında. Önceden kapalıyken resmi kapanış kullanılıyordu; Yatırımlarım değerlemesi aracı kurumun gösterdiğinden düşük çıkıyordu (NLR: 102,74 yerine 103,50). Tüm ABD hisse/ETF kart ve portföy kalemleri aynı yoldan geçer. Kılavuz (Piyasa Özeti) ve dipnot güncellendi      
2026-10-03 Yatırımlarım: tür çerçeveleri (ABD ETF & Hisse, Kripto, BİST, Emtia) ve KAP bölümü başlık yanındaki küçük dinamik okla (.katla-ok: Aylık Rapor’daki Bay Piyasa yorum okunun küçüğü — nabız + ok yönünde zıplama, açıkken aşağı, kapalıyken sağa) ya da başlığa dokunarak kapanır; varsayılan açık, durum bu cihazda (ft_yatirim_kapali, yatirimKatla). KAP’ın sağdaki eski oku kaldırıldı. Telefonda ok başlığın hemen yanında kalır. Kılavuz (Yatırımlarım) güncellendi      
2026-10-03 Yatırımlarım katlama oku başlığın yanından sağdaki toplamın hemen soluna alındı (.bolum-bas > .katla-ok{margin-left:auto}); KAP’ta satırın sağ ucunda      
2026-10-03 Yatırımlarım’daki bütün katlama okları aynı dikey hizada: toplam alanı sabit en az genişlikte ve sağa yaslı (--katla-toplam: 150 px, telefonda 140 px), KAP’ta toplam + “+” kadar boşluk (.katla-bosluk); telefonda KAP başlığı daralır, ok ilk satırda kalır. Test: 1440 / 1100 / 390 px’te farklı uzunlukta toplamlarla oklar ±1 px aynı hizada      
2026-10-03 Borçlarım: Kredilerim, Kredi Kartlarım, KMH ve Elden Nakit Borçlar çerçeveleri Yatırımlarım’daki küçük dinamik okla kapanır (borcKatlaKur: çerçeveler sabit HTML olduğu için ok ve .katla-ic açılışta bir kez eklenir; liste/form düğümleri taşınır, id’ler korunur, yeniden çizimler etkilenmez). Varsayılan açık, durum bu cihazda (ft_borc_kapali); kapalı çerçevede + Ekle çerçeveyi açar (bolumFormAc). Oklar toplamın solunda ve aynı hizada (--katla-toplam). Telefonda + Ekle → +, KMH başlığı “KMH” (.ad-kisa). Kılavuz (Borçlarım) güncellendi      
2026-10-03 Borçlarım çerçeve başlıklarında Yatırımlarım’daki gibi “N kalem · %X” (X = toplam borca oranı): _bAdet her listenin çiziminde dolar, refreshGrandTotal loansBolumAlt/kkBolumAlt/kmhBolumAlt/nakitBolumAlt‘ı yazar; başlık satırları aciklamali (telefonda açıklama başlığın altına iner). Kılavuz (Borçlarım) güncellendi      
2026-10-03 Harcama Takibim: kayıt listesinin ay seçicisi (harcamaAy) ile ekleme formunun ay seçicisi (harcamaAyInput) birbirine bağlı — üstten ay seçilince form o aya, formdan ay seçilince liste o aya geçer (harcamaFormAyDegisti; renderHarcama form ayını listeye eşitler; liste “Tüm yıl”dayken form korunur). Açılışta ikisi de aynı varsayılan ay (_harcamaVarsayilanAy: ayın ilk 10 gününde önceki ay). Önceden liste içinde bulunulan ayla, form önceki ayla açılıyordu; girilen kayıt görülmeyen ayda kalıyordu. Kılavuz ve dipnot güncellendi      
2026-10-03 Ak Yatırım ortak raporları (seçenek B): ortak_raporlar tablosu; cron saatte bir (akYokla, onbellek.ak_yokla) Ak Yatırım Araştırma Raporları sayfasından jeton + çerez alıp /umbraco/surface/api/InvestorPdfReport ile 4 türü çeker (Günlük Bülten 14 gün, Teknik Analiz 14 gün, Şirket 45 gün, Strateji 400 gün; contentPrivacy Public). Teknik bülten yapay zekâsız: kurumun kendi özeti maddelenir (akTeaserOzet, ücretsiz). Diğerleri ortakOzetle ile bir kez (yönetici anahtarı, Sonnet 5.5, PDF document kaynağı url; okunamazsa indirip base64) özetlenir, bütün kullanıcılara gösterilir (portfoy boş; portföy önceliği panelde). PDF saklanmaz; bağlantı Akbank yatırımcı portalına gider. İzin: robots.txt izinli, rapordaki yasal uyarıda dağıtım yasağı yok, raporlar herkese açık. Özet talimatına sade Türkçe ve terim açıklama kuralı eklendi; şemaya teknik kategorisi. Panelde Teknik Analiz sekmesi, ortak raporda Sil yok, yeniden özetle yalnız yönetici (/raporlar/ortak/:id/ozetle), yöneticiye bu ayın özet maliyeti (maliyet token toplamı × Sonnet fiyatı). Tahmini maliyet: ayda ~$2 (+ yıllık strateji raporu ~$0,7); ilk yoklamada geriye dönük ~19 rapor (~$2, bir kez). Kılavuz ve SSS güncellendi      
2026-10-03 Ak Yatırım yoklaması canlıda 0 rapor döndü (zamanlanmış görev yurt dışındaki bir Cloudflare noktasında çalışıyor; yerelde ve İstanbul noktasında 25 rapor geliyordu). Çözüm: Kurum Raporları sayfası açıkken panel POST /raporlar/ortak/yokla çağırır (Türkiye’deki noktadan; her kullanıcı tetikleyebilir, saatlik sınır, liste boş döndüyse 5 dk), aynı istek bekleyen en fazla 1 ortak raporu özetler; bekleyen varken dakikada bir tekrarlanır (krOrtakTetikle). Yoklama sonucu (tür başına HTTP durumu ve sayı, nereden) onbellek.ak_yokla‘da ve günlükte. ortakOzetle PDF’i önce Worker’da indirip base64 gönderir, olmazsa adres. Rapor yokken kendiliğinden açılan kurulum, raporlar gelince kapanır      
2026-10-03 Kurum Raporları › Yenile görünür geri bildirim veriyor (krYenile: düğme “Yenileniyor…”, liste önbelleksiz çekilir, özet sırası 50 sn sınırı beklenmeden tetiklenir, “✓ Güncellendi” 4 sn); bilgi satırında “1 rapor şu an özetleniyor” ve “N rapor sırada”. Canlıda ilk ölçüm: Ak Yatırım yoklaması Milano noktasından da 46 kayıt döndü (ilk cron’daki 0 geçici); Günlük Bülten özeti gerçek maliyeti $0,097 ve $0,116 (≈27–29 bin girdi, 4–6 bin çıktı token, Sonnet 5.5) → aylık ≈ $2,5–3      
2026-10-03 Kurum Raporları üst alanı Asistan grubundaki sayfalarla aynı ölçeğe indirildi: büyük yardim-hero (258 px, 19 px başlık, 50 px arama) yerine Bay Piyasa araç çubuğu bileşenleri — bp-toolbar (10/14 px iç boşluk), bp-lbl etiketi, 34 px arama, bp-toggle + bp-switch anahtarı, küçük kategori düğmeleri (12 px) ve altında bp-meter bilgi satırı (121 px; içerik 423 → 312. pikselde başlıyor). Rapor satırları Aylık Rapor ölçeğinde (başlık 13,5 px, ikon 34 px, satır 10/14 px). Telefonda Kurulum yalnız ⚙, anahtarla aynı satırda      
2026-10-03 Menü sırası: Asistan grubu (Bay Piyasa, Aylık Rapor, Kurum Raporları) Harcama ve bütçe’nin hemen altına alındı; İstatistikler ve Planlama bir alta kaydı (telefondaki Diğer menüsü ve Kılavuz kartları aynı sırayı izler; menü 768–1080 px’te kaydırmasız sığıyor). Kurum Raporları › “Raporlardaki tüm hisseler” varsayılan açık (krAyar tum: true); kullanıcı kapatırsa bu cihazda hatırlanır      
2026-10-03 Kurum Raporları › Özet modeli seçicisi (üst çubuk, Bay Piyasa’daki model seçici gibi): varsayılan Sonnet 5.5; Haiku 4.5, Opus 5.5, Fable 5.1 seçilebilir; seçim değişince altında maliyet ve kalite uyarısı (Haiku: yarı fiyat ama hata riski; Opus ~2 kat; Fable ~5 kat) ve kapsam notu. Seçim sunucuda users.ayar.raporModel (TERCIH_ALANLARI, RAPOR_MODELLER doğrulaması); raporOzetle kullanıcının, ortakOzetle yöneticinin seçimini kullanır; raporIstekGovdesi Haiku’ya effort ve yedek model göndermez. Yönetici maliyet satırı modele göre fiyatlanır (maliyet.modeller). İlk geriye dönük özetlerin gerçek maliyeti $2,91 (19 rapor; strateji $0,89)      
2026-10-03 Satır işlem düğmeleri yeniden tasarlandı (aksBtn): Güncelle (mavi kalem), Sil (kırmızı çöp kutusu), Kapattım (yeşil daire içinde tik), Faiz (gri dişli, KMH), Kaynak (gri oklar, hedef), Ekle / Bütçe koy (sarı artı); hafif dolgulu ve kenarlıklı, fare gerekmeden görünür; masaüstünde yazılı, ≤900 px’te 32 px ikon kare. Ortak satirHtml (Borçlarım, Finansal Durumum, Yatırımlarım, Harcama, Nakit Akışı, Ödeme Takvimi) ile Birikim Hedefleri ve Bütçe satırlarında. Kılavuz, SSS ve sayfa notlarındaki ✎ / ✓ / ⚙ / ⇄ / + atıfları düğme adlarıyla güncellendi (24 cümle). Şifre önerisi düzeltmesi: Profilim’deki Anthropic anahtarı kutusu (type=password) form dışındaydı; Chrome form dışındaki tüm kutuları tek form sayıp Harcama › Not gibi alanlarda şifre öneriyordu. Kutu kendi <form autocomplete=off>‘una alındı; giriş dışındaki bütün kutulara autocomplete="off" (otoDoldurmaKapat + MutationObserver). RULES 6c, 6d      
2026-10-03 Harcama Takibim: kayıt listesi ve ekleme formu her zaman içinde bulunulan ayla açılır (“ayın ilk 10 günü önceki ay” kuralı kaldırıldı; kullanıcı geçen ayı tablodan görür, geçmiş aya ay kutusundan girer). Kılavuz, SSS ve dipnot güncellendi      
2026-10-03 Satır işlem düğmeleri küçültüldü: önce %40 denendi (20 px, 10 px yazı) — masaüstünde yazı okunmayacak kadar küçüktü; son hali 22 px yükseklik, 10,5 px yazı, 12 px ikon (Kapattım 89×28 → 77×22 px, alan ≈ %32 küçük). Telefonda 32 → 22 px ikon, dokunma alanı ::after ile ~34 px korunur      
2026-10-04 Telefon üst çubuğu sıkıştırıldı (yalnız ≤640 px; tablet ve masaüstü aynı): başlık üstte; altında tek satır — solda küçük saat (17 px) + ikon “Kartları düzenle”, sağda durum noktası + son güncelleme saati + ikon Yenile. “Canlı · güncellendi” / “Bazı veriler alınamadı (…)” metni telefonda gizli (.st-uzun; tam metin ipucunda), yüklenirken “yükleniyor…” (.st-kisa). Üst çubuk 179 → 113 px; içerik 273 → 203. pikselde başlıyor      
2026-10-04 Telefonda durum etiketi: üst çubukta noktanın soluna kısa durum yazısı — veriler tamamsa yeşil “Güncel”, bazıları alınamadıysa kırmızı “Gecikmeli”; yüklenirken gizli (sağda “yükleniyor…”). #statusEtiket (.st-etiket, yalnız ≤640 px görünür); masaüstü ve tablet aynı      
2026-10-04 Telefonda sekme açıklamaları tek satır: her sekmeye telefon için kısa açıklama (TAB_BASLIKLARI 3. öğe; .alt-uzun / .alt-kisa), tire ve parantez yok, 11,5 px. 21 sekmenin hepsi 320 / 360 / 390 px’te tek satırda (en uzunu 204 px). Masaüstü ve tabletteki tam açıklamalar aynı      
2026-10-05 Bütçe Planlaması: düğmeler yüzdenin üstüne binmiyor — masaüstünde düğme sütunu 64 → 142 px (yazılı Güncelle + Kaldır ~140 px; % değerleri arkada kalıyordu). Üst çubuk orta genişliklerde sığıyor: 1024–1199 px’te zil ekran dışına taşıyor, durum metni her genişlikte (1440 dahil) “…” ile kesiliyordu → sağ sütun minmax(max-content,1fr), durum metni en fazla 260 px; 901–1279 px’te durum yalnız saat + ikon Yenile / Kartları düzenle; 901–1023 px’te başlık üst satırda. 901–1920 px arası 11 genişlikte taşma ve kesilme yok      
2026-10-05 Yatırımlarım: ortalama maliyet → kâr / zarar. Kalemde isteğe bağlı maliyet (birim başına; ABD hisse/ETF ve kripto $, BİST ₺, altın/gümüş ₺/gram). Satırın ortasında kâr / zarar tutarı + yüzdesi (.satir-kz, sabit 112 px sütun, satırlar hizalı; telefonda tutarın altında tek satır, ızgara düzeni). Maliyet yoksa “+ Maliyet” (Güncelle’yi maliyet kutusunda açar). Ekleme formunda maliyet kutusu (türe göre birim), Güncelle’de ikinci kutu (satirHtml duzen.ekler; boş kalan değişmez, 0 siler). Toplam Yatırım kartında toplam kâr / zarar (₺; dolar bazlılar bugünkü kurla). Bay Piyasa bağlamına maliyet ve kâr / zarar eklendi. Kılavuz + SSS      
2026-10-05 Kâr / zarar yan yana ve başlıklarda: satırda tutar ve yüzde tek satırda yan yana (168 px sütun). Her tür çerçevesinin başlığında o türün kâr / zararı kendi para biriminde (yatirimKatKzHtml; ABD/kripto $, BİST/emtia ₺), Portföyüm başlığında toplam (₺, #yatirimBolumKz) — çerçeve kapalıyken de görünür; telefonda başlığın alt satırında      
2026-10-05 Başlıklardaki kâr / zarar sütuna hizalı (>900 px): tür çerçeveleri ve Portföyüm başlığındaki kâr / zarar, satırlardaki kâr / zarar sütununun tam üstünde (.kz-sag, kzSutunHizala: açık bir satırdan ölçülür, hepsi kapalıysa son ölçüm; pencere boyutu değişince yeniden). 1440 / 1100 px’te ±0 px, çerçeveler kapalıyken de; tablet ve telefonda başlık satırında (.kz-ic)      
2026-10-08 Kartla ödenen harcama ve düzenli ödemeler → kart borcu. Harcama formunda “Nasıl ödendi?” (yalnız içinde bulunulan ay; nakit / kayıtlı kart); kart seçilirse tutar kart borcuna eklenir, harcamada kartEk: { kartId, tutar, ts }. Düzeltme / silme kart borcunu aynı farkla düzeltir — kart o harcamadan sonra elle güncellenmediyse (kart.tarih <= kartEk.ts; güncelleme banka rakamını esas alır, çift sayım yok). Ödeme Takvimi’nde düzenli ödemeye odemeKartId / odemeKartTs (formda ve satırda “ödeme:” seçimi): ödeme günü gelince o ayın otomatik harcama kaydı karta bir kez yazılır (duzenliKartaYansit; kart seçilmeden önceki ödemeler ve kart ödeme gününden sonra güncellendiyse atlandi). Borçlarım kart satırında döküm (“₺X + karta yazılan ₺Y (N harcama)”), harcama satırında “💳 kart”. Taksit sonraki aşama. Kılavuz + SSS      
2026-10-08 Harcama Güncelle: ad ve kart da değişir. Güncelle’de tutar (boş = değişmez), ad (mevcut adla dolu) ve “Nasıl ödendi?” (mevcut kartla dolu; içinde bulunulan ayın kaydında ya da zaten kartlı kayıtta). Kart değişince eski karttan düşülür, yenisine eklenir (harcamaKartDegistir; kart harcamadan sonra elle güncellendiyse ya da geçmiş ay → yalnız etiket). satirHtml ek kutuları artık tip: sayi | metin | secim ve deger (açılış değeri) alır; telefonda ad tam satır      
2026-10-08 Harcama Takibim: aylık tablo okla kapanır — Yatırımlarım / Borçlarım’daki küçük dinamik ok (.katla-ok); başlığa dokununca da açılır / kapanır, kapalıyken başlık ve yıllık toplam kalır. Varsayılan açık; seçim bu cihazda (ft_harcama_tablo_kapali)      
2026-10-08 Değişken faturalar: aya özel tutar ve son ödeme günü. Düzenli ödemede aylik: { 'YYYY-MM': { tutar?, gun? } } (son 24 ay; odemeAyBilgi). Güncelle’de tutar + son ödeme günü (boş = değişmez) + kapsam (“yalnız " / "yalnız " / "her ay"; faturada varsayılan sıradaki ay, diğerlerinde her ay). Takvim olayları (`odemeOlaylari` → yaklaşan ödemeler, nakit akışı, bildirimler, Bay Piyasa), Harcama Takibim kaydı ve kartla ödenen ödemenin karta yazılması o ayın değerini kullanır. Satırda tutar sütunu sıradaki ödemenin tutarı; aya özelse turuncu "Ekim: 10 Ekim · ₺1.234". Telefonda düzenleme iki satır      
2026-10-09 Kartla ödenen fatura ödeme gününde “✓ ödendi”. Önceden yalnız tarihi geçmiş ödemeler ödendi sayılıyordu; kartla ödenen düzenli ödeme ödeme günü karta yazılıyor ama o gün “bugün” görünüyordu. Olaya odendi / kartla eklendi (o ayın od-… harcama kaydı kartEk taşıyorsa); olayOdendi özet kartları, yaklaşan liste, takvim ✓, gün ayrıntısı, üst “Yaklaşan ödeme” uyarısı ve bildirimlerde ortak ölçü      
2026-10-09 Düzeltme: günü gelmemiş ödemeler “ödendi” görünüyordu. Fatura erken bir günle karta yazıldıktan sonra o ayın son ödeme günü ileri alınınca (Güncelle → “yalnız Ekim”, gün 12) kayıt karta yazılmış kalıyor; ödeme 12’sinde “ödendi” görünüyor ve tutar karta erken eklenmiş oluyordu. duzenliKartaYansit artık ödeme günü ileride olan kartlı kaydı karttan geri alıp kartEk‘i siler (gününde yeniden yazılır; açılışta mevcut veriyi de onarır); olayOdendi günü gelmemiş ödemeyi hiçbir zaman ödendi saymaz      
2026-10-09 Düzeltme: sabit ödemeye kart seçilince tarihi gelmeden karta yazılıyordu. Harcama Takibim’deki otomatik kaydın Güncelle’sinden kart seçmek tutarı hemen karta yazıyordu. Artık sabit ödeme kaydında kart seçimi ödemenin odemeKartId ayarını değiştirir (Ödeme Takvimi’ndeki “ödeme:” ile aynı); karta yalnız ödeme günü gelince duzenliKartaYansit yazar. Ödeme günü geçmiş ve yazılmış kayıtta kart değişirse tutar yeni karta taşınır. Onarım: tarihi gelmemiş ama karta yazılmış bütün sabit ödeme kayıtları açılışta karttan geri alınır, kart seçimi ödemeye aktarılır. Harcama satırında “💳 kart · ödeme gününde”      
2026-10-11 Ödeme Takvimi: erken ödeme. Yaklaşan listede kredi taksiti ve kart son ödeme gününde “Erken öde” (o gün “Ödedim”; telefonda da yazılı .aks-btn.yazili). Kredi: loan.erken = { taksitTarihi: ödendiğiGün } (krediKaydiGuncelle → ft_custom_loans_v1 / ft_sabit_krediler_v1); loanGuncelBorc erken ödenen taksiti ödenmiş sayar (kalan anapara o taksitten sonraki, faiz asıl tarihten); taksitler sırayla. Kart: tutar kutusu “ödeyeceğim” ile dolu; o.odendi = { ay: { tutar, dusulen, gun } }, ödenen tutar kart borcundan düşülür, dönem tutarı donar, güncelleme hatırlatması çıkmaz. “✓ ödendi · erken (11 Eki)” + Geri al; olayOdendi elle erken ödeneni de sayar (özet, takvim ✓, bildirim, uyarı). Kılavuz + SSS      
2026-10-11 Ödeme Takvimi: kredi kartı bölümü yeniden düzenlendi + takvim LED / ödenen soluk. Kart bölümünde etiketsiz “gün” kutusu ve “dönem” dili kafa karıştırıyordu: her kart artık bir kutu — “Son ödeme: 16 Ekim · 5 gün sonra · her ayın [16]. günü” (seçim kutusu), sağda toplam borç; “16 Ekim ekstresi” altında etiketli Ekstre borcu / Asgari ödeme / Ödeyeceğim, “Tamamını öde” / “Asgariyi öde” kısa yolları, Erken öde / Ödedim (burada da), sade dille durum cümlesi (faiz uyarısı; ekstre yoksa takvimdeki tutarın tahmini olduğu). Ödenmişse “✓ … ödemesi yapıldı · Geri al”. Günü girilmemiş kartta açık soru. Takvim hücresi: kalan tutar belirgin, ödenen üstü çizili soluk; ödenmemiş noktalar kendi renginde LED gibi yanar (.led, hareket azaltma tercihine uyar), ödenenler soluk; Yaklaşan listesindeki noktalar da      
2026-10-12 Birikim Hedefleri: tamamlanma yüzdesi iki ondalıklı (%0,37) — büyük hedeflerde (ör. $200.000) küçük ilerleme %0 görünüyordu; hedef satırında ve üstteki “… tamam” toplamında. Yüzde sütunu 62 px      
2026-10-14 Aylık rapor hazır bildirimi. Ay bitince (geçen ay harcama girildiyse) zilde yeni “Raporlar” grubunda “Eylül 2026 raporun hazır” (harcama + önceki aya göre değişim; raporBildirimi, kimlik rapor\|YYYY-MM, dokununca o ayın raporu: raporAy) ve Piyasa Özeti’nin üstünde mavi şerit (#raporSerit; telefonda tek satır “Eylül raporun hazır ₺… ▼ %… Oku ›”, × ile kapanır). Rapor açılınca (bildirimden, şeritten ya da menüden) okundu sayılır, ikisi de kalkar; yenileyince geri gelmez. Kılavuz + SSS      
2026-10-14 Aylık Rapor: kurum raporlarından ayın özeti + “yorumu çıkar” hatırlatması. Yeni bölüm (raporKurumOzeti / raporKurumCiz): o ayın özetlenmiş kurum raporları — rapor ve kurum sayısı, portföydeki hisselerde ayın son tavsiye / hedef / potansiyeli ve ay içindeki değişiklikler (KR_DEGISIM etiketleri), piyasa görüşü (varlık başına ▲▼– sayısı; “BIST 100” / “BIST-100” birleşir), önümüzdeki takvim. Bay Piyasa dosyasına “## KURUM RAPORLARI” (raporKurumMetni), sistem talimatına “Kurumlar bu ay ne dedi?” kuralı; yorumdan önce liste yoksa yüklenir. Hatırlatma aşamalı: yorum yoksa ve Bay Piyasa kullanılabiliyorsa “… raporun hazır · Bay Piyasa yorumunu çıkar” (yorum çıkarılana kadar kalır; dokununca yorum bölümüne kaydırır, düğme vurgulu), yorum çıkınca “değerlendirmesi hazır” (rapor\|ay\|yorum, bakarken okundu), Bay Piyasa yoksa eski davranış. Masaüstünde bölümlere scroll-margin-top (yapışık üst çubuğun altında kalmasın)      
2026-10-15 Alacaklarım. Finansal Durumum’da yeni bölüm (ft_alacaklar_v1, panel SENKRON_ANAHTARLARI + Worker IZINLI_ANAHTARLAR; Worker yeniden yüklendi): kimden, tutar, ne zaman (isteğe bağlı). Net servete varlık olarak (Finansal Durumum kartları + dağılımda “Alacaklar”, netDurum, istatistikler, Bay Piyasa bağlamı). Ödeme Takvimi’nde yeşil “gelen para” (alacakOlaylari; Yaklaşan listesi, takvim hücresinde “+₺…”, gün ayrıntısı, özette “Gelecek”; ödeme toplamlarına girmez; gecikmiş olan bugünde). Nakit Akışı: beklendiği ayın geliri (ayGeliri.alacak; gecikmiş → bu ay), gelir listesinde salt okunur satır. Bildirim: yarın / bugün / gecikti (“Gelecek paralar” grubu). “Geldi”: gelen tutar (kısmi olabilir) kalanı düşer, bu ayın tek seferlik geliri (kaynak:"alacak"), istenirse TL nakit / mevduat varlığına eklenir (net servet değişmez). Güncelle (kalan + tarih; satirHtml ek kutusu tip:"tarih", aksiyonOn). Borçlarım’da Elden Nakit Borçlar altında yönlendirme. Kılavuz + SSS      
2026-10-16 Parmak izi / Face ID ile giriş (WebAuthn / passkey). Worker: passkeys (kimlik, kullanıcı, açık anahtar SPKI, alg −7 / −257, imza sayacı, ad) ve webauthn_sinama (tek kullanımlık, 5 dk) tabloları; /auth/passkey/giris-baslat + /auth/passkey/giris (oturumsuz; origin izinli listede, clientData türü / sınama / origin, rpIdHash, UP + UV bayrakları, imza Web Crypto ile, sayaç; hatalar 15 dk kilide sayılır), /auth/passkey/kayit-baslat + /auth/passkey/kayit (oturumlu; keşfedilebilir anahtar, platform doğrulayıcı, authData içindeki kimlik eşleşmesi), GET /auth/passkey, DELETE /auth/passkey/:id. Panel: giriş ekranında “Parmak izi / Face ID ile giriş” (yalnız isUserVerifyingPlatformAuthenticatorAvailable; bu cihazda eklendiyse şifre alanlarının üstünde, dolu), Profilim › Güvenlik’te cihaz listesi / ekle / kaldır, telefonda şifreyle girişten sonra bir kerelik öneri şeridi (ft_passkey_id, ft_passkey_teklif yalnız bu cihazda). Yerelde (wrangler dev, boş D1, geçici .dev.vars — silindi) Chrome sanal doğrulayıcısıyla test edildi: kayıt, şifresiz giriş, bozuk imza / tekrar oynatma / izinsiz kaynak reddi, kaldırma      
2026-10-18 Alacak “Geldi” → nereye gitti. Önceden yalnız TL nakit / mevduat hesabı ya da “Hiçbir hesaba ekleme” vardı. Gruplu seçim (alacakHedefSecenekleri / alacakHedefeUygula): KMH borcundan düş (bugünkü borçtan — işlemiş faiz dahil — düşer, tarih bugüne alınır, anapara azalır), nakit / mevduat hesabına ekle, yeni nakit hesabı aç, kart borcuna öde (kartaYaz eksi), elden borca öde (dövizliyse güncel kurla; tamamı ödenirse borç kapanır), elde tuttum / harcadım. Borçlara en fazla borç kadar; artan bildirilir. Varsayılan: KMH borcu varsa ilki, yoksa ilk nakit hesabı, yoksa elde tuttum. Gelir kaydının adında nereye gittiği      
2026-10-19 Uygulama gibi bildirim (Web Push). Worker: push_abone (endpoint yalnız bilinen push servisleri — FCM, Apple, Mozilla, Windows; yerel testte PUSH_TEST_ADRES), push_plan (kullanıcı + kimlik birincil anahtar; 0 bekliyor / 1 gönderildi / 2 süresi geçti) tabloları; /push/durum, /push/abone (POST / DELETE), /push/plan, /push/dene; mesaj RFC 8291 aes128gcm ile şifrelenir, RFC 8292 VAPID (ES256) ile imzalanır — kütüphanesiz, Web Crypto; zamanlanmış görev (5 dk) vakti gelenleri gönderir (6 saatten fazla geciken atlanır), 404 / 410 aboneliği siler. Secret: VAPID_PUBLIC / VAPID_PRIVATE / VAPID_SUB (iletişim: site adresi, e-posta değil). Panel: Profilim › Telefon bildirimleri (aç / deneme / bu cihazda kapat, iPhone’da ana ekrana ekle yönlendirmesi), bildirim saati (users.ayar.pushSaat, 07–22); pushPlaniUret önümüzdeki 14 günün zil bildirimlerini (ödeme, alacak, ayın 1’inde rapor) seçilen saate planlar, değişince 8 sn sonra gönderilir (iz aynıysa 6 saat içinde tekrar yazılmaz); zilde “📲 Telefona gelsin”. sw.js: push → bildirim (tag = kimlik, yığılmaz), notificationclick → panel ?sekme= ile o sayfada. Test: Node’da RFC 8291 alıcısıyla çözme + VAPID imza doğrulama; yerel Worker + sahte push servisiyle abonelik / deneme / plan / zamanlı gönderim / tekrar yok / 410 silme; Chrome ServiceWorker.deliverPushMessage ile bildirim gösterimi      
2026-10-16 Telefona uygulama olarak yükleme (PWA). manifest.webmanifest, icons/ (192/512/maskable/apple-touch) ve önce-ağ sw.js eklendi; <head>e manifest, theme-color (tema anahtarının güncellediği etiket artık var), apple-touch-icon. Android Chrome › Uygulamayı yükle: kendi simgesi, adres çubuksuz, çevrimdışı son kopya. Worker değişmedi; veri aynı hesapta senkron. SSS › Başlarken’e soru eklendi. APK (TWA) alt alan adına geçişe bırakıldı (assetlinks.json kökte olmalı)      
2026-09-30 Bütçe Planlaması: gelecek 12 ay seçilebilir; tutar “her ay” ya da “yalnız o ay” için kaydedilir (aya özel bütçe), ısı tablosunda gelecek aylar “plan”      
2026-09-30 “Bütçe” sayfasının adı “Bütçe Planlaması” oldu      
2026-09-30 Nakit Akışı her açılışta içinde bulunulan ayla açılır      
2026-09-30 Birikim Hedefleri kartlarında dolar yeşil, altın sarı      
2026-09-30 Birikim Hedefleri: “şu an biriken” için Elle / Yatırımlarımdan (otomatik) seçimi — birden fazla yatırım ya da tüm yatırımlar; mevcut hedefte ⇄ ile kaynak değiştirme      
2026-09-30 Birikim Hedefleri: Hedefler, Biriken ve Ayda ayırman gereken kartlarına güncel dolar ve gram altın karşılığı (kur değişince anında güncellenir)      
2026-09-30 Düzenli ödemeler ve abonelikler Harcama Takibim’e bu ay ve gelecek ay için otomatik eklenir (harcama kategorisi seçilebilir; silinen ay geri gelmez, elle değiştirilen korunur)      
2026-09-30 Ödeme Takvimi: kartın sıradaki dönemi için dönem borcu, asgari ve ödeyeceğim tutarı; takvim ödeyeceğin tutarı kullanır; kalan borç ve asgari uyarıları, ödeme sonrası güncelleme hatırlatması      
2026-09-30 Ödeme Takvimi kartları: 1. “Ekim ödemeleri” ayın sabit toplamı, 2. “Ekim kalan” (Önümüzdeki 7 gün kaldırıldı); kart dönem tutarı kaydedilir, ödeme günü geçince toplam değişmez      
2026-09-30 Harcama ve bütçe grubunda sıra: Harcama Takibim, Ödeme Takvimi, Nakit Akışı, Bütçe      
2026-09-30 Ödeme Takvimi: “Bu ay · kalan” kartı seçili ayın ödemeleri oldu (ör. Ekim ödemeleri); bugünden önceki ödemeler ödendi sayılır, kalan tutar ona göre      
2026-09-30 Harcama kategorilerine Araç bakım, Sigorta ve Vergi eklendi (12 kategori)      
2026-09-30 Ödeme Takvimi: yaklaşan ödemeler 45 gün yerine takvimle aynı ay (ay taşması yok); kart tutarı yalnızca sıradaki son ödeme gününde      
2026-09-30 Menüde İstatistikler grubu Planlama’nın üstüne alındı      
2026-09-30 Net Varlık Geçmişi: grafik TL / dolar / gram 24 ayar altın bazında; kayda gram altın fiyatı eklendi; aylık özete Altın (gr) sütunu; kuru olmayan eski kayıtlara günlük kapanış      
2026-09-30 Yatırımlarım’da her tür (ABD ETF, Kripto, BİST, Emtia) ayrı çerçevede (tür, kalem sayısı, pay, toplam, o türü seçili açan +); yatırım çerçeveleri yeşil, borç çerçeveleri kırmızı 4 px sol çizgi + hafif yansıma      
2026-09-30 “Harcama İstatistikleri” sayfasının adı “Harcama Takibim” oldu (menü, başlık, notlar)      
2026-09-30 Aylık Rapor: ayın harcama/bütçe/nakit/borç/net varlık özeti, kurallı öne çıkanlar, kategori tablosu, kaydedilen Bay Piyasa yorumu, yazdır/PDF      
2026-09-30 Birikim Hedefleri: TL/$ hedefler, ayda gereken, plan çizgisi, elle ya da yatırıma bağlı birikim, Nakit Akışı kıyası      
2026-09-30 Net Varlık Geçmişi: günlük otomatik kayıt, 7/30 gün ve başlangıçtan beri değişim, aralık seçmeli grafik, aylık özet      
2026-09-30 Ödeme Takvimi: taksitler, kart son ödeme günleri, düzenli ödemeler ve abonelikler; 45 günlük liste, aylık takvim, Piyasa Özeti’nde 3 günlük uyarı şeridi      
2026-09-30 Borç Kapatma Planı: ek/tek seferlik ödeme, Çığ ve Kartopu karşılaştırması, yalnız asgari senaryosu, borç azalış grafiği, kapatma sırası, faiz işleyen kart seçimi; menüye Planlama grubu      
2026-09-30 Nakit Akışı sayfası: gelirler (düzenli/tek seferlik, zam geçmişi korunur), kredi taksitleri ödeme planından, ay sonu kalan ve tasarruf oranı, 18 aylık gerçekleşen + tahmin grafiği, kredilerin bitişi      
2026-09-30 Bütçe sayfası (kategori sınırları, medyan öneri, aşım, 12 aylık ısı tablosu); menüye “Harcama ve bütçe” grubu; telefonda alt çubuk 6 sayfa + Diğer menüsü; yeni senkron anahtarları Worker’a eklendi      
2026-09-30 KMH canlı faiz: aylık faiz + anapara ile borç her gün kendiliğinden artıyor (faiz + %15 KKDF + %15 BSMV, anaparaya işler); ⚙ ayar penceresi; formül bankanın gerçek rakamıyla doğrulandı      
2026-09-30 Elden nakit: dövizli borcun TL karşılığı güncel kurla hesaplanıyorsa satır ve özet ışığı yeşil yanar      
2026-09-30 E-posta + şifre ile giriş ekranı (yeni tasarım, şifre göster/gizle, Türkçe doğrulama mesajları, e-posta hatırlama); Worker’da LOGIN_USER kontrolü, birleşik hata mesajı; gerçek Worker kodu yerelde (wrangler dev) test edildi      
2026-09-29 Harcama girişi ay bazında: tarih yerine ay seçimi (ayın ilk 10 gününde önceki ay varsayılan), kayıtlarda “Eylül 2026”, en son eklenen üstte      
2026-09-29 BİST hisseleri kod + adetle eklenip arka planda takip ediliyor (Yahoo KOD.IS, 15 dk gecikmeli, günlük değişim, performansa dahil); geçersiz kod anında uyarı      
2026-09-29 Yatırımlarım: Toplam Yatırım kartında günlük / haftalık / aylık performans (mevcut adetlerin geçmiş fiyatlarla değeri)      
2026-09-29 Varlık Dağılımı pastası SVG halka grafiğe dönüştü (pürüzsüz kenar, eşit aralıklar, küçük paylar en az 14°)      
2026-09-29 Yatırımlarım: Emtia’ya gümüş eklendi (fiyat arka planda Yahoo SI=F), kategori ve varlık adları büyük harf; Net Varlık ve Yatırım/Borç Oranı kartlarına renkli ton (oran eşikleri %50 / %100); tonlu kartlarda sol kenar tam renk      
2026-09-29 Borçlarım’da Toplam Borç öne çıkan kart (2 sütun, 26 px, kırmızı ton, nabız); Yatırımlarım’da Toplam Yatırım yeşil ve 23 px      
2026-09-29 Harcama grafiği ve Kategoriler dikeyde ≈%23 küçüldü (288 → 223 px); kategori çubukları en büyüğe göre ölçekli; telefon alt menüsünde kısa etiketler (7 sekme sığmıyordu, Bay Piyasa kesiliyordu)      
2026-09-29 Çeşitlendirme, Borç karşılama ve Döviz koruması: açıklamaya yer açıldı (çubuk ≈%18 kısa, sabit değer sütunu), telefonda çubuklar tam genişlik ve eşit      
2026-09-29 Portföy yaşı bölümü sadeleşti: ayrı grafik ve tablo tek ince listede birleşti (≈500 → 290 px), yaş tıkla-düzenle, ortalama çizgisi; tekrar eden uyarılar kaldırıldı      
2026-09-29 Portföy İstatistikleri’nde genel puan öne çıkan kart oldu (2 sütun, büyük puan, derece rozeti)      
2026-09-29 Sol menü gruplandı (Varlık ve borç · İstatistikler · Asistan); görev testi: 7 görevin hepsi tek tık      
2026-09-29 Harcama İstatistikleri ve Portföy İstatistikleri ortak tasarım diline uyduruldu: anlamlı kart renkleri (puana göre yeşil/sarı/kırmızı), yıl/ay seçimi bölüm başlığında, ortak tablo ve çubuk stili, bölüm başlığında puan/toplam, açıklamalar sayfa sonundaki Not’ta      
2026-09-29 Harcamalarda dolar ve gram altın karşılıkları (her ay kendi ortalama kuruyla), tüm dönem ortalaması, Kategorisiz kategori; 2025 Mart–Aralık aylık toplamları D1’e eklendi      
2026-09-29 2026 Ocak–Eylül harcamaları bütçe Excel’inden D1’e bir kereliğine aktarıldı (79 kayıt, 8 ay toplamı Excel ile birebir); ortalamalar yalnızca tamamlanmış aylardan hesaplanıyor      
2026-09-29 Harcama İstatistikleri sekmesi: tek tek harcama ve aylık toplam girişi, 9 kategori, aylık grafik, kategori dağılımı, aylık tablo, ortalamalar; Bay Piyasa harcama analizi; ft_harcamalar_v1 senkron anahtarı (Worker’a eklendi)      
2026-09-29 Finansal Durumum, Yatırımlarım, Borçlarım ve Portföy İstatistikleri Piyasa Özeti’nin tasarım diline geçti: ortak özet kartları, bölüm başlığında toplam ve + Ekle, satır içi ✎ düzenleme, sayfa sonunda tek Not; üst çubuk alt başlıkları eklendi      
2026-09-29 Haberler kurumların kendi RSS yayınlarından: Türkçe kaynaklar (Investing.com Türkiye, Bloomberg HT, Anadolu Ajansı) öncelikli, BBC/CNBC Google Çeviri ile Türkçe açılır; basın bültenleri ve fon sayfaları elenir; Worker proxy izin listesine haber alan adları eklendi      
2026-09-29 Tüm kartların altında bilgi satırları: Dün/Aralık (döviz, altın, Brent), 24s önce/24s aralık (kripto), Önceki (uranyum, işlem görmeyen ETF)      
2026-09-29 Piyasa Özeti kartları dikeyde kısaltıldı (yüzde ve seans notu aynı satırda, sıkı seans satırları); 1440×900 ekranda grafik kaydırmadan görünür      
2026-09-29 Döviz kurları her turun başında çekiliyor, tüm TL karşılıkları hemen güncelleniyor (nakit borçta kurun saati görünür); ETF kartlarında seans öncesi / kapanış / sonrası satırları      
2026-09-29 Test sonrası düzeltmeler: ilk taksidi gelmemiş krediler görünür; kripto fiyatları Binance’e taşındı (CoinGecko 429); yatırım listesi artık dakikada bir sunucuya yazılmıyor; Excel tarih kayması ve “Kalan Ana Para” sütunu düzeltildi; Excel şablonu eklendi; telefon görünümü (alt sekme çubuğu, taşmalar) düzeltildi; sekme simgesi eklendi