Pano
Uygulamayı açtığında bugünün ne olduğunu tek ekranda görürsün: sırayla market vitrinin, koçun sözü, bugünkü antrenmanın, beslenme hedefin ve ilerlemen.

Pano — üst kısım · 1/4
Uygulamanın ana ekranı. Giriş yaptıktan sonra her açılışta buraya düşersin; alt gezinme barı yalnız burada çizilir.
Bugünün ne olduğunu okursun ve tek dokunuşla ilgili modüle geçersin — panonun kendisi bir işlem ekranı değil, gün başlangıcıdır.
- Market vitrini / “Tümünü gör” → KY Market
- Vitrindeki bir ürün kartı → o ürünün detay sayfası
- Öneri kartındaki eylem satırı → hedefi öneri koduna göre değişir (Antrenman planı · Beslenme · Vücut Form Analizi · İstatistik)
- Antrenman panelindeki “Aç” → bugünün antrenman planı
- Sağ üstteki zil → Bildirimler · dişli → Ayarlar · avatar → Profil
- Alt bar: Antrenör · Diyetisyen · ortadaki küre → GymSphere
Bu ekranda ne var 6
Sabah uygulamayı açtın. En üstte adın ve avatarın var, altında küçük gri bir satır: “Bugün katıldın”.
O satır, KY yolculuğunun kaçıncı gününde olduğunu söyler.
Sunucu sadece bir birim ve bir sayı döndürür (bugün / gün / ay / yıl); cümleyi telefon kurar. Böylece aynı bilgi İngilizceye geçtiğinde de doğru kalır. Sunucu ilk-görülme kaydını hiç göndermediyse satır çizilmez — uydurma bir “1. gün” yazılmaz.
Satır yoksa panik yok: yalnız yolculuk kaydı henüz oluşmamıştır, panonun kalanı normal çalışır.
Buna sistemde “dürüst boşluk” (honest empty) denir.
Adının hemen altında ince bir ilerleme çubuğu bekliyorsun ama bazen çubuk yerine “gösterilemiyor” yazısı çıkıyor.
Çubuk yalnız sunucudan XP anlık görüntüsü geldiyse çizilir.
Eskiden veri gelmediğinde çubuk seviye ADINDAN sabit bir oranla dolduruluyordu (Başlangıç %18, Orta %45 gibi) ve kullanıcı onu kendi gerçek ilerlemesi sanıyordu — oysa sayı hiçbir şey ölçmüyordu. Sıfır dolu çizmek de yasak, çünkü sıfır da bir iddiadır ve “hiç ilerlememişim” diye okunur.
Çubuğu görmek istiyorsan bu hafta en az bir seans kaydet; XP haftalık seans satırlarından türer.
Buna sistemde “fail-closed” (kapalı tarafta hata ver) denir.
Panonun en üstündeki büyük kart bir mağaza rafı gibi: ürünler yavaşça sağa sola kayıyor.
Bu, sana özel seçilmiş 16 üründen oluşan haftalık vitrindir; kendi kendine kayar, sen de parmağınla kaydırabilirsin.
Market panonun EN ÜSTÜNDE duruyor ve bu bilinçli bir ürün kararı. 2026-07-17’de bir bilgi-mimarisi denetimi “önce kullanıcının işi gelmeli” diyerek marketi aşağı almıştı; ürün sahibi ticari önceliği geri çağırdı ve market 1. sıraya döndü.
Kart boş görünüyorsa üç ayrı sebebi olabilir ve üçü ayrı cümle yazar: “yükleniyor” (bekle), “şu an ürün yok” (beklemek bir şey değiştirmez), “aydınlatma metnini onayla” (dokun ve onayla, ekran o anda dolar).
Buna sistemde “durum makinesi” (state machine) denir.
Vitrinin altında ampul ikonlu “ÖNERİ” başlıklı mor bir kart var: “Her yeni hafta yeni bir başlangıç…” ve altında oklu bir satır.
Bu, ücretsiz kullanıcının koç yuvasıdır — deterministik koçluk brifi.
Koç yuvası panoda TEK karttır ve tier’a göre birbirini dışlayan iki karttan birini gösterir: ücretsizde bu “ÖNERİ” kartı, premiumda “Koçun önerisi” kartı. İkisi asla birlikte çizilmez; wellness segmentinde yuva tamamen gizlenir.
Alttaki oklu satıra dokunduğunda seni hangi ekrana götüreceği, kartın METNİNE değil sunucunun gönderdiği mesaj koduna bakılarak seçilir — yani uygulamanın dili değişse de aynı dokunuş aynı yere gider.
Buna sistemde “karşılıklı dışlayan yuva” (mutually exclusive slot) denir.
“ANTRENMAN” başlığının altında “Alt A — Quad · 7 hareket · 27 set” yazıyor ve yeşil bir “Aç” düğmesi var.
Bu satır bugünün planlanmış antrenman gününün özetidir: bölge adı, hareket sayısı, planlanan set sayısı.
Sayılar panoda hesaplanmaz; bugünün gün özetinden okunur. Tamamlanan set sayısı planlanan sete eşit veya fazlaysa kart “tamamlandı” rozetine döner — yani kart bittiğini kendi anlar.
“Aç”a bastığında pano önce plan motoruna bugünün planını sorar, cevabı alınca antrenman ekranını o planla açar. Plan alınamazsa düğme SESSİZCE hiçbir şey yapmaz ve kayıt düşer — yanlış bir plana girmektense girmemek tercih edilir.
Buna sistemde “plan çözümlemesi” (plan resolution) denir.
Ekranın en altında sabit duran bir çubuk var: solda mor “ANTRENÖR”, sağda yeşil “DİYETİSYEN”, ortada KY küresi.
Üç kapıdır: iki uzman kanadı ve ortadaki GymSphere.
Ortadaki küre boş bir süs değil, üçüncü kapıdır. “Panoya dön” yapılamazdı, çünkü bu çubuk zaten yalnız panoda çizilir — kendi ekranına dönen tuş ölü tuştur. Çubuğun hangi ekranlarda çizileceği yoruma bırakılmamış, bir sınıflandırma tablosuyla kilitlenmiştir: her rota ya “bar var” ya “bar yok” kümesinde olmak zorunda.
Kanatlar bugün kilitli; kilit “giremezsin” değil “henüz açılmadı” demektir ve sekmeler yine de açılır.
Buna sistemde “rota politikası testi” (route policy test) denir.
Perde arkası — sistem nasıl karar veriyor 10
Vitrindeki 16 ürünü kim seçiyor — 1/4: ham puan
Panoyu açtın ve vitrinde ilk kart “Whey Protein İzolat 1kg”. Katalogda yüzlerce ürün varken neden bu?
Her ürün önce bir puan alır ve puan dört parçadan toplanır.
Parçalar şunlar: (1) SEGMENT UYUMU 0–100 — ürünün etiketleri ile senin segmentinin (hedef × seviye × cinsiyet) yakınlığı, ürünün tanınan etiketlerinin ortalaması; (2) TAZELİK +20 — bu hafta sana henüz gösterilmemişse; (3) ROTASYON CEZASI −15 — daha önce gösterilmiş ama satın alınmamışsa; (4) KAMPANYA +30 — o ürünü kapsayan ve senin segmentini hedefleyen aktif bir kampanya varsa. Toplam 0–200 arasına kırpılır, sonra puana göre büyükten küçüğe, eşitlikte ürün kimliğine göre sıralanır. Rastgelelik yoktur: aynı girdi her zaman aynı sırayı verir.
Vitrinin hafta içinde kendiliğinden değişmesinin sebebi budur: bir ürünü görüp almadıysan ertesi hafta puanı düşer ve yerini başkası alır.
Buna sistemde “bileşik puan” (composite score) denir.
Vitrindeki 16 ürünü kim seçiyor — 2/4: segmentin nereden geliyor
Kayıt olurken “yağ kaybı” dedin, seviyeni orta seçtin, cinsiyetini erkek olarak girdin. Vitrin bunları nereden okuyor?
Segmentin üç alandan doğar: eğitim hedef etiketin, seviye kademen ve cinsiyetin.
Bu üç alan profil omurgandan okunur — yani onboarding ve profil düzenlemelerinin birleştiği tek kayıttan. Eşleme birebirdir: hedef etiketi `fat_loss` → yağ kaybı segmenti, `muscle`/`toning` → kas, `strength` → güç, `health` → sağlık; seviye `L1` → başlangıç, `L2` → orta, `L3`/`L4` → ileri. Tanınmayan/boş değer sessizce “erkek” gibi bir varsayıma düşmez: cinsiyet “belirtilmemiş”e, hedef “sağlık”a, seviye “başlangıç”a düşer.
Vitrinin sana yabancı geliyorsa ilk bakılacak yer profildeki hedef ve seviyedir — orayı düzelttiğinde vitrin bir sonraki yüklemede değişir.
Buna sistemde “profil omurgası” (profile spine) denir.
Vitrindeki 16 ürünü kim seçiyor — 3/4: kategori dengesi ve eleme
Yağ kaybı hedefiyle vitrini açtın. Ekranda yalnız protein tozu olsaydı garip olurdu; oysa arada organik gıda, toparlanma ürünü, ekipman da geçiyor.
Puanlar sıralandıktan sonra kategori kotası uygulanır.
Hedefine göre sabit bir dağıtım tablosu var. Yağ kaybında 16 slot şöyle bölünür: takviye 4, organik gıda 4, sağlık/toparlanma 2, paket 2, ekipman 1, giyim 1, koruyucu 1, aksesuar 1. Kas hedefinde takviye 5’e çıkar, güçte ekipman 3’e. Adaylar da her kök kategoriden en iyi 5 ürün alınarak kurulur — böylece tek kategori havuzu ele geçiremez. Bunun ÖNÜNDE bir güvenlik kapısı çalışır: hamilelik/emzirme beyanı ya da 18 yaş altı gibi durumlarda uygun olmayan kategoriler ürün kimliği düzeyinde elenir ve bu eleme önbellekten, satın alınmış yuvalardan, aday havuzundan ve yapay zekânın önerisinden AYRI AYRI uygulanır. Kapı sorulamazsa vitrin BOŞ kalır — “kapı çalışmadı, hepsini göster” davranışı bilerek yoktur.
Sağlık beyanını güncellemek vitrini anında daraltır; bu bir kısıtlama değil, güvenlik kararıdır.
Buna sistemde “kategori kotası + fail-closed güvenlik kapısı” denir.
Vitrindeki 16 ürünü kim seçiyor — 4/4: yapay zekâ ne yapıyor, ne yapamıyor
Profil ekranından kişiselleştirme anahtarını açtın. Vitrin bir hafta sonra biraz farklı sıralanmış görünüyor.
Yapay zekâ sıralamayı yeniden düzenler; listeye ürün EKLEYEMEZ.
Yapay zekâya yalnız deterministik motorun ürettiği aday havuzu, slot sayısı ve kategori kotaları gönderilir. Dönen öneriler üç süzgeçten geçer: aday havuzunda olmayan atılır, zaten satın alınmış olan atılır, güvenlik kapısının elediği atılır. Geriye kalanlar slot sayısının yarısına bile ulaşmıyorsa yapay zekânın cevabı tamamen çöpe atılır ve deterministik sıra kullanılır. Kişiselleştirme rızası kapalıysa bu adım hiç çalışmaz ve vitrin yine dolu gelir. Yapay zekânın yazdığı gerekçe metni de HTML/betik/kontrol karakterlerine karşı temizlenir ve 120 karaktere kırpılır.
Rızayı vermezsen vitrin boşalmaz — yalnız sıralama kişiselleşmez. “AI kapalıysa market çalışmaz” diye bir durum yoktur.
Buna sistemde “yeniden sıralama katmanı” (AI rerank layer) denir.
Kartın altındaki cümle — “PROTEİN EKSİĞİ” ne demek
Vitrindeki protein kartının altında “YAĞ KAYBINA · ₺799” gibi bir satır var; başka bir kartta “Güç antrenmanı planına uygun” yazıyor.
Bu satır iki ayrı kaynaktan birleşir: ürünü vitrine çıkaran gerekçe ve sunucunun taktığı uygunluk rozeti.
Gerekçe, ürünü listeye sokan sebebin dil-bağımsız anahtarıdır (kampanya, hedef uyumu, protein eksiği gibi) ve metni telefonda çözülür. Rozet ise ayrı bir sunucu ucundan gelir; girdisi olan segment ve güvenlik bayrakları kasadan yazılır, telefon yalnız “hangi ürünler için soruyorum” listesini gönderir. Rozet ucu susarsa cihaz KENDİ rozetini üretmez, hiç rozet çizilmez — uydurma bir “%72 uyum” kullanıcıyı yanlış ürüne yönlendirirdi. Kart yine görünür; rozet kartın ön koşulu değildir.
Satırda bir gerekçe göremiyorsan yalnız fiyat kalır; bu, ürünün sana uygun olmadığı anlamına gelmez, o an rozet kararının alınamadığı anlamına gelir.
Buna sistemde “ince istemci” (thin client) denir.
İhtiyaç sinyali — “protein eksiği” hangi ölçümden doğuyor
Geçen hafta 5 gün öğün kaydettin ve günlük protein ortalaman hedefinin altında kaldı. Bu hafta vitrinde protein ürünleri öne çıkıyor.
Vitrinin yanında ikinci bir hat çalışır: ihtiyaç-tabanlı öneri.
Bu hattın girdileri ölçülebilir dört kaynaktan toplanır: (a) beslenme motorunun ürettiği makro hedefleri ve üretim zamanı, (b) son haftalık beslenme özetinden hesaplanan protein uyum oranı — toplam protein ÷ kayıtlı gün ÷ protein hedefi, (c) koçluk geçmişinden bu haftaki tamamlanan seans sayısı, (d) profil omurgası ve sağlık profilinden gelen güvenlik bayrakları. Bir zamanlar beslenme alanları bu toplayıcıya HİÇ geçmiyordu; tazelik “bilinmiyor” kalıyor ve ihtiyaç motoru her seferinde yedek yola düşüyordu — yani üretimde ölüydü.
Öğün kaydetmiyorsan protein eksiği sinyali hiç doğmaz ve vitrinin yalnız segmentine göre kurulur. Kayıt tutmak, vitrini de kişiselleştirir.
Buna sistemde “girdi açlığı” (input starvation) ve karşılığı “ihtiyaç sinyali” denir.
Koç ne zaman konuşur, ne zaman susar
Bir gün panoda mor “ÖNERİ” kartı var, ertesi gün hiç yok.
Koç yuvası dört kuralla, sırayla karar verir.
Sıra şöyle: (1) wellness segmentindeysen koç yüzeyleri kapalıdır, yuva gizlenir; (2) premium erişimin varsa “Koçun önerisi” kartı; (3) ücretsizsen ve sunucu görünür bir brifi döndürdüyse “ÖNERİ” kartı; (4) ücretsizsen ve brif yoksa hiçbir şey. Dördüncü hâl bilerek boştur: söyleyecek bir şey yokken kart göstermek, kartı gürültüye çevirir. Brifin kendisi de artık cihazda üretilmiyor — eşikler ve tavsiye önceliği sunucuda, girdileri de sunucunun kendi kayıtlarında. Telefon yalnız hangi haftada olduğunu bildirir.
Kart yoksa bir şey bozulmamıştır; sistem henüz senin hakkında söylenecek dürüst bir cümle bulamamıştır. Bir hafta düzenli kayıt, kartı geri getirir.
Buna sistemde “öncelikli karar zinciri” (priority decision chain) denir.
Öneri satırına dokununca nereye gidiyor
“Ölçüm trendlerini yakından takip etmeye devam et.” satırına dokunuyorsun ve ölçüm ekranına gidiyorsun.
Hedef, satırdaki YAZIYA değil sunucunun gönderdiği mesaj koduna bakılarak seçilir.
Bu karar bir dönem ekrandaki Türkçe cümlenin içinde kelime arayarak veriliyordu. Üç yerden birden kırılıyordu: uygulamayı İngilizceye alınca aynı dokunuş başka ekrana gidiyordu; metni düzenleyen biri “antrenman” yerine “egzersiz” yazsa buton sessizce başka yere düşüyordu; ve iki anahtar zaten hiç eşleşemiyordu, çünkü Türkçe küçültme aksanı düşürmez. Artık altı mesaj kodu dört hedefe eşlenir: antrenman planı, beslenme merkezi, vücut form analizi, istatistik. Hedefi belirsiz olan üç kod istatistiğe gider.
Uygulamanın dilini değiştirsen de aynı öneri seni aynı ekrana götürür.
Buna sistemde “kod üzerinden yönlendirme” (code-based routing) denir.
Şikâyet formu neyi değiştirir
Pazartesi bacak günü sonrası “Kas tutulması · şiddet 2” gönderdin. Salı sabahı ne değişti?
Beyan sunucuya bir kayıt olarak düşer ve haftalık koç yorumu kurulurken oradan okunur.
Beyanı cihazın koça iletmesi kapatıldı; sunucu onu kendi kasasından okur. Sebep basit: sağlık beyanı tavsiyeyi etkiliyorsa, o girdiyi istemcinin yazabilmesi kapıyı açık bırakır — değiştirilmiş bir uygulama “şikâyetim yok” diyerek kendi güvenlik eşiğini geçebilirdi. Formun panodan açılması da bilinçli: beyanın anlamı “dün ne yaptığımın bugünkü karşılığı”dır ve o bağlam panodadır.
Beklentini doğru kur: form anında planını değiştiren bir düğme değildir, haftalık yorumun girdisidir. Sakatlık şüphesi seçtiysen doğru adım hekime başvurmaktır.
Buna sistemde “sunucu-otoriteli bağlam” (server-owned context) denir.
Uygulamayı arka plandan geri getirince ne oluyor
Panoyu açık bırakıp WhatsApp’a geçtin, on dakika sonra geri döndün.
Pano canlı verilerini ve koçluk bölümünü yeniden yükler.
Aksi hâlde ekranda sabahtan kalma sayılar durur ve kullanıcı onları güncel sanır. Aynı disiplin dil değişiminde de geçerli: uygulamanın dilini değiştirdiğinde market ve koçluk içeriği yeniden yüklenir — bir dönem bu içerikler ilk dilde çözülüp saklandığı için ekran yeniden çizilse bile eski dilde kalıyordu.
Panoyu tazelemek için uygulamayı kapatıp açman gerekmez; arka plandan dönmek yeter.
Buna sistemde “yaşam döngüsü yenilemesi” (lifecycle refresh) denir.
Verin ne işe yarar 7
Hedefin (yağ kaybı / kas / güç / sağlık) ve seviyen
Girersen Vitrindeki 16 ürün senin segmentine göre puanlanır ve kategori kotası hedefine göre değişir — yağ kaybında organik gıda 4 slot alırken güç hedefinde ekipman 3 slota çıkar.
Girmezsen Segment sessizce “sağlık + başlangıç + belirtilmemiş”e düşer. Vitrin boş kalmaz ama sana ait olmaz: gördüğün raf, hiç tanımadığı bir kullanıcının rafıdır.
Öğün kayıtların (haftalık beslenme özeti)
Girersen Protein uyum oranın hesaplanır (toplam protein ÷ kayıtlı gün ÷ protein hedefi) ve “protein eksiği” gibi ihtiyaç sinyalleri doğar; ayrıca panodaki beslenme trendi satırı dolar.
Girmezsen İhtiyaç hattı hiç tetiklenmez ve vitrin yalnız segment puanıyla kurulur. Ekranda bunu gösteren işaret: İstatistik kartındaki beslenme satırının “Veri bekleniyor” demesi.
Tamamlanan antrenman seansların
Girersen Haftalık XP anlık görüntüsü oluşur ve başlıktaki ilerleme çubuğu çizilir; koçluk brifi seans sayısı ve tonaj üzerinden cümle kurar; İstatistik kartındaki 30 günlük sayılar dolar.
Girmezsen Çubuk HİÇ çizilmez, yerine “gösterilemiyor” satırı çıkar — sıfır dolu bir çubuk gösterilmez, çünkü sıfır da bir iddiadır. Koçluk kartı da “daha net öneri için biraz daha veri gerekiyor” der.
Sağlık beyanın (gebelik / emzirme / ilaç etkileşimi) ve yaşın
Girersen Uygun olmayan takviye kategorileri vitrinden, satın alınmış yuvalardan, aday havuzundan ve yapay zekâ önerisinden ayrı ayrı elenir.
Girmezsen Beyan yoksa kapı yalnız yaş ve omurga bilgisiyle karar verir. Kapıya hiç ulaşılamazsa vitrin BOŞ kalır — eksik güvenlik bilgisiyle ürün göstermek yerine hiç göstermemek seçilmiştir.
Kişiselleştirme (AI) rızan
Girersen Vitrin sırası yapay zekâ katmanından geçer; kartların altındaki gerekçe cümlesi kişiselleşebilir.
Girmezsen Yeniden sıralama adımı atlanır ve deterministik sıra kullanılır. Vitrin dolu kalır — rıza vermemek marketi kapatmaz. Sunucu rıza isterse vitrin “aydınlatma metnini onayla” satırına düşer ve o satır dokunulabilir: onayladığın anda vitrin yeniden yüklenir.
Vücut ölçümlerin (bel · kalça · boyun)
Girersen Form analizi hazırlık satırı “Hazır” olur, İstatistik kartındaki ölçüm sayısı ve değişim etiketi dolar, koçluk brifi vücut trendini de hesaba katar.
Girmezsen Hazırlık satırı eksik ölçüm sayısını gösterir. Ölçümlerin tazelik penceresini aşarsa satır “güncel değil” hâline geçer; pencerenin kaç gün olduğu telefonun değil sunucunun kararıdır.
Toparlanma şikâyetlerin (panodaki kalp kutusu)
Girersen Beyan sunucuda kayda geçer ve haftalık koç yorumu kurulurken okunur; not alanı şifreli saklanır.
Girmezsen Yorum yalnız ölçülebilir verilerle kurulur — kaydını görmediği bir ağrıyı sistem tahmin etmez.