Files
kolaytercih/docs/gece-vardiyasi/2026-09-22/36-tasarimci-g1-ve-navbar.md
bilalgursen 2b350d0c5d content(rehber): gece vardiyasının 14 yeni yazısı + 2 düzeltme, ekip raporları ve kurallar
14 yeni rehber yazısı (hepsi editör denetiminden geçti, 46 yazıda 829 iç link
tarandı, 0 kırık hedef; 180+ DB rakamı yazıların kendi filtreleriyle yeniden
koşuldu):

  taban-siralamalari-alti-yilda-nasil-degisti · kac-net-ile-hangi-bolum ·
  siralama-bandlari-hangi-kapilar-acilir · ayni-bolum-farkli-universite-siralama-farki ·
  hangi-bolumlerin-kontenjani-azaldi · yeni-acilan-bolumler-nasil-degerlendirilir ·
  bilgisayar-mi-yazilim-muhendisligi-mi · kktc-universiteleri-okunur-mu ·
  yapay-zekaya-tercih-sordum-guvenilir-mi · ek-madde-1-puanim-yetiyor-mu ·
  universitede-ilk-hafta-ders-kaydi-muafiyet-kayit-dondurma · yks-2027-takvimi ·
  rehber-ogretmenler-icin-veri-kaynaklari · bolumumu-sevmedim-hangi-kapilar-var

İki canlı yazı düzeltildi:
- veliler-icin-tercih-rehberi: veli diliyle kapanış; altındaki "sıralamanı gir"
  kutusu artık veliye ölü uç değil
- bos-kontenjanlar-ne-anlatiyor: "birkaç yüz kişilik fark" aslında ~9 bin
  (ÖSYM 265.356 ↔ bizim 256.532); payda açıklaması tersti — ek kontenjan
  paydaya girseydi oran düşerdi. guncelleme alanı eklendi (sitemap lastmod).

Kurallar (AGENTS.md):
- Yayın sonrası arama motoru bildirimi: URL denetimi yalnız canlıda 200 dönen
  adrese; kota sayacı; mülk/hesap notu; sitemap grep kuralı
- Yıkıcı git komutları yasak: reset/checkout --/restore/clean/stash
- Tarayıcı açma: tasarımcı ve UX gerekli gördüğünde açabilir (yetenek için
  .claude/agents/tasarimci.md'ye tarayıcı araçları eklendi)

docs/gece-vardiyasi/2026-09-22/ — 34 rapor: CEO kararları ve kapanış turu,
marka/ödeme analizi, sıfır ödeme teşhisi, SEO konu planı, veri kalitesi,
editör denetimi, CTO şartnamesi, yazılımcı ve güvenlik raporları, SABAH-OZETI.

docs/ekip/YAYIN-KUYRUGU.md — Search Console bildirim kuyruğu.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 23:25:34 +03:00

23 KiB
Raw Blame History

36 — Tasarımcı: navbar taşması + G1 merge öncesi denetimi

Tarih: 22 Eylül 2026 · Rol: tasarimci · Taban: main 9bd448b İşaret: [D] doğrulandı (canlı HTML / font metriği / hesap) · [Ç] koddan çıkarım · [BİLAL] karar Bilal'in


Özet (5 madde)

  1. Navbar taşmasının kök nedeni tek satır değil, bir yapısal varsayım: orta alan absolute olduğu için flex onu göremiyor, sağ küme shrink-0 olduğu için çekilmiyor — çakışma sessiz. Tetikleyici ise xl:inline: max-w-6xl konteyneri 1152 px'te kilitlendiği için xl (1280 px) hiç yeni yer açmıyor, ama o noktada ~229 px etiket geri geliyor. [D, hesap aşağıda]
  2. P4 (cb22faf) dört ayrı genişlikte kırılma üretti: ≥1280 px'te orta alanla çakışma (−28 … −220 px), 1024–1151 px'te dar bir bantta çakışma (−48 px), ve 640–1023 px'te header'ın 2 satırdan 3 satıra çıkması (tasarımın kendi yorumu "lg altında 2 satır" diyor, site-header.tsx:11). 375 px'te de sınırda taşıyor.
  3. Önerilen düzeltme 2 satır: user-nav.tsx:59 ve listem-butonu.tsx:39'daki etiket span'lerinden hem xl:inline hem sm:inline kalkar. Bu etiketler yalnızca sığmadıkları iki bantta görünüyor. Kalan tek açık 1024–1151 bandı için ikinci, tek satırlık bir seçenek aşağıda.
  4. G1 merge edilebilir — ama bir düzeltmeyle. Boş harita null olunca hidrasyon CLS'i doğdu: kayıtlı manuel listesi olan kullanıcıda sunucu 0 px, hidrasyondan sonra ~368 px harita sayfanın tepesine giriyor ve tadımlık + tablo aşağı kayıyor. Eski placeholder tam da bunu engelliyordu. G1 raporunda bu yok.
  5. Metinde bir artık kaldı: buton "24 satırın tamamı" iddiasından arındırıldı ama iki eleman yukarıdaki paragraf aynı vaadi sürdürüyor — tadimlik-satiri.tsx:135 "24 tercihlik listenin her satırı bu formatta kurulur". Maske girişsiz kullanıcıya 3 satır açıyor (rapor-maske.ts:12).

İŞ 1 · Navbar taşması

Yöntem — neden koddan yetinmedim, ne yaptım

Kural değişikliği geldi (tarayıcı serbest), ama bu oturumun araç setinde tarayıcı/önizleme aracı yok (Bash, Read, Write, Edit, Skill). preview_stop da çağıramıyorum, dolayısıyla açık sunucu bırakmadım. Onun yerine iki gerçek ölçüm yaptım:

  1. Canlı sunucu HTML'i çekildi (curl https://kolaytercih.com, 392 KB) — navbar markup'ı main ile birebir aynı [D]. Ama girişsiz ziyaretçide "Yapay Zeka Listem" pill'i HTML'de hiç yok (grep -c → 0); yalnızca "Giriş yap" var. Pill sadece girişli kullanıcıda render ediliyor (user-nav.tsx:40-76), giriş yapmam ise yasak. Yani taşmayı canlıda gözle göremem — Bilal kendi oturumunda görüyor. Düzeltme notu: orkestratörün "canlıda Yapay Zeka listemi kur etiketi duruyor" bilgisi yanlış; o dize navbar'ın değil hero formunun submit butonunun metni (hero-form.tsx:194). Navbar etiketi Yapay Zeka Listem.
  2. Gerçek font metriğiyle ölçüm. Tahmin yerine src/fonts/og/ClarityCity-SemiBold.ttf ve Bricolage .woff dosyalarının hmtx/cmap tablolarını ayrıştırıp her dizenin ilerleme genişliğini hesapladım [D]. Aşağıdaki piksellerin hepsi bu ölçümden gelir, yuvarlama dışında tahmin yok.
Dize Boyut Genişlik
Yapay Zeka Listem 14 px / 600 129,7 px
Kendi Listem 14 px / 600 89,4 px
Sıralamanı gir 16 px 107,8 px
Nasıl çalışır? 16 px 96,9 px
KolayTercih (Bricolage) 30 px 168,6 px (tracking-tighter ile 152,1)

Kök neden — üç katman

(a) Orta alan akışın dışında. katalog-arama.tsx:270 → absolute left-1/2 -translate-x-1/2 … lg:flex. Konteyner site-header.tsx:12'de relative. Absolute eleman flex satırında yer kaplamaz, dolayısıyla sağ küme büyüdükçe flex hiçbir şey fark etmez; taşma yerine sessiz çakışma olur. Üstelik boyama sırası gereği (CSS 2.1 Ek E, adım 8 > adım 7) konumlanmış <nav> statik pill'lerin üstüne boyanır — yani koyu "Ara" butonu "Yapay Zeka Listem" pill'inin sol ucunu kapatır. (Kendi Listem butonu relative olduğu için tersine, o nav'ın üstüne çıkar — listem-butonu.tsx:35.) Bilal'in gördüğü "üstüne çıkıyor" tam olarak bu.

(b) Asıl tetikleyici: xl yeni yer açmıyor. Konteyner max-w-6xl = 1152 px. Yani viewport 1152'yi geçtikten sonra içerik genişliği artık büyümüyor. Ama user-nav.tsx:59 ve listem-butonu.tsx:39, lg:hidden xl:inline deseniyle 1280 px'te iki etiketi birden geri getiriyor (+229 px). 1280 px'te kazanılan yer: 0 px. Bu desen daha baştan tutarsız.

(c) P4'ün eklediği yük. cb22faf sağ kümeye lg–xl bandında +66 px, xl+ bandında +204 px ekledi. Sınır zaten dardı; bu onu geçirdi.

Genişlik genişlik — ne oluyor

Geometri: konteyner genişliği Wd = min(viewport, 1152); orta <nav>'ın merkezi Wd/2; sağ kümenin sağ kenarı Wd − 16. BOŞLUK = küme sol kenarı − nav sağ kenarı; negatif = çakışma. [D, hesap]

Ölçülen parça genişlikleri: orta nav profilsiz 480 px / profilli 357 px; sağ küme lg–xl 304 px (liste dolu) / xl+ 540 px (liste dolu).

375 px (mobil) — orta nav gizli, ama satır taşıyor

Durum Logo Sağ küme Toplam Sığan Sonuç
Liste dolu, 3 haneli kredi 123 225,3 356,5 351 Satır-2'ye taşar → 3 satırlık header
Liste boş 123 153,3 284,5 351 Tek satır OK

Sınırda (5,5 px). 3 satıra çıkınca yapışkan header ≈ 140 px — 667 px'lik iPhone SE ekranının %21'i kalıcı olarak gidiyor. P4 öncesi bu durum yoktu (küme 179 px idi).

768 px (tablet) — en kötü bant

Durum Logo Sağ küme Toplam Sığan Sonuç
Liste dolu 196 582,8 790,9 736 Satır-2'ye taşar → 3 satırlık header (~176 px)
Liste boş 196 391,4 599,5 736 Tek satır OK

Sebep: sm:inline etiketleri 640 px'te açıyor ve lg:hidden 1024'e kadar kapatmıyor — yani 640–1023 px arası etiketler açık, ama yer yok. 640 px'te liste boşken bile pay sadece 8,5 px. P4 öncesi küme 379 px idi, rahat sığıyordu.

1024 px

Profil Liste nav sağ küme sol BOŞLUK
yok dolu 752 703 −48 px ÇAKIŞMA
yok boş 752 798 +46
var dolu 690 703 +13 (çok dar)
var boş 690 798 +107

1280 px (ve tüm üstü — 1440, 1920 aynı, konteyner 1152'de sabit)

Profil Liste nav sağ küme sol BOŞLUK
yok boş 816 788 −28 px ÇAKIŞMA ← Bilal'in gördüğü en olası hâl
yok dolu 816 596 −220 px ÇAKIŞMA
var dolu 754 596 −158 px ÇAKIŞMA
var boş 754 788 +33

Kırılmanın başladığı nokta: tam olarak 1280 px (xl sınırı). 1152–1279 arası sorunsuz, 1280'de bir anda −28 … −220 px. Konteyner büyümediği için daha geniş ekran hiçbir şeyi düzeltmiyor — 1920 px'te de aynı çakışma sürüyor.

Düzeltme

Önerilen — Alternatif 1 (en küçük, tek amaçlı, [KARAR])

Etiket span'leri her genişlikte gizli kalır; ikon + aria-label anlamı taşır.

  • src/features/kullanici/components/user-nav.tsx:59 className="hidden sm:inline lg:hidden xl:inline" → className="hidden" (ya da span tümden silinir; aria-label="Yapay Zeka Listem" ve title satır 52-53'te zaten var)
  • src/features/liste/components/listem-butonu.tsx:39 aynı değişiklik (aria-label satır 33'te var)

Sonuç [D, hesap]: 375 px → 284,5/351 tek satır ✔ · 768 px → 555,8/736 tek satır ✔ · 1280+ → boşluk +15,5 … +110 px, çakışma yok ✔. Kalan tek açık: 1024–1151 px, profilsiz + liste dolu → −48 … −1 px.

Bedeli dürüstçe: P4'ün amacı keşfedilebilirlikti ("girişli 14 oturumun 7'si /listem'i hiç görmedi"). İkona indirince o kazanç zayıflar. Ama ölçüm şunu söylüyor: 1152 px'lik konteynerde, 480 px'lik ortalanmış bir nav'ın yanında sağ kümeye kalan bütçe ~304 px — bu tam olarak dört ikon-pill eder, bir etiket bile fazladır. Etiketi korumanın yolu navbar'dan bir şey çıkarmaktır, daraltmak değil.

Alternatif 2 (1 satır daha, 1024–1151 bandını da kapatır) — [BİLAL]

Alternatif 1 + katalog-arama.tsx:310-314 → Nasıl çalışır? linkine hidden xl:block. Orta nav profilsiz 480 → 339 px'e iner; 1024 px'te boşluk −48 → +22 px olur, her bant temizlenir [D, hesap]. [BİLAL] çünkü bu bir navigasyon/IA kararı: "Nasıl çalışır?" dar masaüstünde kaybolur. (Not: bu link yalnızca profilsiz durumda render ediliyor — yani tam da çakışan durumda.)

Karşılaştırma: Alt-1 tek başına Bilal'in gördüğü her şeyi çözer ve karar gerektirmez. Alt-2 kalan %10'u da kapatır ama bir menü öğesini dar masaüstünden düşürür. Alt-1'i şimdi uygula, Alt-2'yi Bilal'e sor.

Yapılmaması gerekenler (değerlendirildi, elendi)

  • max-w-6xl → max-w-7xl: 1280 px'te bile çakışma −156 px kalıyor. Çözmüyor.
  • Orta nav'ı absolute'tan çıkarıp flex öğesi yapmak: doğru yapı ama nav'ın optik ortalanmasını bozar ve nav'ın butonları kısalmaya uygun değil — navbar yeniden tasarımı, şimdi değil.
  • Etiket metnini kısaltmak: [BİLAL] gerektirir ve yetmez — Yapay Zeka Listem 129,7 px, 0'a inse bile xl bandındaki Kendi Listem (89,4 px) tek başına taşırmaya devam eder.

Navbar'da ayrıca bulunan (P4 ile ilgisiz, küçük)

Yer Kural/sorun Etki Düzeltme Büyüklük
user-nav.tsx:63-74 Kredi link'inin erişilebilir adı "12" (salt sayı). İçerikten gelen ad title'ı ezer; Coins aria-hidden, "kredi" span'i lg:hidden Ekran okuyucu "12, bağlantı" diyor — nereye gittiği belirsiz aria-label="12 kredin var — kredi yükle" ekle XS
Tüm pill'ler, <640 px Dokunma hedefi h-9 = 36 px (< 44 px) Dar ekranda ıskalama sm altında h-11 ya da dokunma alanı genişletme S

İŞ 2 · G1 (funnel/sonuc-ilk-ekran) merge öncesi tasarım denetimi

Diff okundu (git diff 9bd448b..funnel/sonuc-ilk-ekran, 6 dosya / 61+ 39−). Dal değiştirilmedi, çalışma ağacına dokunulmadı.

HÜKÜM

Şu bir düzeltmeyle merge edilebilir.

Engelleyici: B1 (hidrasyon CLS'i). Tek dosya, tek satırlık yer değişikliği. Aynı commit'e alınması güçlü önerilen: B2 (paragraftaki artık vaat) — G1'in kendi amacı bu. Geri kalan her şey (hiyerarşi, mobil, AGENTS.md kuralları, CTA dili) temiz.

Neyi doğruladım — temiz çıkanlar

  • CTA ok deseni ✔ tadimlik-satiri.tsx:204 → metin önce, sonunda <ArrowRight className="size-4" aria-hidden />. Sparkles yok (dosyada hiç import edilmemiş).
  • SectionEyebrow ✔ tadimlik-satiri.tsx:129 kanonik bileşeni kullanıyor, elle pill yok.
  • Kapatma çarpısı: G1 hiçbir modal'a dokunmuyor — konu dışı ✔.
  • Risk dili ✔ RaporSatirDetayi (rapor-listesi.tsx:60) renk noktasının yanında DILIM_ETIKET/RISK_ETIKET metnini basıyor; renk tek başına anlam taşımıyor. G1 dokunmadı.
  • first:mt-0 mantığı doğru [Ç] JSX yorumları DOM düğümü üretmez; ManuelHarita null dönünce <section> gerçekten main'in ilk element çocuğu olur, :first-child eşleşir. Harita göründüğünde mt-16 geri gelir. Doğru kurulmuş.
  • Mobil 375 px'te tadımlık kartı taşmıyor ✔ dış sarmalayıcı flex-wrap + min-w-0; program adı truncate; sıralama geçmişi hidden md:inline-flex ile mobilde düşüyor; CTA w-full sm:w-auto ve h-11 = 44 px dokunma hedefi ✔. Uzun üniversite adı yatay kaydırma üretmiyor.

İlk ekran hiyerarşisi — yeni sıra mantıklı, bir uyarıyla

Yeni sıra: ManuelHarita (boşsa yok) → TadimlikBolumu → SonucProgramTablosu → SonucSihirbazi → dipnot.

  • Girişsiz + liste boş (ana hedef kitle): kullanıcı ilk olarak tadımlığı görüyor. Doğru karar — ödeme öncesi gösterilebilen tek gerçek önizleme bu ve eskiden ~2.200 px aşağıdaydı.
  • Girişli kullanıcı: TadimlikBolumu null döner (tadimlik-bolumu.tsx:19). Liste de boşsa <main>'in ilk çocuğu doğrudan tablo olur — başlıksız, girişsiz, bağlamsız bir tablo. Bu G1'in getirdiği bir bozulma değil (önce de öyleydi) ama boş harita gidince daha çıplak kaldı. A3 (/sonuc <h1>) bunu kapatacak; G1'i bloke etmez.
  • Mobilde tadımlığın giriş bloğu (rozet + 2 satırlık h2 + 3 satırlık paragraf) ~195 px yer tutuyor; 667 px'lik ekranda kartın yalnızca üst ~300 px'i görünüyor, CTA katlanın çok altında. Kabul edilebilir ama iyileştirilebilir — aşağıda Ö1.

Erişilebilirlik — <h1> durumu

Canlı /sonuc sunucu HTML'i çekildi [D]: <h1> sayısı 0, <h2> sayısı 5. İlk üç h2 arama modalının içindeki text-xs uppercase etiketleri ("Popüler Bölümler", "Keşfet", "Rehberden").

  • G1 bunu değiştirmedi (kapsam dışı bırakılmış, CTO şartnamesi açıkça yazıyor) ve sorunu büyütmedi: tadımlık h2'si zaten sayfadaki tek gerçek içerik başlığıydı, sadece yukarı taşındı. Belge sırasındaki başlık sayısı ve seviyeleri aynı kaldı.
  • Küçük bir iyileşme bile var: başlık sırası artık görsel sırayla uyumlu (tadımlık h2 → sihirbaz h2), eskiden tersti.
  • A3 (a11y/sonuc-h1, 24-ceo-kapanis.md §A) zaten kuyrukta. G1'i bunun için bekletmeye gerek yok, ama A3 merge edilirken <h1>'in tadımlığın h2'sinin ÜSTÜNE konması gerekir — yoksa sayfa h2 ile açılır.

BULGULAR

B1 — ENGELLEYİCİ · Hidrasyon CLS'i: harita sayfanın tepesine sonradan giriyor

Yer: manuel-harita.tsx:71 (if (liste.length === 0) return null;) + sonuc/page.tsx:103 (sıradaki ilk eleman)

Kural/sorun: useManuelListe sunucu snapshot'ı olarak her zaman boş liste döner (liste-store.ts:86 → () => BOS_LISTE); localStorage ilk client abonesinde okunuyor (liste-store.ts:49-52, 72). Yani kayıtlı listesi olan her dönüş ziyaretçisinde: sunucu 0 px yer ayırır → hidrasyondan sonra harita belirir → tadımlık ve tablo aşağı itilir.

Kayma miktarı [D, hesap]: main = max-w-4xl px-4 → içerik 864 px; aspect-[1050/447] → 367,8 px (375 px'te 146 px). Bu, <main>'in ilk çocuğunda olduğu için altındaki her şey kayıyor — impact fraction ~1. CLS eşiğini (0,1) rahatlıkla aşar.

Eski kod tam da bunu engelliyordu: silinen placeholder aspect-[1050/447] ile yeri sunucuda rezerve ediyordu; hidrasyonda gerçek harita aynı orana oturuyordu → kayma ~0. TercihHaritasiLazy'nin kendi HaritaIskeleti'si (tercih-haritasi-lazy.tsx:10-17) yalnızca chunk gecikmesini karşılar, null → görünür geçişini karşılamaz.

Kullanıcıya etkisi: Dönen kullanıcı sayfayı açıyor, tadımlığı okumaya başlıyor, saniyeler içinde metin 368 px aşağı kayıyor; tıklamak istediği yerde başka bir şey oluyor.

Not: CEO §3 G1-b'de onaylanan takas "ilk + tıklamasında haritanın belirmesi" — yani kullanıcının kendi eylemi. Sayfa yüklenirken kendiliğinden gelen kayma o onayın kapsamında değil ve G1 raporunda hiç geçmiyor.

Önerilen düzeltme (en küçüğü): sonuc/page.tsx'te <ManuelHarita />'yı <SonucProgramTablosu>'nun ALTINA al (satır 103'ten satır 128'in hemen öncesine). Gerekçe iki yönlü: (a) hidrasyonda gelen harita artık yalnızca sihirbaz + dipnotu iter, ikisi de katlanın altında → CLS ihmal edilebilir; (b) harita zaten tablodan kurulan listenin görselleştirmesi, tablodan sonra gelmesi bilgi mimarisi olarak da doğru. first:mt-0 o zaman her durumda geçerli olur ve daha da sağlamlaşır. Büyüklük: XS (tek JSX bloğunun yeri). Alternatif (yer rezervi için çerez mirror'ı) over-engineering — önerilmiyor.

B2 — YÜKSEK · Butondan kaldırılan vaat paragrafta duruyor

Yer: tadimlik-satiri.tsx:134-136

"Sıralamana uygun bir programın gerekçesi, yerleşme riski ve taban trendi — 24 tercihlik listenin her satırı bu formatta kurulur."

Kural/sorun: 2373a9a butondan "24 satırın tamamı" iddiasını kaldırdı, ama iki eleman yukarıdaki paragraf aynı vaadi başka kelimelerle sürdürüyor. Maske girişsiz/paketsiz kullanıcıya 3 satır açıyor (rapor-maske.ts:12 ACIK_SATIR = 3); kalan 21 satırın gerekçe/risk/trend metni SAHTE_* sabitleriyle değiştiriliyor. Öğrenci bu cümleyi "24 satırın hepsini bu ayrıntıda göreceğim" diye okur.

Kullanıcıya etkisi: G1'in tam olarak kapatmak istediği beklenti açığı, kaldırdığı yerin 40 px yukarısında açık kalıyor. Girişten sonra 21 maskeli satır görmek, buton metninin düzeltilmesinden daha güçlü bir hayal kırıklığı.

Önerilen düzeltme: son cümleciği teslim edilene çek — ör. "— listendeki her satır bu formatta kurulur, ilk üçünü hemen açıyoruz." Sayı "use client" dosyaya import edilemiyor (rapor-maske.ts server-only, CTO Özet #4), bu yüzden sayısız da yazılabilir: "— listendeki satırlar bu formatta kurulur." Sayı yazılacaksa [BİLAL], çünkü 3 elle yazılırsa tek kaynak kuralı bozulur. Büyüklük: XS (tek cümle). [BİLAL] — marka/vaat metni.

B3 — ORTA · Suspense fallback'i gerçek düzenle aynı genişlikte değil

Yer: sonuc/page.tsx:47 (max-w-6xl px-4 py-10) ↔ :99 (max-w-4xl px-4 py-12)

Kural/sorun: Fallback konteyneri 1152 px, gerçek içerik 896 px. cookies() sayfayı dinamik yaptığı için bu fallback gerçekten görülüyor. Çözüldüğü anda içerik 256 px daralıyor ve yeniden ortalanıyor → yatay + dikey kayma, her /sonuc yüklemesinde.

G1 ile ilişkisi: G1 fallback'e dokunmadı ve CTO "yanlışlığı artmıyor" dedi — doğru. Hatta yapısal olarak iyileşti: fallback'in pill + başlık + alt satır iskeleti artık gerçekten sayfanın tepesindeki SectionEyebrow + h2 + p ile eşleşiyor (eskiden tepede harita vardı, eşleşmiyordu). Ama genişlik ve hizalama (fallback sola, gerçek içerik items-center text-center) hâlâ uyumsuz.

Önerilen düzeltme: max-w-6xl → max-w-4xl, py-10 → py-12, iskeletler mx-auto ile ortalanır. Büyüklük: XS. G1'i bloke etmez — ayrı bir commit ya da A3 dalıyla birlikte gidebilir.

B4 — DÜŞÜK · "Giriş sonrası liste hemen üretilir" kredisiz kullanıcıda tutmuyor

Yer: tadimlik-satiri.tsx:188-189

Tadımlık yalnızca girişsiz kullanıcıya render ediliyor, ama girişsiz ≠ yeni kullanıcı: çıkış yapmış, kredisi tükenmiş bir kayıtlı kullanıcı da bu CTA'yı görür. /listem?uret=1 o durumda üretemez. Cümle "hemen üretilir" diye koşulsuz vaat ediyor.

Etki: dar bir kitle, ama vaat tutmadığında tam huninin ortasında. Öneri: ya cümle yumuşatılır ("Giriş sonrası liste üretimi başlar") ya da /listem'in kredisiz hata durumunun ne dediği QA'da doğrulanır. Büyüklük: XS. Bu paket için engelleyici değil.

G1'in doğru yaptıkları (kayda geçsin)

  • listemUretHref'in tek kaynağa taşınması (sihirbaz-sabitler.ts:181) + uret=1 sıra sözleşmesinin doküman olarak oraya yazılması: iyi iş, ilerideki sessiz kırılmaları önler.
  • IZINLI_KAYNAKLAR'a "tadimlik" eklenmesi (uretim-basladi-olayi.tsx:33) — ölçüm sessizce bilinmiyora düşmüyor.
  • Seri kırılması notunun kodun yanına yazılması (tadimlik-satiri.tsx:100-106). Doğru refleks.
  • CTA hedefinin /sonuc yerine /listem?uret=1 olması: girişten sonra kullanıcıyı başladığı yere geri atmak yerine sonuca götürüyor. Huni açısından doğru.

İŞ 3 · CEO'nun reddettiği iki UX kararına görüş

R3 (mobil yapışkan alt çubuk) — katılıyorum, hem de gerekçesinden daha güçlü bir sebeple. CEO "95 ziyaret/hafta, ekran alanı yiyen over-engineering" diyor; ben buna şunu eklerim: bu üründe yapışkan alt çubuk şu anda aktif olarak zararlı olurdu, çünkü /sonuc zaten sticky top-4 bir header taşıyor ve İş 1'de ölçtüğüm gibi o header 375 px'te 3 satıra çıkıp ~140 px (ekranın %21'i) yiyebiliyor; buna bir de alt çubuk eklenirse mobil okuma alanı ~%30 azalır, üstelik sanal klavye açıldığında position: fixed alt çubukların iOS Safari'de içeriğin üstüne binmesi klasik bir tuzaktır. Çözülmesi gereken şey CTA'nın görünürlüğü değil, header'ın şişkinliği. R4 (/paket girişsiz birincil CTA'sının fiyata çevrilmesi) — karara katılıyorum, gerekçesine kısmen. "Veri yok, T4'e bağlandı" doğru bir disiplin ve fiyatı erken göstermenin dönüşümü düşürebileceği de doğru. Ama şunu kayda geçiriyorum: bu bir A/B sorusu değil, bir dürüstlük sorusu — kullanıcı ödeme fiiline kaç adım kala fiyatı öğrendiğini bilmiyorsa, öğrendiği anda geri dönüyor ve bunu "fiyat yüksek" diye değil "kandırıldım" diye yapıyor. T4 eşiği (/odeme'yi 30 kişi görsün) bir payda üretir ama o paydanın kendisi fiyatın geç gösterilmesinden etkileniyor — yani ölçüm, ölçmek istediği şeyin içinden geçiyor. Kararı değiştirmiyorum; T4 açıldığında bakılacak metriğin "/paket → /odeme geçişi" değil "/odeme'yi gördükten sonra terk oranı" olmasını öneriyorum, çünkü fiyat şokunu yalnızca o gösterir.


Bilal'in gözle kontrol etmesi gereken ekranlar

Görsel doğrulama bende yapılamadı (araç setinde tarayıcı yok + pill yalnızca girişli render ediliyor, giriş yasak). Şu beş ekran:

  1. Navbar, kendi girişli oturununda, 1280 px ve üstü — "Yapay Zeka Listem" pill'inin sol ucunun ortadaki koyu "Ara" butonunun altında kalıp kalmadığı. (Bulgumun ana kanıtı bu.)
  2. Navbar, 768 px (tablet / tarayıcıyı yarım ekran) girişli + manuel listede en az 1 program — header'ın 3 satıra çıkıp çıkmadığı.
  3. Navbar, 375 px girişli + liste dolu + 3 haneli kredi bakiyesi — aynı 3 satır kontrolü (sınırda, 5 px).
  4. /sonuc, merge sonrası, kayıtlı manuel listesi olan bir oturumda — sayfa açıldıktan ~1 sn sonra haritanın gelip tadımlığı aşağı itip itmediği (B1). Bunu merge öncesi göremeyiz; G1 canlıda yok.
  5. /sonuc, girişsiz, 375 px — tadımlık kartının CTA'sına ulaşmak için kaç ekran kaydırmak gerektiği (Ö1 kararı buna bağlı).

Bilal'den istenen (3 madde)

  1. Navbar düzeltmesi için onay: Alternatif 1'i (iki etiket span'i her genişlikte gizli) yazılımcıya verelim mi, yoksa Alternatif 2'yi de (Nasıl çalışır? yalnız ≥1280) ekleyip 1024–1151 bandını da kapatalım mı? ~3 dk.
  2. G1'in B1 düzeltmesi: <ManuelHarita />'yı tablonun altına almak — dalın 7. commit'i olarak yazılsın mı, yoksa merge edilip ayrı mı gitsin? ~2 dk.
  3. B2 metni [BİLAL]: tadimlik-satiri.tsx:135'teki "24 tercihlik listenin her satırı bu formatta kurulur" cümlesi ne olsun — sayısız mı ("listendeki satırlar bu formatta kurulur"), yoksa açıkça "ilk üçü hemen açılır" mı? ~3 dk.