Commit Graph

357 Commits

Author SHA1 Message Date
bilalgursen
cf992deac8 fix(tasarim): CTA arka planındaki masonry pikseller durağan — imleçle ısınmaz
All checks were successful
Deploy / deploy (push) Successful in 4m28s
Bilal'in isteği (24 Eyl 2026): CTA'ların arkasındaki pikseller üzerine
gelindiğinde bir şey olmasın. PixelMasonry ısı fırçasına kaydolmuyor
(data-px yok, usePixelHeat yok); yalnız seyrek turuncu vurgu kareleri
kendi kendine nefes alıyor. DESIGN.md §10.8 güncellendi.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 12:09:21 +03:00
bilalgursen
2099f20ed1 feat(tasarim): form alanları hap, CTA bandı tek kaynak, masonry piksel zemin, çekmeceler §4.10
- Input/Select/Textarea: shadcn'in ince varsayılanı yerine üst çubuk
  haplarıyla aynı kalıp (h-12, rounded-full, slate-200, 16 px; md:text-sm
  yok); kullanım yerleri yalnız yerleşim sınıfı taşır. DESIGN.md §4.6
  tam sınıf dizisi; denetime ince-form-alani (hata) ve ham-input (uyarı)
- CtaBandi (mavi zemin + piksel doku) tek kaynak: /sonuc iki panel, katalog
  altı kart, "Kendi Listem" çekmecesi altı. Ana sayfa kapanışı koyu
  PikselCtaYuzeyi + 24'lük piksel liste kreatifiyle kalır (Bilal: "orası
  bayağı iyiydi"); yazılıp silinen satır kaldırıldı
- PixelMasonry: CTA arka planları büyüklü küçüklü, hafif kaymış kareler;
  eşit ızgaralı PixelField kaldırıldı
- Çekmece başlığındaki 12×2 piksel liste kaldırıldı (çok dolu); sayı +
  ilerleme çubuğu + risk dağılımı geri geldi
- "Saniyede gör" çekmecesi §4.10 düzeninde: ortalı DrawerTitle + bağlam,
  rozet ve çizgili "neler alacaksın" listesi yok; kapı modalındaki iki
  rozet kalktı; denetime modal-rozet (hata)
- Kapı panelinde 3 px odak halkası kırpılmıyor (px-px → p-1)
- Liste satırı: üniversite adı + tür/il/süre adın altında tek akan satır,
  telefonda text-xs (SATIR_ALT_GRUP); katalog listelerinde ad kendi
  satırında (SATIR_GRUP space-y-2). Ölçüm 375 px canlı bölüm sayfası:
  satır yüksekliğini metin değil alt alta iki 44 px düğme belirliyor

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 12:08:24 +03:00
bilalgursen
b8b7925ba9 merge(0924): bölüm sayfası ve öğrenci-samimi dalları — şişko ve sade dil tüm ekranlarda, samimi ton (DESIGN.md §10), funnel CTA piksel liste
All checks were successful
Deploy / deploy (push) Successful in 4m36s
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-24 10:20:40 +03:00
bilalgursen
4d3bebab76 feat(tasarim): katalog sayfası alt CTA kartı funnel yüzeyinde (piksel liste)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:14:04 +03:00
bilalgursen
71e6389131 feat(tasarim): funnel CTA'ları arama kartı dilinde, 24'lük piksel liste kreatifi
- PikselCtaYuzeyi: koyu slate-950 yüzey, yazılıp silinen satırlar, tek
  turuncu CTA (arama penceresindeki kartın dili); ana sayfa kapanışı ve
  /sonuc'taki iki panelde köşeye kümelenen PixelField'in yerine
- PikselListe: 24 kare = 24 tercih; kendini kurar (5 hayal · 13 dengeli ·
  6 güvenli), imlece tepki verir, CTA'ya gelince tamamı dolar, dokunmada
  nabız; hareketi azalt'ta durağan; renk hep metinle
- Liste çekmecesi: ilerleme çubuğunun yerinde öğrencinin kendi listesi
  pikselde (her kare o tercihin riski); başlık yan yana dizildi, liste
  alanı 150 → 234 px (375 px ölçümü)
- Funnel metinleri src/lib/funnel-metinleri.ts'e taşındı

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:12:45 +03:00
bilalgursen
96b1516e35 fix(tasarim): karşılaştırma tablosu kaymıyor; çekmecede tek çarpı; bildirimler eski hâlinde
- Ana sayfa karşılaştırması telefonda/tablette yana kayıyordu: lg altında
  özellik başına satır + üç sütun, sütun adları yapışık (96/128 px, ölçüldü);
  lg'de tablo, taşma yok
- Liste çekmecesinde kapatma çarpısı ile satır çıkarma çarpısı aynı
  görünüyordu: satırda çerçevesiz "−" (CircleMinus)
- Bildirim (toast) görünümündeki değişiklik geri alındı (uyumsuzdu)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:05:47 +03:00
bilalgursen
97e57aafa1 fix(tasarim): geniş ekranda tek satırlık liste satırı dikeyde ortalı
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:48:17 +03:00
bilalgursen
1a176dd085 feat(tasarim): geniş ekranda liste satırları ince
- Tür/il/süre satırı sm'den itibaren adla aynı satırda (SATIR_GRUP)
- lg'de hücre dolgusu bir kademe az, satır düğmeleri 36 px (§8)
- 1280 px ölçüm: bölüm listesi 83 → 61 px; /sonuc 68 px (uzun adda 92)
- Telefonda değişiklik yok (44 px düğme, alt alta düzen)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:45:03 +03:00
bilalgursen
d5fd7d12f2 docs(tasarim): araştırma belgesini yapılanla eşitle (tercih yolu şeridi yapılmadı, kredi-TL açık karar)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:36:48 +03:00
bilalgursen
6b554f1ea2 docs(tasarim): araştırmaya skill değerlendirmesi ve dalda yapılanlar
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:36:31 +03:00
bilalgursen
939da13012 fix(ux): /listem telefonda yana taşıyordu; başlık yer söylüyor; kaydet bandı
- /listem ve üretim ekranındaki ızgaranın telefonda sütun tanımı yoktu;
  en geniş çocuk sayfayı 434 px'e itiyordu (375 px'te yatay kaydırma).
  grid-cols-[minmax(0,1fr)] ile düzeldi (ölçüldü: 375)
- /listem h1: pazarlama cümlesi yerine "Tercih listen" + "24 tercih:
  5 hayal · 13 dengeli · 6 güvenli"; paketsizde eski cümle alt satırda
- Başlık düğmeleri 44 px, hover tek turuncu
- "Listen yalnızca bu tarayıcıda" bandı telefonda başlığı kelime kelime
  kırıyordu: metin üstte, düğme altta tam genişlik; kanonik çarpı

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:36:11 +03:00
bilalgursen
d01b6853cd docs(tasarim): DESIGN.md §10 samimi ton, ilerleme, kutlama, geri al, anlamsal yapı; denetime samimiyetsiz-unlem kuralı
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:32:04 +03:00
bilalgursen
ad086c3eca feat(ux): anlamsal yapı ve metin — içeriğe geç linki, sıralama yok sayfası
- Site geneli "İçeriğe geç" linki (klavyede ilk durak, WCAG 2.4.1)
- Sıralama yok sayfası: "Geçerli bir sıralama gerekli" yerine "Önce
  sıralamanı gir" ve ne işe yaradığı; CTA ok sonda, 48 px
- Rapor satırı aç/kapa düğmesi açtığı bölgeye bağlandı (aria-controls)
- Liste hazırlanırken "sayfayı kapatma" uyarısı 12 px griden okunur
  boya; bekleme metinleri "…" ile; başlık iri
- /sonuc başlığında dengeli satır kırılımı (text-balance)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:31:20 +03:00
bilalgursen
aef4adc90b feat(ux): listeden silme geri alınabilir; better-ui skill'i eklendi
- Çekmecede "Listeyi temizle" ve satır çıkarma (düğme ve kaydırma)
  anında siliyordu, geri dönüş yoktu. Artık 8 sn "Geri al" bildirimi;
  çıkanlar eski sıralarına döner, arada eklenenler korunur
- Çekmece kaydırması sayfaya taşmıyor (overscroll-contain)
- .claude/skills/better-ui: Jakub Krehel'in UI cilası skill'i (ui-skills.com);
  başına DESIGN.md önceliği ve çakışan iki değer notu eklendi

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:29:51 +03:00
bilalgursen
169080df9d feat(ux): sihirbaz adımları adlandı; Emil Kowalski ilkeleriyle hareket inceltmesi
- Adım göstergesi: Alan · Şehir · Öncelik; dolum transform ile soldan,
  güçlü ease-out 300 ms; adım değişimi ekran okuyucuya duyurulur
- Çekmecede "Listen tamam" satırı @starting-style ile küçük giriş
  (scale 0.95 + opaklık); hareketi azalt'ta yalnız opaklık
- Dilim sekmesindeki kayan hapta sekme kaldırıldı (bounce 0, 0.35 sn)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:27:11 +03:00
bilalgursen
e29a0ceb9a feat(ux): liste çekmecesinde denge ve tamamlanma
- Listenin risk dağılımı metinle ("Az riskli 20 · Güvenli 4")
- 24/24'te "Listen tamam" satırı; durum satırı ekran okuyucuya duyurulur
- Riskleri bilinen 6+ tercihli listede güvenli yoksa tek cümlelik ipucu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:25:26 +03:00
bilalgursen
f4df52000b feat(ux): /sonuc'a tek cümlelik cevap, liste durumu ve kilometre taşları
- Sayfanın h1'i yoktu: "Sıralamanla açılan programlar" + "85.000.
  sıradasın (Sayısal). 4.760 program sana açık" başlığı en üstte;
  tadımlık altında (375 px'te hâlâ ilk ekranda, 474 px)
- Başlık altında liste durumu: boşsa + ipucu, doluysa "Listende 3/24
  program · 21 yer kaldı" düğmesi çekmeceyi açar
- + ile ilk programda ve 24/24'te tek seferlik sakin onay; liste
  doluyken ne yapılacağını söyleyen mesaj
- Bildirimler 16 px başlık, okunur açıklama, sitenin köşesiyle
- Başlık ve tablo aynı sorguyu React cache ile paylaşıyor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:23:20 +03:00
bilalgursen
d82d59df10 docs(tasarim): samimi ve oyunsu arayüz araştırması (Duolingo, Apple, NN/g, WCAG)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:19:43 +03:00
bilalgursen
5a2fd28555 docs(tasarim): taramada bilerek bırakılan uyarıların gerekçesi
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:07:58 +03:00
bilalgursen
3500bb3745 feat(tasarim): kalan küçük ekranlar (rehber, sıralama, üniversite listesi)
- Türkiye sıralaması satırı §4.15: ad sarar, 16 px; satır hover'ı
  turuncu; Cal Sans sırada tabular-nums kalktı
- Rehber yol satırı 14 px ve turuncu hover; üniversite dizini hover
- Logo monogramı 10 → 12 px; arama kartındaki elle hex → slate-950
- Denetim: satırın tamamı link olduğunda group-hover mavi ad çifti de
  istisna sayılıyor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:07:19 +03:00
bilalgursen
7dff241eb6 feat(tasarim): ana sayfa ve her sayfadaki ortak parçalar dile göre
- Landing kartlarının hover'ı tek turuncu (§4.4)
- Güven bandında sayı üstte ve iri, etiket altında (§1.1)
- "Dürüstlük notu", alt bilgi başlıkları, arama penceresi başlıkları
  büyük harften çıktı; 10-11 px yazılar 12 px'e
- Alt bilgi linklerinin hover'ı turuncu

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:05:56 +03:00
bilalgursen
aa0a03cda9 feat(tasarim): sihirbaz adımları "şişko ve sade" dile göre
- Çipler 44 px (il çipleri 40 px), yarı kalın, hover tek turuncu,
  basınca küçülür; seçili il çipleri turuncu yerine mavi (tek turuncu
  ekranın CTA'sında)
- Büyük harfli minik etiketler ve 10 px sayaçlar kalktı; başlıklar 20 px
- İl arama kutusu 44 px, 16 px yazı (iOS yakınlaştırmasın)
- 3. adım 375 px'te pencereden taşıyordu: öncelikler telefonda iki
  sütun, alt düğmeler h-11 (ölçüm: 771 → 740 px, kaydırmasız)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 01:03:06 +03:00
bilalgursen
309fb73a34 feat(tasarim): rapor listesi ve tadımlık satırı "şişko ve sade" dile göre
- Risk etiketi src/components/risk-etiketi.tsx'e çıkarıldı; /sonuc,
  çekmece ve rapor listesi oradan kullanıyor
- Rapor satırı §4.15: ad sarar, üniversite adı ayrı satırda, telefonda
  risk + taban sıra adın altında, logo gizli (satır 214 → 152 px),
  aç/kapa düğmesi 44 px, hover tek turuncu
- Açılan ayrıntı: 16 px metin, 14 px koyu etiket, rounded-xl iç kutular
- Tadımlık satırı aynı satır düzenine geçti
- Tercih değişti penceresi, liste gövdesi ve yazdırma sayfasında
  10-11 px / büyük harfli etiketler kalktı

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:57:27 +03:00
bilalgursen
73943b0954 feat(tasarim): liste çekmecesi "şişko ve sade" dile göre
- Başlık ortalı (§4.10), çarpı ve temizle düğmesi kanonik size-9
- Satırlar çerçevesiz liste satırı; ad sarar, üniversite adı ayrı
  satırda, risk etiketi metin + renkle adın altında, çıkar düğmesi 44 px
- Alt bant telefonda alt alta: başlık üç satıra kırılıp listenin yerini
  yiyordu (liste 232 → 279 px, 375 px ölçümü)
- 10-11 px yazılar ve mavi hover'lar kalktı; navbar sayaç rozeti 12 px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:48:57 +03:00
bilalgursen
f02494ef78 feat(tasarim): /sonuc program tablosu "şişko ve sade" dile göre
- Liste satırı sınıfları src/components/liste-satiri.ts'e çıkarıldı;
  üniversite, bölüm ve /sonuc tabloları oradan okuyor
- /sonuc satırı: ad sarar, üniversite adı ayrı satırda ve düzgün
  harfle, telefonda risk + taban sıra adın altında, 44 px butonlar,
  "boş kaldı" 12 px altından çıktı
- Dilim sekmeleri 375 px'te taşıyordu (418 px); telefonda üç eşit hap
- Tercih kapısında büyük harfli etiketler SectionEyebrow'a, harita
  şeridinde 10 px yazılar 12 px'e

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:44:59 +03:00
bilalgursen
5b51fd16e0 feat(tasarim): bölüm sayfası "şişko ve sade" dile göre
- Başlık bloğu lg altında ortalı, kimlik hapları (düzey + puan türü),
  dört özet kartı (Program, Devlet, Vakıf, En iyi sıralama), piksel ayraç
- OzetKart src/components/ozet-kart.tsx'e çıkarıldı; üniversite ve bölüm
  sayfası oradan kullanıyor. 6-7 haneli sayı birimle kısalıyor (ölçüldü)
- Program listesi §4.15: ad sarar, varyant ayrı satırda, 44 px butonlar,
  telefonda taban sıra adın altında, butonlar alt alta
- Sayfalama 44 px, telefonda tek satır; hover'lar tek turuncu
- Denetim: kanonik liste satırı adının mavi hover'ı artık uyarı vermiyor

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:39:21 +03:00
147569a7a3 Merge pull request 'tasarim/sisko-sade' (#7) from tasarim/sisko-sade into main
All checks were successful
Deploy / deploy (push) Successful in 4m45s
Reviewed-on: #7
2026-09-24 00:04:05 +03:00
bilalgursen
6a9af19ef2 feat(tasarim): üniversite sayfası "şişko ve sade" dile göre baştan, DESIGN.md know-how'ı
Üniversite sayfası (canlı referans ekran /universite/ankara-universitesi):
- Program listesi: ad kesilmez/sarar, telefonda taban sıra alt satıra iner,
  satır butonları 44 px, tür çipi okunur boyda
- Başlık bloğu lg altında ortalı (logo başlığın üstünde), kimlik hapları
  (Devlet/Ankara) navbar ölçüsünde, ikon + metin
- Harita yanında 4 özet kartı (OzetKart): sayı solda iri, ikon sağda;
  4. kart URAP Türkiye sırası + piksel sıra şeridi (PixelSira)
- Akademik göstergeler (URAP + YÖK İstatistik) sayfadan "Akademik
  göstergeler ›" satırının açtığı alt sayfaya taşındı: kartsız, ortalı,
  masonry gösterge kareleri, tek ekrana sığar
- Hover tek turuncu (orange-500); liste satırı adı mavi kalır
- Üst çubuk başlık geçişi (NavBaslik): h1 kaydırılınca üst çubukta logo +
  ad belirir; bölüm sayfasında da (yalnız ad)

Tasarım dili:
- DESIGN.md: temel his (§1.1), hover kuralı (§2.1), yazı alt sınırları,
  yeni tek kaynak parçalar (§4.8–4.15), lg altı ortala (§5.2), reddedilen
  denemeler (§7), ölç-tahmin-etme ve tuzaklar (§9)
- Denetim: gösterge karesi renk istisnası (bg-indigo-500, bg-green-600) ve
  site taraması için dört uyarı (minik-yazi, buyuk-harf-etiket, mavi-hover,
  iri-sayi-tabular)

Not: universite-icerik.tsx'teki akademik göstergeler bölümü (URAP/YÖK
kartları) Bilal'in commit'lenmemiş işiydi; tasarım değişiklikleriyle aynı
dosyada iç içe olduğu için bu commit'e girdi.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 00:01:41 +03:00
bilalgursen
5df0af0d38 feat(katalog): YÖK İstatistik öğrenci/öğretim üyesi verisi ve Türkiye sıralaması sayfası
- src/lib/yok-istatistik.ts (scripts/yok-istatistik-uret.py ile üretilir):
  üniversite başına örgün öğrenci ve öğretim üyesi, öğrenci/üye oranı ve
  Türkiye medyanı; katalog detayına `istatistik` alanı
- /universite-siralamasi: URAP Türkiye sıralaması sayfası (URAP logosu ve
  zorunlu urapcenter.org atfıyla), sitemap'e eklendi
2026-09-24 00:01:41 +03:00
bilalgursen
22accb1241 fix(sonuc,liste): tadımlık listesi olanda tablonun altına iner, çekmecede risk etiketi metinle
- /sonuc: kayıtlı listesi olan ziyaretçide harita ile ekleme tablosu arasına
  tadımlık CTA'sı girmez, tablonun altına iner (karar sunucudaki liste sayısı
  çerezinden, hidrasyonda zıplamaz)
- Liste çekmecesi: risk noktası tek başına değil RISK_ETIKET metniyle
- Sıralama formu: kompakt başlık düzeni
2026-09-24 00:01:40 +03:00
bilalgursen
ec002d7cfc chore(tasarim): denetim uyarıları kapatıldı, bulgu ajanları sonnet'e alındı, skill eval seti
All checks were successful
Deploy / deploy (push) Successful in 5m43s
- giris-form / odeme-sonuc-karti: emoji yerine lucide ikon ya da düz metin (DESIGN.md §4.7)
- tasarim-denetim: rehber kapak görseli hex kuralından muaf (OG ile ortak sabit palet)
- analitik, seo-geo, marka, rehber-editoru, qa-muhendisi: model: sonnet (kod yazmayan,
  bulgu üreten ajanlar); QA'da deneme bütçesi (en fazla iki e-posta servisi, üç deneme,
  yeniden üretim yalnızca şüpheli sonuçta)
- kolaytercih-tasarim/evals.md: skill kapalı/açık karşılaştırması için üç istek + kontrol listesi

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 16:49:22 +03:00
bilalgursen
dc7861737b feat(tasarim): görsel dilin tek kaynağı DESIGN.md, proje skill'i ve tasarım denetim betiği
All checks were successful
Deploy / deploy (push) Successful in 5m33s
- docs/tasarim/DESIGN.md: 9 bölümlük görsel dil belgesi (renk rolleri, tipografi,
  tek kaynak bileşenlerin sınıf dizileri, yerleşim, yap/yapma, brief şablonu)
- kolaytercih-tasarim skill'i: UI işinde tetiklenir, belgeye götürür, örnek verir;
  tasarimci ve yazilimci ajanlarına skills: ile önyüklenir
- scripts/tasarim-denetim.ts: 13 kural (Badge, CTA'da Sparkles, palet dışı ton,
  gradyan metin, parlama, hareket spam'i, çarpı, font); pnpm lint'e bağlandı
- ui-ux-pro-max genel kataloğu skills'ten .agents/skills-devre-disi/ altına taşındı
- AGENTS.md: DESIGN.md kuralı; rozet sınıfı koda göre düzeltildi (font-bricolage yoktu)
- arama-funnel-karti: palet dışı text-cyan-300 → text-orange-500

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-23 14:44:35 +03:00
bilalgursen
a42a1a9920 docs(ekip): 22-23 Eylül vardiya raporları, BACKLOG/KARARLAR/PROTOKOL güncellemeleri
All checks were successful
Deploy / deploy (push) Successful in 17s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 11:43:11 +03:00
bilalgursen
a8c75ce4a7 chore(ekip): Rybbit MCP bağlantısı (salt okuma) ve ajan tanımları güncellemesi
- .mcp.json: rybbit sunucusu, anahtar ${RYBBIT_API_KEY} ortam değişkeninden
- .claude/settings.json: rybbit yazma araçları deny listesinde
- .gitignore: .claude/settings.local.json (anahtar burada) commit'lenmez
- docs/ekip/RYBBIT-BAGLANTI.md + settings.local.example.json: kurulum

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 11:43:11 +03:00
bilalgursen
1fad254c17 merge(0923): harita en üstte, üniversite tür çipi, URAP sırası, risk etiketi, ölçüm delikleri, unitur veri düzeltmesi
All checks were successful
Deploy / deploy (push) Successful in 6m40s
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-23 11:36:59 +03:00
bilalgursen
a021f933a5 Merge branch 'gece/0922-unitur-kacagi' into is/0923-birlesik
# Conflicts:
#	scripts/veri-kalite.ts
2026-09-23 11:34:07 +03:00
bilalgursen
826d9ffbcb Merge branch 'gece/0922-olcum' into is/0923-birlesik 2026-09-23 11:33:51 +03:00
bilalgursen
060e6534c9 Merge branch 'gece/0922-risk-etiketi' into is/0923-birlesik 2026-09-23 11:33:51 +03:00
bilalgursen
e33ef4231f Merge branch 'is/0923-harita-ustte' into is/0923-birlesik 2026-09-23 11:27:46 +03:00
bilalgursen
e8434dc054 feat(universite): tür, ızgaraya değil H1'in altındaki kimlik çipine döndü
Izgara 5 karta çıkamıyor: lg:grid-cols-[1fr_1fr_1.35fr] + lg:grid-rows-2
şablonunda harita 3. sütunu iki satır kaplıyor, kartlara tam 4 hücre kalıyor.
Tür zaten bir metrik değil kategori; sitenin geri kalanında (program tablosu,
rapor listesi, tadımlık, bölüm listesi) başlığın altında çip olarak yaşıyor,
detay sayfası bunu taşımayan tek yüzeydi.

- Tür çipi H1'in altına girdi; sınıf seti program-tablosu.tsx:329-333'ten
  birebir kopya (yeni varyant yok). Sayfalama sayfalarında da yazar.
- URAP'ı olmayan 31 sayfada ızgaranın 4. hücresi "Tür" yerine "Toplam
  kontenjan" oldu; toplam kontenjanı 0 olan üniversite yok, o hücrede "—"
  çıkmıyor.
- UNITUR_ETIKET bileşenin içinden src/lib/unitur.ts'e çıktı (DILIM_ETIKET'in
  lib/risk.ts'te durması gibi tek kaynak) ve bölüm listesi rozetleri de buna
  bağlandı: "Kktc" → "KKTC", "Vakıf Myo" → "Vakıf MYO".
- Özet cümledeki "…, devlet üniversitesi, …" telafisi kalıyor: tür bir kez
  taranabilir çip, bir kez okunabilir cümle olarak geçiyor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 11:14:54 +03:00
bilalgursen
ea4b30a842 fix(sonuc): harita en üste çıkar, liste sayısı çerezi kaymayı sıfırlar
Manuel listenin haritası /sonuc'ta tablonun altından sayfanın en üstüne
alındı: listesini kurmuş ziyaretçi ekranda önce kendi listesini görür.
Liste boşken harita DOM'a hiç girmez — yer tutucu da çizilmez, tadımlık
main'in ilk çocuğu kalır ve first:mt-0 çalışmayı sürdürür. Yani ürünü ilk
kez gören ziyaretçide sayfa sırası hiç değişmiyor.

Çerez neden gerekti: manuel liste localStorage'ta yaşıyor, store'un sunucu
snapshot'ı her zaman boş liste dönüyor. Harita yukarıdayken kayıtlı liste
ancak hidrasyondan sonra okunabildiği için harita sonradan belirip sayfayı
itiyordu (mobilde ~146 px, masaüstünde ~368 px; CLS ~0,13 / ~0,35). Client
artık listenin yalnızca UZUNLUĞUNU kolaytercih.liste-sayi çerezine aynalıyor
(kişisel veri ya da program kimliği yok, öznitelikleri kolaytercih.profil ile
birebir aynı); sunucu bunu okuyup haritaya ilk boyada tam ölçülü yer ayırıyor,
chunk inince kutunun yalnızca içi doluyor. Çerez hidrasyona kadar geçerli:
store okunduktan sonra tek doğru kaynak listenin kendisi, böylece bayat çerez
ya da çekmeceden boşaltılan liste durumunda boş harita ekranda kalmıyor.

Yanında: harita iskeletine motion-reduce:animate-none (artık katlamanın
üstünde, durdurulamaz nabız gösterilmemeli), yurt dışı şeridine sabit
yükseklikli loading yer tutucu (ssr:false + loading'siz dynamic, yoktan
beliren ~104 px). Kararın tersini belgeleyen üç yorum bloğu da güncellendi.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 10:58:53 +03:00
bilalgursen
fa7f228822 Merge branch 'gece/0922-urap' into is/0923-uni-tur 2026-09-23 10:49:40 +03:00
bilalgursen
4c756c41fd fix(universite): üniversite türü özet paragrafın ilk virgülüne döndü
Dün gece bu dalda URAP sırası "Tür" kartının yerini alırken devlet/vakıf
bilgisi URAP'ta yer alan 198 üniversite sayfasından tamamen düştü — gerekçe
"bilgi sayfanın başka yerinde zaten var" idi, doğrulandı ki değil
(bogazici-universitesi.html'de "Devlet" 0 kez, koc-universitesi.html'de
"Vakıf" 0 kez geçiyordu). Bu commit o bilgi kaybının telafisi.

Telafi özet paragrafın ilk virgülünde duruyor: "… (İstanbul), devlet
üniversitesi; 2026 YKS yerleştirme sonuçlarına göre …". Yeni kutu, yeni
bileşen, yeni rozet yok; ızgara 4 kart kalıyor.

Metin `trBaslikDuzeni` ile değil, dünkü commit'te eklenen `UNITUR_ETIKET`
haritasıyla üretiliyor; harita cümle biçimini de taşıyacak şekilde
genişletildi (kart etiketi + cümle öbeği tek kaynakta). `trBaslikDuzeni`
tr-TR küçültmesi yaptığı için 6 `unitur` değerinin 4'ünde bozuk metin
üretiyordu ("Kktc", "Yurtdısı Kamu"). Haritada olmayan ya da NULL bir
değerde öbek hiç yazılmaz, cümlede kopuk virgül kalmaz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 10:01:41 +03:00
bilalgursen
c5fd2cb10f fix(veri): yokatlas.db — programs_arsiv 85 satır unitur/il düzeltmesi (61 + 24)
`npx tsx scripts/unitur-onar.ts` çıktısı:

    Aşama D (yanlış kurum alanı) programs:       unitur 0 satır, il 0 satır
    Aşama D (yanlış kurum alanı) programs_arsiv: unitur 61 satır, il 24 satır
    Aşama A/B/C: 0 / 0 / 0 satır   ·   Kalan NULL unitur: 0

    unitur: ULUSLARARASI BALKAN 31 + ULUSLARARASI SARAYBOSNA 30 = 61
            DEVLET → YURTDISI KAMU
    il    : ULUSLARARASI BALKAN 24 satır
            SARAYBOSNA - BOSNA - HERSEK → ÜSKÜP-MAKEDONYA
    (Saraybosna Ü.'nin ili değişmedi — kurum gerçekten Saraybosna'da.
     Kıbrıs Amerikan'ın arşivde hiç satırı yok.)

Fark raporu — düzeltme öncesi DB `sqlite3 .backup` ile alındı, ATTACH ile
her tablonun HER kolonu id üzerinden karşılaştırıldı:

    programs:        eski 21493 → yeni 21493 | 45 kolon | kayıp/yeni id 0 | DEĞİŞEN: yok
    programs_arsiv:  eski  3735 → yeni  3735 | 45 kolon | kayıp/yeni id 0 | DEĞİŞEN: unitur=61, il=24
    netler:          eski 62975 → yeni 62975
    veri_meta:       eski    37 → yeni    37
    her iki tabloda 34 yıl/ölçü kolonu (sıra/puan/kontenjan/yerleşen +
      2025 ek kontenjanları, 2021-2026) Σ sağlaması BİREBİR AYNI ✓

Yani puan/sıra/kontenjan/yerleşen kolonlarında değişen satır: 0.

Doğrulama:
- `pnpm veri-kalite --yil 2026 --db data/yokatlas.db` → 0 ZORUNLU kontrol kaldı,
  3 uyarı. Üç uyarı düzeltme öncesiyle birebir aynı, hiçbiri bu işten doğmadı
  (il boş 110, kimlik ATLANDI, yetim netler 2066).
- `programs_arsiv` ile `programs` arasında `unitur` farkı olan kurum: 0 (önce 2).
- Betik ikinci kez koşuldu: her aşamada 0 satır (idempotent).
- Dosya 4 KB büyüdü (bir sayfa, WAL checkpoint); satır sayıları sabit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 07:28:20 +03:00
bilalgursen
972268995e fix(veri): KURUM_DUZELT arşiv tablosunu da tarar (BACKLOG #21)
Dün Aşama D yalnız `programs`'a uygulanmıştı; `programs_arsiv`'de aynı yanlış
etiket duruyordu (31 ULUSLARARASI BALKAN + 30 ULUSLARARASI SARAYBOSNA
`unitur='DEVLET'`, Balkan'ın 24 satırında il Saraybosna). Kapanan programlar
arşive `programs`'tan olduğu gibi taşındığı için etiket oraya da yazılmış.

- `unitur-onar.ts` Aşama D iki tabloyu da tarar (`programs_arsiv` varsa).
  Dokunulan kolon yalnız `unitur` ve `il`; A/B/C aşamaları `programs`'ta kalır.
- `veri-kalite.ts` kontrol 13 ve 14 arşivi de tarar. Genişletme olmadan iki
  tablo ayrışabilir ve denetim bunu görmez.
- Yanlış etiket duran DB'de iki kontrol de KALDI veriyor (çıkış kodu 1):
  `baz ad başına tek unitur — … BALKAN/YURTDISI KAMU,DEVLET/81 ; … SARAYBOSNA/68`
  `DEVLET etiketi Türkiye ili ile destekli — … /SARAYBOSNA - BOSNA - HERSEK/31 ; /30`

Kullanıcıya bugün yansımıyor: `src/` tarafında `programs_arsiv`'i okuyan SQL
yok. Düzeltme tablo ileride okunduğunda sızıntının geri gelmemesi içindir.

Dünkü veri commit'inin (1df86cf) gövdesindeki rakam düzeltmesi: "/universiteler
hub'ında Devlet listesi 170 → 166" YANLIŞTIR. 170/166 ham `programs.universite`
ad sayısıdır, hub satırı değil; `uniAdiNormalize` parantezli eki attığı için
Kıbrıs Amerikan'ın iki yazımı tek slug. Hub'daki doğru değişim 132 → 129 kurum
(3 kurum). Kaynak: `12-kod-denetimi.md` O1, dalın kendi build HTML'i.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 07:26:56 +03:00
bilalgursen
0e689e60bb fix(katalog): "Tür" kartı ham DB değerini okunur Türkçeyle gösterir
Denetim O3: P2 üç kurumun `unitur`'ünü düzeltince (DEVLET → KKTC /
YURTDISI KAMU) ve P3 "Tür" kartını yalnız URAP dışındaki 31 kurumda
bırakınca, `trBaslikDuzeni`nin tr-TR küçültmesi ("I" → "ı") ekrana
Türkçede olmayan kelimeler bastı: "YURTDISI KAMU" → "Yurtdısı Kamu"
(6 sayfa), "KKTC" → "Kktc" (16 sayfa). Dün bu sayfalar "Devlet"
diyordu; yani kullanıcıya görünen bir gerileme.

Karta özel bir görüntüleme haritası (UNITUR_ETIKET) eklendi:
Devlet / Vakıf / Vakıf MYO / KKTC / Yurt dışı (kamu) / Yurt dışı (vakıf).
Haritada olmayan bir değer için mevcut davranış (`trBaslikDuzeni`) yedek
kalır. `src/lib/slug.ts`'teki `trBaslikDuzeni`ye dokunulmadı — il
adlarında da kullanılıyor ve oradaki davranışı doğru.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:49:15 +03:00
bilalgursen
58f4dc221b fix(olcum): huninin paydası ile payı aynı birimde olsun
Denetim Y1: `sihirbaz_adim{1}` `olayBirKez` ile oturum başına tekildi,
`{2}`/`{3}` ise her ileri geçişte atılıyor. Sihirbazı ikinci kez açan
öğrencide (ör. /sonuc'ta "Tercihlerini güncelle") payda 1'de kalıp pay 2
olduğu için 1→2 geçiş oranı %200 görünüyordu. `olayBirKez` → `olay`;
mount zaten "sihirbaz bir kez açıldı"ya eşit, 1→2→1→2 gezinmesi unmount
etmediği için tekrar düşmez.

Kodun kendi yazılı kuralı bunu zaten söylüyordu (lib/analitik.ts:22-24,
`liste_uretim_basladi`): aynı oturumdaki ikinci deneme de sayılmalı,
yoksa payda başarıdan küçük kalır.

KABUL KRİTERİ DÜZELTMESİ: CEO kararı P4/(1) "sihirbaz açılışında tam bir
kez düşer, 1→2→1→2 gidip gelmede tekrar düşmez" diyordu. Denetim bu
kriterin mevcut olay sözleşmesiyle çeliştiğini gösterdi; geçerli kriter
artık "her sihirbaz AÇILIŞINDA bir kez düşer" — oturum içindeki ikinci
açılış da sayılır. 1→2→1→2 gezinmesinde tekrar düşmeme şartı korunuyor.

SERİ KIRILMASI (ikinci, daha önce yazılmamıştı): `paket_goruntulendi`
allowlist'i 3'ten 13 değere çıktığı için tekilleştirme anahtarı çeşitlendi
— olayın oturum başına atılabilme tavanı 4'ten 14'e çıktı ve "diger"
kovası artık yalnız gerçekten bilinmeyen yüzeyleri taşıyor. Bu tarihten
önceki/sonraki toplamlar karşılaştırılamaz. Kod değişmedi, yalnız dosyaya
not düşüldü.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:48:24 +03:00
bilalgursen
1df86cfa15 fix(veri): yokatlas.db — 126 satır unitur/il düzeltmesi (100 + 26)
`npx tsx scripts/unitur-onar.ts` çıktısı:
  Aşama D (yanlış kurum alanı): unitur 100 satır, il 26 satır
  Aşama A/B/C: 0 satır · Kalan NULL unitur: 0

  KIBRIS AMERİKAN ÜNİVERSİTESİ                    DEVLET → KKTC          36
  KIBRIS AMERİKAN ÜNİVERSİTESİ (KKTC-LEFKOŞA)     DEVLET → KKTC           6
  ULUSLARARASI BALKAN ÜNİVERSİTESİ                DEVLET → YURTDISI KAMU 34
  ULUSLARARASI SARAYBOSNA ÜNİVERSİTESİ            DEVLET → YURTDISI KAMU 24
  ULUSLARARASI BALKAN ÜNİVERSİTESİ  il: SARAYBOSNA - BOSNA - HERSEK
                                        → ÜSKÜP-MAKEDONYA              26

unitur dağılımı: DEVLET 12142→12042, KKTC 1145→1187,
YURTDISI KAMU 99→157. Toplam satır sabit.

FARK RAPORU (öncesi `.backup` kopyasıyla ATTACH + kolon kolon kıyas):
  programs        önce 21493 → sonra 21493
  programs_arsiv  önce  3735 → sonra  3735   (unitur/il değişen: 0)
  netler          önce 62975 → sonra 62975
  veri_meta       önce    37 → sonra    37
  programs, 45 kolon tarandı — DEĞİŞEN KOLON: unitur=100, il=26
  2021-2026 yıl kolonları (34 kolon: sıra/puan/kontenjan/yerleşen +
  2025 ek kontenjanları) değişen satır: 0

`pnpm veri-kalite --yil 2026 --db data/yokatlas.db --onceki <öncesi>`
bağımsız olarak doğruladı:
  GEÇTİ  önceki DB: satır kaybı — 0
  GEÇTİ  önceki DB: geçmiş yıllar korunmuş — 20 kolonda değişen: 0
  Sonuç: 0 ZORUNLU kontrol kaldı, 3 uyarı (üçü de düzeltme öncesinde de
  vardı: il boş 110, kimlik ATLANDI, yetim netler 2066)

Havuz etkisi (db.ts:79-82 + efektif sırası dolu satırlar):
  devlet filtresi 27 → 0 · vakıf filtresi 0 → 27
/universiteler hub'ında Devlet listesi 170 → 166 kurum.

Geri alma: bu commit'i revert etmek yeter; veri-2025-son etiketi duruyor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:24:58 +03:00
bilalgursen
b66c720b32 fix(veri): yanlış DEVLET etiketi kalıcı onarım + baz ad çelişki denetimi
3 kurum (Kıbrıs Amerikan, Uluslararası Balkan, Uluslararası Saraybosna)
kaynak CSV'den `unitur='DEVLET'` geliyordu. `db.ts:79-82` filtreleri
yüzünden "devlet üniversitesi istiyorum" diyen öğrencinin aday havuzuna
27 KKTC/yurt dışı programı sızıyor, "vakıf" diyende aynı 27'si eksik
kalıyordu. Kullanıcının fark edemeyeceği bir doğruluk hatasıydı.

unitur-onar.ts — Aşama D (KURUM_DUZELT):
  A/B/C yalnız `unitur IS NULL` satırlara dokunuyordu; bu satırlar NULL
  değil, DOLU ve YANLIŞ. D koşulsuz çalışır ve Aşama A'dan ÖNCE koşar ki
  yanlış değer başka satırlara kopyalanmasın. İdempotent (2. koşu: 0/0).
  Her düzeltmenin kanıtı kurumun YÖK Atlas'taki kendi parantezli ikinci
  yazımı: "(ÜSKÜP-MAKEDONYA)" → YURTDISI KAMU, "(KKTC-LEFKOŞA)" → KKTC.
  refresh.ts:519 `uniturSec` DB'deki değeri kopyaladığı için düzeltme
  buraya yazılınca her tazelemede kalıcı olur.

veri-kalite.ts — iki yeni ZORUNLU kontrol (dosyanın sonuna):
  13. "baz ad başına tek unitur" — kök neden buydu: unitur-onar.ts'in
      eski çelişki koruması GROUP BY universite (TAM ad) ile çalıştığı
      için aynı kurumun iki yazımı arasındaki DEVLET↔YURTDISI KAMU
      çelişkisini hiç görmüyordu.
  14. "DEVLET etiketi Türkiye ili ile destekli" — 13'ün kör noktası:
      Kıbrıs Amerikan'ın İKİ yazımı da yanlış etiketli olduğu için
      ortada çelişki yok. 13 tek başına 100 satırın yalnız 58'ini
      koruyordu. Şartnamenin ötesinde, gerekçesi raporun §4'ünde.

Doğrulama: düzeltme öncesi DB'de iki kontrol de KALDI (çıkış kodu 1);
sonrasında 0 ZORUNLU kaldı, 3 uyarı (üçü de önceden vardı). Tek satır
bilerek bozulduğunda ikisi de yakaladı. tsc + eslint temiz.

Veri (126 satır) ayrı commit'te. Rapor: docs/gece-vardiyasi/2026-09-22/
09-p2-unitur.md

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 00:24:42 +03:00
bilalgursen
b63c7e8c87 docs(gece-vardiyasi): P3 URAP paketi raporu
Kabul kriterleri 6/6, atıf şartının karşılandığı yerler, şartnameden
4 sapma ve P2 ile merge kesişmesi.

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