All checks were successful
Deploy / deploy (push) Successful in 17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
375 lines
24 KiB
Markdown
375 lines
24 KiB
Markdown
# 02 — Tasarım: CEO'nun açık soruları (gece vardiyası 2026-09-23)
|
||
|
||
> Yöntem: yalnız kod + DB okuması. Tarayıcı/dev sunucusu açılmadı, kod değiştirilmedi.
|
||
> R7 taraması orkestratörden hazır geldi (48 kullanım / 19 dosya), yeniden koşuldu ve
|
||
> bağlam satırları çekildi — sınıflandırma aşağıda. Kontrast değerleri token'lardan
|
||
> **hesaplandı** (§2.4). Piksel tahminleri "koddan çıkarım" olarak işaretli.
|
||
|
||
---
|
||
|
||
## Özet — 5 madde
|
||
|
||
1. **Öncelikler kalkarsa sihirbaz 3 adımda kalmalı, 2'ye inmemeli.** Üç adım = üç soru olur;
|
||
2'ye indirmek ikinci adıma ikinci bir iş yükler (tam da 3. adımdan çıkardığımız hata) ve
|
||
`/meraklisina` şemasını, `sihirbaz_adim` serisini birden bozar. Hüküm §1.2.
|
||
2. **`/meraklisina` şemasında değiştirilecek tek karakter yok.** Ne `SEMA`, ne `aria-label`,
|
||
ne figcaption, ne 4. bölüm anlatımı öncelikleri anlatıyor — grep ile doğrulandı (§1.3).
|
||
AGENTS.md senkron borcu bu işte **sıfır**; değişmesi gereken ekran, belge değil.
|
||
3. **Kaldırma "veri kaybı" değil ama bir yerde sessiz regresyon üretir:** `tercih-farki.ts`
|
||
`oncelikler`'i kıyaslamaya devam ederse, hiçbir şey değiştirmemiş eski kullanıcı /listem'de
|
||
kalıcı "Tercihlerin değişmiş → 3 kredi harca" uyarısı görür. Tek dosya, dört nokta (§1.4).
|
||
Ayrıca dünkü raporumun eksiği: öncelikler **yalnız prompt tonuna dokunmuyor**,
|
||
`tercih-degerlendirme.ts:59` üzerinden değerlendirme satırlarına da dokunuyor.
|
||
4. **R7 hüküm: tek commit, 28 satır.** 48 kullanımın 26'sı gerçek metin, 2'si placeholder
|
||
(= 28 düzeltilecek), 11'i dekoratif ikon, 4'ü fonksiyonel ikon (ayrı kural, 1.4.11),
|
||
1'i devre dışı durum (WCAG muaf), 4'ü dev paneli (kapsam dışı). **Büyük punto: 0** —
|
||
hiçbiri 18,66 px kalın / 24 px eşiğini geçmiyor, yani 28'inin de 4,5:1 borcu var.
|
||
5. **URAP takasının telafisi tek cümlelik ve sıfır yeni eleman:** özet paragrafın ilk
|
||
virgülüne "devlet üniversitesi" / "vakıf üniversitesi" girer. Yan kazanç: bugünkü "Tür"
|
||
kartı zaten 6 `unitur` değerinin 4'ünde bozuk metin basıyor ("Kktc", "Vakıf Myo",
|
||
"Yurtdısı Kamu" — `trBaslikDuzeni` tr-TR küçültmesi, `slug.ts:56-64`).
|
||
|
||
---
|
||
|
||
## 1. "Öncelikler" kalkarsa — son adımın tasarımı
|
||
|
||
Kaynak: `sihirbaz-adimlar.tsx:432-492` (3. adım paneli), `:224-231` (adım göstergesi),
|
||
`:495-540` (alt çubuk), `sihirbaz-sabitler.ts:10-18` (`ONCELIKLER`).
|
||
|
||
### 1.1 (a) Tek ekran taslağı — 375 px
|
||
|
||
Bugün 3. adımda: h3 "Üniversite tipi & öncelikler" + alt satır + "ÜNİVERSİTE TİPİ" etiketi
|
||
+ 3-4 çip + "SENİN İÇİN ÖNEMLİ OLAN" etiketi + 7 çip (375 px'te ~4 satıra sarıyor)
|
||
+ 2 satırlık açıklama. Kalkınca:
|
||
|
||
```
|
||
375 px · DialogContent (max-h-[92dvh], p-6, dikey ortalı) · sihirbaz-modal.tsx:41
|
||
|
||
┌───────────────────────────────────────────┐
|
||
│ (✕) │ ← kanonik dialog çarpısı, size-9,
|
||
│ │ border-slate-200 (dialog.tsx varsayılanı)
|
||
│ ▬▬ ▬▬ ▬▬▬▬▬ Adım 3/3 │ ← :224-231 aynen kalır
|
||
│ │ metin text-slate-500 (bugün 400, bkz. §2)
|
||
│ │
|
||
│ Devlet mi, vakıf mı? │ ← h3, font-heading text-lg font-bold
|
||
│ Seçimin hem yapay zekâ listende hem │ ← p, text-sm text-slate-500
|
||
│ sonuç sayfasındaki ücretsiz tabloda │ (bu cümle doğru: meraklisina-icerik:116-117)
|
||
│ geçerli olur. │
|
||
│ │
|
||
│ ┌─────────────┐ ┌───────────────────────┐│ ← mevcut <Cip>, canliFacetler sayılarıyla
|
||
│ │ Devlet 412 │ │ Vakıf (burslu olursa) ││ yeni bileşen yok
|
||
│ └─────────────┘ │ 288 ││
|
||
│ └───────────────────────┘│
|
||
│ ┌──────────────┐ │
|
||
│ │ Fark etmez │ │
|
||
│ └──────────────┘ │
|
||
│ │
|
||
│ ·· min-h tabanı: boş alan (bkz. 1.1-c) ··│
|
||
│ │
|
||
│───────────────────────────────────────────│ ← border-t border-slate-100 pt-4 (mevcut)
|
||
│ ← Geri Listemi oluştur → │ ← CTA deseni doğru: metin + ArrowRight size-4
|
||
└───────────────────────────────────────────┘
|
||
```
|
||
|
||
Üç karar, gerekçesiyle:
|
||
|
||
- **"ÜNİVERSİTE TİPİ" üst etiketi (`:441-444`) silinir.** h3 artık aynı soruyu soruyor;
|
||
etiket kalırsa aynı soru ekranda iki kez yazar. (Adım 1-2'deki etiketler yerinde kalır —
|
||
oralarda h3 ile etiket farklı şeyler söylüyor.)
|
||
- **h3 soru cümlesine döner:** "Üniversite tipi & öncelikler" → **"Devlet mi, vakıf mı?"**
|
||
Adım 1 ve 2 de tek soru sorduğu için sihirbaz üç adımda üç soru olur; CEO §5-1'in (a)
|
||
şıkkının ekran karşılığı bu.
|
||
- **Modal yüksekliği — tek gerçek risk ve tek satırlık çözümü.** `TransitionPanel` panel
|
||
yüksekliğini ölçüp animasyonla geçiriyor (`:207-211`, `:246-259`); 3. adım bugün en uzun
|
||
panellerden biri, kalkınca en kısası olur (koddan çıkarım: ~%50 kısalma). Dialog dikey
|
||
ortalı olduğu için modal **hem üstten hem alttan** içeri gelir: kullanıcının "Devam"a
|
||
bastığı nokta, geçişten sonra **"Listemi oluştur"un yeni yeri**ne yakın düşer. O buton
|
||
kredi harcayan butondur; yanlış basma bedeli para. **Çözüm:** yalnız 3. adım paneline
|
||
`min-h-[Npx]` ver, N = 1. adım panelinin 375 px'teki ölçülen yüksekliği (yazılımcı
|
||
ölçer; ben ölçmedim, tarayıcı açmam yasak). Yeni bileşen yok, yeni animasyon yok,
|
||
`prefers-reduced-motion` dalı (`hareketiAzalt`, `:249`) zaten var ve korunur. Büyüklük: XS.
|
||
|
||
**Aynı commit'e sığan bedava düzeltme:** bu dosyada zaten 5 `text-slate-400` metin var
|
||
(`:228, 381, 406, 442, 473`); `:473` ve `:442` bu kesimle ölüyor, kalan üçü (`228, 381, 406`)
|
||
`text-slate-500`'e çekilsin — R7'nin en görünür üç satırı, ek dosya açmadan kapanır.
|
||
|
||
### 1.2 (b) Hüküm: 3 adım kalır, 2'ye inmez
|
||
|
||
| Kriter | 3 adım (öneri) | 2 adım |
|
||
|---|---|---|
|
||
| Ekranın tek işi | ✅ her adım tek soru | ❌ 2. adım "il **ve** tür" — 3. adımdan çıkardığımız hatayı 2'ye taşır |
|
||
| `/meraklisina` şeması | ✅ `SEMA` zaten "3. adım · Devlet / Vakıf" diyor, senkron | ❌ şema + `aria-label` + figcaption + 4. bölüm anlatımı baştan yazılır |
|
||
| Ölçüm | ✅ `sihirbaz_adim{1,2,3}` serisi kırılmaz | ❌ P4'ten hemen sonra ikinci bir seri kırılması |
|
||
| 375 px | ✅ tür çipleri kendi ekranında | ❌ il araması (`max-h-56` kaydırmalı liste, `:333`) + seçilenler + tür çipleri tek panelde; iç kaydırma ile çip satırı üst üste biner |
|
||
| Algılanan yük | 3 adım × 1 soru = sihirbazın en sade hâli | 2 adım ama biri iki soruluk — kısalma hissi yok |
|
||
|
||
**Hüküm: 3 adım.** Tek karşı argüman "adım sayısı azalsın" hissi; onu zaten öncelikleri
|
||
silerek alıyoruz (ekranda 7 çip + 2 açıklama satırı eksiliyor), adım birleştirmeye gerek yok.
|
||
|
||
### 1.3 (c) `/meraklisina` mermaid şeması — **gereken düzeltme: yok**
|
||
|
||
AGENTS.md şema senkronunu zorunlu tutuyor, o yüzden borcu tek tek doğruladım:
|
||
|
||
```
|
||
grep -rni "öncelik\|oncelik" src/features/pazarlama/ src/app/meraklisina/ → 0 satır
|
||
```
|
||
|
||
- `huni-semasi.tsx` `SEMA`: `C("3. adım · Devlet / Vakıf<br/>sayılar hem alanı hem ili
|
||
hesaba katar")` — öncelik geçmiyor, adım sayısı-sırası değişmiyor, havuz kuralı
|
||
değişmiyor, 24'lük iskelet (5/13/6) değişmiyor, gevşetme sırası değişmiyor,
|
||
havuz-dışına-çıkamama değişmiyor. **Düzenlenecek düğüm yok.**
|
||
- `aria-label` (`huni-semasi.tsx:44`): "…alan, il ve devlet/vakıf adımlarıyla…" — doğru kalıyor.
|
||
- `figcaption`: öncelik geçmiyor.
|
||
- `meraklisina-icerik.tsx:107-127` (4. bölüm): "üçüncü adımdaki devlet/vakıf sayıları da
|
||
hem alan hem il seçimini hesaba katar" — doğru kalıyor.
|
||
|
||
**Yani bu kesim, belgeyi ekrana değil, ekranı belgeye uyduruyor** — CEO §2 doğrulama #9 ile
|
||
aynı sonuç. Commit mesajına tek satır yeter:
|
||
`/meraklisina şeması değişmedi: 3. adım zaten yalnız devlet/vakıf olarak belgeliydi (huni-semasi.tsx SEMA düğümü C).`
|
||
|
||
> Tek isteğe bağlı rötuş (zorunlu değil): 3. adımın ekrandaki h3'ü "Devlet mi, vakıf mı?"
|
||
> olunca şemadaki "3. adım · Devlet / Vakıf" etiketiyle kelimesi kelimesine aynı dili
|
||
> konuşur. Şemaya dokunulmaz.
|
||
|
||
### 1.4 (d) Kaldırılan alan veride ve kayıtlı raporlarda ne olacak
|
||
|
||
Kural: **hiçbir şey silinmez, yalnız bir kıyas durdurulur.** Alan alan:
|
||
|
||
| # | Yer | Karar | Neden |
|
||
|---|---|---|---|
|
||
| 1 | `types/rapor.ts:71` `oncelikler?: string[]` | **Kalır** (zaten opsiyonel) | Kayıtlı raporlar `params` JSON'ı olarak duruyor (`rapor-actions.ts:91`); tip daraltılırsa eski kayıtlar tipten düşer. Göç yok, şema değişikliği yok. |
|
||
| 2 | `sihirbaz-sabitler.ts:10-18` `ONCELIKLER` sabiti | **Silinmez** | `sihirbazDogrula` (`:108-124`) eski localStorage profillerindeki değerleri bu listeye göre süzüyor; sabit silinirse eski profillerin seçimi sessizce düşer. Sabit kalır, yalnız ekranda render edilmez. |
|
||
| 3 | `sihirbaz-sabitler.ts:132` `oncelikNormalize` | **Kalır** | Eski "İş garantisi" adını eşleyen geriye uyum köprüsü; eski raporlar gösterilirken hâlâ gerekli. |
|
||
| 4 | **`tercih-farki.ts` — tek zorunlu değişiklik** | `"oncelikler"` kıyastan **çıkar** | Çıkmazsa: eski raporun `params.oncelikler = ["Prestijli üniversite"]`, yeni profilin `s.oncelikler = []` → `kumeFarkli` **true** → /listem başlığında kalıcı "Tercihlerin değişmiş" rozeti ve 3 kredilik güncelleme çağrısı, kullanıcı **hiçbir şey değiştirmediği hâlde**. Dosyanın kendi ilkesine aykırı (`:8-12`: "olmayan alan değişmiş sayılmaz"). Dokunulacak dört nokta: `FarkAlani` union (`:22-28`), `FARK_ETIKET` (`:30-37`), `tercihFarklari` içindeki `if (kumeFarkli(params.oncelikler?…))` (`:73-75`), `farkSatirlari` içindeki `case "oncelikler"` (`:112-114`). |
|
||
| 5 | `listem-govde.tsx:129-131` "Önceliklerin: …" | **Kalır** | Koşullu (`params.oncelikler?.length`); eski raporda dolu görünür — danışmanın neyi bildiğini dürüst gösterir. Yeni raporda hiç çıkmaz. Sıfır iş. |
|
||
| 6 | `sihirbaz-sabitler.ts:182-184` prompt satırı | **Kalır** | Aynı koşul. Eski bir rapor yeniden üretilirse kullanıcının kaydettiği tercih korunur. |
|
||
| 7 | `app/api/soru/route.ts:32,77` · `lib/ai/rapor.ts:251,279` | **Değişmez** | Zaten `?? []` ile null-safe. |
|
||
| 8 | `tercih-degerlendirme.ts:59-66` `"Kolay yerleşme"` dalı | **Kalır (ölü değil, geriye uyumlu)** | **Dünkü raporumun eksiği:** öncelikler yalnız gerekçe tonuna değil, tercih değerlendirmesindeki olumlu/çelişki satırlarına da dokunuyor ("Daha güvenli seçenek önceliğini destekliyor"). Yeni kullanıcıda hiç çalışmaz, eski profilde çalışmaya devam eder. Kayıp: güvenli dilim programlarında bir olumlu satırı — kabul edilebilir, çünkü bu satır zaten yalnız 7 çipten birini seçmiş azınlıkta çıkıyordu. |
|
||
| 9 | `sihirbaz_tamamlandi` olayındaki `oncelik_sayisi` (`sihirbaz-adimlar.tsx:524`) | **Olayda kalır, hep 0 olur** | Alanı kaldırmak Rybbit'te geriye dönük okumayı bozar. **Commit mesajına seri kırılması notu** (P4'teki kalıp): *"bu tarihten sonra `oncelik_sayisi` her zaman 0'dır."* |
|
||
|
||
**Özetle geri alınabilirlik:** karar dönerse yalnız 3. adıma çip bloğu ve `tercih-farki.ts`'e
|
||
dört nokta geri konur; veride, DB'de, kayıtlı raporlarda hiçbir şey kaybolmamış olur.
|
||
CEO §5-1'deki "ucuz ve geri alınabilir" hükmü kod tarafından doğrulanıyor.
|
||
|
||
---
|
||
|
||
## 2. R7 — `text-slate-400` sınıflandırması (48 kullanım / 19 dosya)
|
||
|
||
### 2.1 Sayılar
|
||
|
||
| Sınıf | Adet | Hüküm |
|
||
|---|---|---|
|
||
| **Gerçek metin** (WCAG 1.4.3, 4,5:1 borcu) | **26** | Düzeltilir |
|
||
| **Placeholder metni** (1.4.3 kapsamında) | **2** | Düzeltilir |
|
||
| **Dekoratif ikon / `aria-hidden` glif** | **11** | Sorun değil, dokunulmaz |
|
||
| **Fonksiyonel ikon** (WCAG 1.4.11, 3:1 borcu) | **4** | Ayrı kural, ucuz — aynı commit'e katlanabilir |
|
||
| **Devre dışı durum** (`disabled:`) | **1** | WCAG 1.4.3 muaf, dokunulmaz |
|
||
| **Dev paneli** (kullanıcı görmez) | **4** | Kapsam dışı |
|
||
| | **48** | |
|
||
|
||
**Büyük punto: 0.** Eşik 18,66 px kalın ya da 24 px normal. En büyük aday
|
||
`katalog-arama.tsx:419` placeholder'ı (`text-base sm:text-lg` = 16/18 px, kalın değil) —
|
||
eşiğin altında. Yani 28'inin de borcu 4,5:1, hiçbirine 3:1 indirimi uygulanmıyor.
|
||
|
||
### 2.2 Gerçek metin — 26 satır (düzeltilecek)
|
||
|
||
`liste-uretici.tsx:429` (üretim sırasında "sayfayı kapatma" uyarısı) ·
|
||
`sihirbaz-adimlar.tsx:228` ("Adım 1/3"), `:381`, `:406` ("Seçtiklerin:"), `:442`, `:473` ·
|
||
`universite-listesi.tsx:26` (il + program sayısı), `:65`, `:75`, `:86` (başlık sayaçları) ·
|
||
`giris-form.tsx:159` ("veya" ayracı) ·
|
||
`katalog-arama.tsx:567` ("Keşfet"), `:703` (bölüm başlığı `h3`), `:742` (sağdaki detay, yalnız `sm+`) ·
|
||
`bolum-listesi.tsx:21`, `:66` · `program-netleri.tsx:176` (" / {max}" paydası) ·
|
||
`bolum-program-listesi.tsx:235` ("· 4 yıl") ·
|
||
`liste-cekmecesi.tsx:131` ("3/24" sayacı), `:231` (kesikli "ekle" butonunun etiketi) ·
|
||
`program-tablosu.tsx:217` (dilim toplamı), `:278` ("20 / 1.340 program"), `:349` ("· 4 yıl") ·
|
||
`tercih-profili-kapisi.tsx:369` (**`<label htmlFor>` — form etiketi**) ·
|
||
`secimlerim-paneli.tsx:108` ("3/24") · `tercih-haritasi.tsx:525` ("Kilitli tercih" durum metni)
|
||
|
||
Placeholder (2): `sihirbaz-adimlar.tsx:312` · `katalog-arama.tsx:419`
|
||
|
||
### 2.3 Dokunulmayanlar
|
||
|
||
- **Dekoratif ikon (11):** `liste-uretici:268` · `rapor-listesi:258` · `cta-sira-form:233` ·
|
||
`sihirbaz-adimlar:304` · `sayfalama:136` (`aria-hidden` "…") · `katalog-arama:408`, `:600` ·
|
||
`kaydet-banner:75` · `liste-cekmecesi:253` · `tercih-profili-kapisi:376` ·
|
||
`program-liste-verileri:52` ("—" veri yok glifi). Bunları koyulaştırmak metin/ikon
|
||
hiyerarşisini bozar, kazanç sıfır.
|
||
- **Fonksiyonel ikon (4):** `sihirbaz-adimlar:319` (aramayı temizle) · `kaydet-banner:102`
|
||
(banner'ı kapat) · `liste-cekmecesi:141` (sil), `:147` (`DrawerClose`). Bunlar 1.4.3
|
||
değil **1.4.11** (3:1) kapsamında ve 2,56:1 ile onu da geçmiyorlar — ama bunlar zaten
|
||
dünkü R10'da (dokunma hedefi < 44 px) ellenecek butonlar; ikisini **aynı** commit'te
|
||
yapmak mantıklı.
|
||
- **Devre dışı (1):** `giris-form.tsx:127` `disabled:text-slate-400` — WCAG 1.4.3 devre dışı
|
||
bileşenleri açıkça muaf tutuyor. Değiştirilirse "tıklanabilir" hissi verir, zarar.
|
||
- **Dev paneli (4):** `dev-panel.tsx:185, 232, 239, 320` — kullanıcı görmez.
|
||
|
||
### 2.4 Hesap ve hedef token
|
||
|
||
Kaynak: `globals.css`/Tailwind slate ölçeği, WCAG 2.x göreli parlaklık formülü.
|
||
|
||
| Renk çifti | Oran | Sonuç |
|
||
|---|---|---|
|
||
| `slate-400` (#94A3B8) / beyaz | **2,56:1** | ❌ |
|
||
| `slate-400` / `slate-50` (#F8FAFC) | **2,45:1** | ❌ |
|
||
| `slate-500` (#64748B) / beyaz | **4,76:1** | ✅ |
|
||
| `slate-500` / `slate-50` | **4,55:1** | ✅ (payı dar) |
|
||
| `slate-500` / `slate-100` (#F1F5F9) | **4,34:1** | ❌ — bu zeminde `slate-600` (6,92:1) gerekir |
|
||
| `slate-600` (#475569) / beyaz | **7,58:1** | ✅ |
|
||
|
||
**Kural:** hedef `text-slate-500`; **yalnız `bg-slate-100` üstünde duran satırlarda**
|
||
`text-slate-600`. Yeni token icat edilmiyor, palet değişmiyor (palet değişikliği `[BİLAL]`).
|
||
|
||
### 2.5 Hüküm
|
||
|
||
**Tek commit, 28 satır** (26 metin + 2 placeholder) → `text-slate-500`. Fonksiyonel 4 ikon
|
||
isteğe bağlı olarak aynı commit'e (R10 ile birlikte daha mantıklı). **Kör `sed` değil:**
|
||
aynı dosyalarda dokunulmaması gereken 11 dekoratif ikon var, bu yüzden 28 hedefli satır
|
||
düzenlemesi. Yeni bileşen yok, yeni sabit yok, düzen değişmiyor, `tsc`/`lint` riski yok.
|
||
Büyüklük: **S–M (~45-60 dk)**, tek dosyaya değil 15 dosyaya dokunduğu için inceleme yükü
|
||
küçük ama geniş → **ayrı ve tek amaçlı dal** şart.
|
||
|
||
**Bütçe sıkışırsa düzeltilecek 9 satır** (sıralı, en yüksek zarardan):
|
||
|
||
1. `tercih-profili-kapisi.tsx:369` — **form etiketi**; funnel'ın giriş kapısındaki alanın adı.
|
||
2. `sihirbaz-adimlar.tsx:228` — "Adım 1/3"; sihirbazdaki tek yazılı ilerleme göstergesi.
|
||
3. `sihirbaz-adimlar.tsx:381` ve `:406` — adım 1-2 alan etiketleri (`:442`/`:473` K5 ile ölüyor).
|
||
4. `liste-uretici.tsx:429` — "sayfayı kapatma" uyarısı; okunmazsa kullanıcı üretimi yarıda keser, **kredi yanar**.
|
||
5. `program-tablosu.tsx:278` — "20 / 1.340 program"; /sonuc'ta "daha var mı?" sorusunun tek cevabı.
|
||
6. `liste-cekmecesi.tsx:131` + `secimlerim-paneli.tsx:108` — "3/24" sayacı; manuel listenin tek geri bildirimi.
|
||
7. `tercih-haritasi.tsx:525` — "Kilitli tercih" durum metni.
|
||
8. `universite-listesi.tsx:26` — en kalabalık hub'daki tek satır üstü bilgi (il + program sayısı).
|
||
|
||
---
|
||
|
||
## 3. URAP takasının telafisi
|
||
|
||
### 3.1 Dün neyi yanlış yaptım — tek cümle
|
||
|
||
**Bir sayfada bilginin "zaten var" olduğunu, o sayfada o bilgiyi hiç aratmadan, farklı bir
|
||
sayfa tipindeki (karışık üniversiteli `/sonuc` ve `/bolum` listelerindeki Devlet/Vakıf
|
||
rozetlerinden) genellemeyle varsaydım** — oysa tek üniversitelik detay sayfasında rozet
|
||
tekrar olacağı için hiç yok. Doğrulama tek komutmuş:
|
||
|
||
```
|
||
grep -n "unitur" src/features/katalog/components/universite-icerik.tsx
|
||
→ 316-319 (yalnız "Tür" kartı)
|
||
grep -n "unitur\|Devlet\|Vakıf" src/features/katalog/components/universite-program-tablosu.tsx
|
||
→ 0 satır
|
||
```
|
||
|
||
Kural: "X bilgisi başka yerde de var" gerekçesi, **o dosyada grep'lenmeden** kullanılamaz.
|
||
|
||
### 3.2 Yan bulgu: takas edilen kart zaten bozuktu
|
||
|
||
`programs` tablosunda 6 `unitur` değeri var: `DEVLET` (12.142), `VAKIF` (7.974),
|
||
`KKTC` (1.145), `VAKIF MYO` (121), `YURTDISI KAMU` (99), `YURTDISI VAKIF` (12).
|
||
Kart `trBaslikDuzeni(uni.unitur)` kullanıyor (`universite-icerik.tsx:318`) ve
|
||
`slug.ts:56-64` tr-TR küçültmesi yapıyor → ekranda **"Kktc", "Vakıf Myo", "Yurtdısı Kamu",
|
||
"Yurtdısı Vakıf"** yazıyor. Yani 6 değerin 4'ünde bugünkü kart zaten hatalı metin basıyor.
|
||
Telafi metni **açık bir etiket haritasıyla** yazılmalı, `trBaslikDuzeni` ile değil.
|
||
|
||
### 3.3 İki alternatif
|
||
|
||
**Alternatif A — özet paragrafın ilk cümlesine tek sözcük öbeği (ÖNERİLEN)**
|
||
`universite-icerik.tsx:262-266`
|
||
|
||
```
|
||
390 px · /universite/[slug] · ilk ekran
|
||
|
||
Ana Sayfa › Üniversiteler › Boğaziçi Üniversitesi
|
||
|
||
[logo] Boğaziçi Üniversitesi Taban
|
||
Puanları 2026
|
||
|
||
Boğaziçi Üniversitesi (İstanbul), devlet üniversitesi; ← TEK EKLENEN ÖBEK
|
||
2026 YKS yerleştirme sonuçlarına göre 312 programda (mevcut <p> içinde)
|
||
öğrenci aldı; programlar 24 fakülte/yüksekokula
|
||
dağılıyor. En iyi taban başarı sıralaması 1.240. …
|
||
|
||
[ Sıralaman Boğaziçi tabanlarının neresinde? → ] ← ustSiraSatiri (mevcut)
|
||
|
||
┌──────────────────┐┌──────────────────┐
|
||
│ PROGRAM ││ FAKÜLTE / BİRİM │
|
||
│ 312 ││ 24 │
|
||
└──────────────────┘└──────────────────┘
|
||
┌──────────────────┐┌──────────────────┐
|
||
│ URAP TÜRKİYE ││ EN İYİ SIRALAMA │ ← ızgara 4 kart, CEO §3-P3 aynen
|
||
│ 18 / 198 ││ 1.240 │
|
||
│ 2025-2026 ││ │
|
||
└──────────────────┘└──────────────────┘
|
||
```
|
||
|
||
Metin (tam): `"{uni.ad}{il ? ` (${il})` : ""}, {TUR_CUMLESI[uni.unitur]}; {SON_YIL} YKS …"`
|
||
|
||
| `unitur` | Cümledeki öbek |
|
||
|---|---|
|
||
| `DEVLET` | devlet üniversitesi |
|
||
| `VAKIF` | vakıf üniversitesi |
|
||
| `VAKIF MYO` | vakıf meslek yüksekokulu |
|
||
| `KKTC` | KKTC üniversitesi |
|
||
| `YURTDISI KAMU` | yurt dışında bir kamu üniversitesi |
|
||
| `YURTDISI VAKIF` | yurt dışında bir vakıf üniversitesi |
|
||
| `null` | öbek **hiç yazılmaz** (virgül de yazılmaz — "—" yok, boşluk yok) |
|
||
|
||
Neden A:
|
||
- **Sıfır yeni eleman, sıfır düzen değişikliği, sıfır CLS, sıfır mobil taşma riski.**
|
||
Izgara 4 kart kalır; P3'ün kabul kriteri (1) hiç zorlanmaz.
|
||
- **En çok okunan konumda:** cümlenin ilk 6 kelimesi, ad ve ilin hemen yanında. Dün
|
||
paragrafı "taranabilir değil" diye reddettiğim şey bir **sayıydı** (18/198 — okuyucunun
|
||
kafasında ölçeklemesi gereken, gözle aranan bir değer); devlet/vakıf **kategorik tek
|
||
sözcük** ve zaten cümlenin öznesine yapışık — aranmıyor, okunuyor.
|
||
- **Ekran okuyucu tarafı kazanıyor:** bugün `dt/dd` çiftinde tek başına duran "Tür"
|
||
yerine, bilgiyi bağlamıyla birlikte veren bir cümle.
|
||
- **Ücret sinyali doğru kullanıcıya gidiyor:** Boğaziçi'nde kimse "devlet mi?" diye sormaz;
|
||
asıl muhatap az bilinen vakıf üniversitesinin sayfasına Google'dan inen öğrenci ve o
|
||
sayfada ilk okuduğu satır bu cümle.
|
||
|
||
**Alternatif B — "Program" kartının değerinin altına ikinci satır**
|
||
|
||
```
|
||
┌──────────────────┐┌──────────────────┐
|
||
│ PROGRAM ││ FAKÜLTE / BİRİM │
|
||
│ 312 ││ 24 │
|
||
│ Devlet üniv. ││ │ ← eklenen satır
|
||
└──────────────────┘└──────────────────┘
|
||
```
|
||
|
||
Artısı: taranabilir, kart sayısı yine 4. Eksileri: (a) kartın başlığı "PROGRAM", altındaki
|
||
satır programla ilgili değil — `dt`/`dd` anlamı bozulur; (b) 390 px'te 2 sütunlu ızgarada
|
||
kartlar eşit yükseklik aldığı için **dört kartın hepsi** birer satır uzar, ilk ekrandan
|
||
~28 px daha gider; (c) "Vakıf meslek yüksekokulu" 190 px'lik karta sığmaz, kısaltma
|
||
uydurmak gerekir. **Reddediliyor.**
|
||
|
||
### 3.4 Öneri
|
||
|
||
**A.** Büyüklük **XS** (tek `<p>` + bir etiket haritası sabiti, ~12 satır), P3 dalının
|
||
**aynı commit'ine** girmeli — takas ile telafi ayrı commit'lerde giderse arada 198 sayfa
|
||
bilgisiz kalır. Kabul kriteri ekle: *"`/universite/[slug]` çıktısında üniversitenin türü
|
||
(devlet/vakıf/KKTC/…) tam olarak bir kez, özet paragrafın ilk cümlesinde geçer;
|
||
`unitur` NULL olan kurumda hiç geçmez ve cümlede boşluk/kopuk virgül kalmaz."*
|
||
Dumandan doğrulaması ucuz: `bogazici-universitesi.html`'de "devlet üniversitesi" = 1,
|
||
`koc-universitesi.html`'de "vakıf üniversitesi" = 1.
|
||
|
||
---
|
||
|
||
## Bilal'in gözle kontrol etmesi gerekenler (375-390 px)
|
||
|
||
1. **Sihirbaz, 2. adımdan 3. adıma geçiş** — "Devam"a bastıktan sonra modal ne kadar
|
||
kısalıyor, "Listemi oluştur" parmağın kaldığı yere geliyor mu? (§1.1, `min-h` kararı buna bağlı)
|
||
2. **Sihirbaz 3. adım bugünkü hâli** — "Senin için önemli olan" çipleri 375 px'te kaç satıra sarıyor?
|
||
3. **`/universiteler` hub'ı** — üniversite adının altındaki gri "İstanbul · 312 program"
|
||
satırı gün ışığında okunuyor mu? (R7'nin en kalabalık yüzeydeki örneği)
|
||
4. **Liste üretimi sırasında** — "Bu işlem yarım dakika kadar sürebilir, sayfayı kapatma."
|
||
cümlesi görünüyor mu, yoksa gri mi kayboluyor? (R7 · kredi yakma riski)
|
||
5. **`/universite/koc-universitesi`** — bugün "Tür" kartında ne yazıyor; sayfada başka
|
||
hiçbir yerde "Vakıf" geçmediğini gözle doğrula (§3.1'in görsel karşılığı).
|
||
|
||
## Bilal'den istenen (2 madde)
|
||
|
||
1. **CEO §5 soru 1'i cevapla** (sihirbazın son adımındaki 7 öncelik çipi kalksın mı).
|
||
"Evet" ise uygulanacak her şey yukarıda hazır: tek ekran taslağı, 3 adım hükmü,
|
||
`/meraklisina` için "şema değişmiyor" kanıtı ve `tercih-farki.ts`'teki tek zorunlu
|
||
düzeltme. **~3 dk.**
|
||
2. **R7 için bütçe seç:** tam iş (28 satır, tek dal, ~45-60 dk, geniş ama sığ inceleme) mi,
|
||
yoksa §2.5'teki **9 satırlık** kısa liste mi. **~2 dk.**
|