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>
23 KiB
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)
- Navbar taşmasının kök nedeni tek satır değil, bir yapısal varsayım: orta alan
absoluteolduğu için flex onu göremiyor, sağ kümeshrink-0olduğu için çekilmiyor — çakışma sessiz. Tetikleyici isexl:inline:max-w-6xlkonteyneri 1152 px'te kilitlendiği içinxl(1280 px) hiç yeni yer açmıyor, ama o noktada ~229 px etiket geri geliyor. [D, hesap aşağıda] - 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. - Önerilen düzeltme 2 satır:
user-nav.tsx:59velistem-butonu.tsx:39'daki etiket span'lerinden hemxl:inlinehemsm:inlinekalkar. 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. - G1 merge edilebilir — ama bir düzeltmeyle. Boş harita
nullolunca 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. - 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:
- Canlı sunucu HTML'i çekildi (
curl https://kolaytercih.com, 392 KB) — navbar markup'ımainile 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ıdaYapay Zeka listemi kuretiketi duruyor" bilgisi yanlış; o dize navbar'ın değil hero formunun submit butonunun metni (hero-form.tsx:194). Navbar etiketiYapay Zeka Listem. - Gerçek font metriğiyle ölçüm. Tahmin yerine
src/fonts/og/ClarityCity-SemiBold.ttfve Bricolage.woffdosyalarınınhmtx/cmaptabloları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:59className="hidden sm:inline lg:hidden xl:inline"→className="hidden"(ya da span tümden silinir;aria-label="Yapay Zeka Listem"vetitlesatır 52-53'te zaten var)src/features/liste/components/listem-butonu.tsx:39aynı değişiklik (aria-labelsatı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 Listem129,7 px, 0'a inse bile xl bandındakiKendi 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 />.Sparklesyok (dosyada hiç import edilmemiş). SectionEyebrow✔tadimlik-satiri.tsx:129kanonik 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ındaDILIM_ETIKET/RISK_ETIKETmetnini basıyor; renk tek başına anlam taşımıyor. G1 dokunmadı. first:mt-0mantığı doğru [Ç] JSX yorumları DOM düğümü üretmez;ManuelHaritanulldönünce<section>gerçektenmain'in ilk element çocuğu olur,:first-childeşleşir. Harita göründüğündemt-16geri 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şihidden md:inline-flexile mobilde düşüyor; CTAw-full sm:w-autoveh-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ı:
TadimlikBolumunulldö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=1sı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 sessizcebilinmiyora düşmüyor.- Seri kırılması notunun kodun yanına yazılması (
tadimlik-satiri.tsx:100-106). Doğru refleks. - CTA hedefinin
/sonucyerine/listem?uret=1olması: 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:
- 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.)
- 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ığı.
- Navbar, 375 px girişli + liste dolu + 3 haneli kredi bakiyesi — aynı 3 satır kontrolü (sınırda, 5 px).
/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./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)
- 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. - 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. - 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.