Eski revizyon kutusu kaldırıldı: serbest metin modele gidiyor, sıra ve havuz
koddan belirlendiği için "ilk 5 X ilinden olsun" gibi isteklerin karşılığı
yoktu. Danışman artık belirsiz isteği soru formuyla (soru_sor → shadcn
Questionnaire, proje diline çevrildi) netleştirir, sonra liste_revize ile
yapısal kural verir: il/alan/tip farkı, "ilk N" ölçütü, çıkar/ekle,
iskelet (lib/revizyon-kurali.ts). Kurallar havuz, seçim ve sırada koddan
uygulanır; "ilk N" ölçütünün ili/alanı süzgece kendiliğinden eklenir.
- chat_messages.meta sütunu (göç 0006): form, form cevabı ve revizyon sonucu
kayıttan geri kurulur; form cevabı kredi harcamaz.
- Akış korumaları: form açılınca başka araç yok, revizyonda zaman aşımı uzar,
"yeniden kurdum" beyanı araçsızsa düzeltme notu.
- /listem "Revize et" sohbeti odaklar; başarılı revizyonda liste yenilenir.
- /dev/sohbet senaryosu, DESIGN.md §4.20 notu ve §4.33.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sonner/vaul yerine kendi bildirim yığını ve alt sayfa; çip grubu, kart
destesi, kaydırma eylemi, yazı dönüşümü, bölme tutamacı; landing'e program
duvarı, süzülen haplar ve veri akışı; yaylar tek dosyada (lib/hareket.ts).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- SecimHaplari: tema seçici (kapsül) ve puan türü çipleri (hero + CTA formu);
seçili vurgu layoutId ile seçenekten seçeneğe kayar.
- SayiRulo: değişen sayılar (listem rozeti, çekmece ve durum satırı sayacı,
kredi hapları, dilim tablosu sayacı, giriş yeniden gönder sayacı, kaydet
bandı, üst şerit geri sayımı) rulo gibi döner; @number-flow/react kaldırıldı.
- DESIGN.md §4.21–4.22, components.json @uiarc kaydı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Updated the app.db file to reflect recent changes in the application state.
- Modified BACKLOG.md to include new entries regarding the removal of certain wizard steps, adjustments to priority chips, and the introduction of special quota conditions for candidates.
- Added details on the decision to link priority chips to data sources and clarified the implications for user experience and data handling.
- Deleted the netler API route and the associated program-netleri component as they are no longer needed in the application. This cleanup helps streamline the codebase and improve maintainability.
Model, oturum ve kredi harcamadan sohbet arayüzünü denemek için yalnız
geliştirmede açılan sayfa (üretimde 404, noindex). Beş hazır senaryo: tek
araç, art arda araçlar, düzeltme notu, akış hatası, uzun geçmiş.
- SohbetClient'a denemeTransport prop'u: verilirse /api/soru yerine
önceden yazılmış akış oynar; üretim yüzeyleri bunu vermez.
- @shadcn/helpers/ai-sdk sahte taşıyıcı için eklendi; dinamik import
NODE_ENV dalında kaldığından üretim paketine girmez.
- cagri.ts: kullanılmayan OpenAI tip import'u kaldırıldı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- TemaSaglayici (next-themes) + alt bilgide TemaSecici
- globals.css: .dark bloğunda palet token'ları çevrilir; bileşenlere
dark: sınıfı yazılmaz
- yüzeyler bg-white → bg-card, koyu haplar text-slate-50, SVG'lerde
sabit renk yerine değişken
- DESIGN.md §2.3 + tasarim-denetim kuralları (yuzey-beyaz,
koyu-hap-beyaz-yazi, dark-sinif), AGENTS.md karanlık mod bölümü
- docs: koyu tema denetimi raporu
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
main çalışma ağacındaki aynı 6 satırlık değişiklik fast-forward merge'ü
engelliyordu; içerik birebir buraya alındı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Kök neden 3 (04-eval-sonuclari): 888 gerekçenin 7'si başka programa aitti
(ör. Erzurum'daki programa "sanayi şehri Konya'da").
- liste-denetim.ts: yerCeliskisi — veri tabanındaki il ve üniversite
adlarından sözlük. Bulunma ekiyle ("Konya'da") anılan il programın ili
değilse, ya da anılan il ne programın ne adayın seçtiği/oturduğu ilse,
ya da anılan üniversite satırınki değilse çelişki. "İzmir'e yakın"
(adayın ili), üniversite adındaki il, "Kıbrıs'ta" (KKTC şehirleri),
İTÜ/ODTÜ gibi kısaltmalar ve bölge/ilçe adları ("Ege", "Çankaya") ihlal
değil.
- rapor.ts: çelişkili gerekçe koddan şablona düşer (ek model çağrısı yok).
- /meraklisina şeması ve 4. bölüm anlatımı (AGENTS.md senkronu): yapay
zekânın seçimi ve gerekçeleri kodla denetlenir; eksik satır havuzdan
tamamlanır, vaat içeren ya da başka programı anlatan gerekçenin yerine
standart açıklama yazılır; yapay zekâ zamanında yanıt vermezse liste aynı
havuzdan kurallarla kurulur. Havuz dışına çıkamama kuralı değişmedi. Bu
metin önceki iki commit'in (3128b01, 8462894) davranışını da kapsar.
Kanıt: taban koşusunun 888 gerekçesi üzerinde çevrimdışı — 7 gerçek
çelişkinin 7'si yakalandı, yanlış alarm 0 (eval'in 2 yanlış alarmı dahil).
Canlı koşular: il çelişkisi 7 → 0 (iki koşuda 1 ve 0 gerekçe şablona düştü).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Kod her zaman önce alanı, sonra ili gevşetiyordu (il korunur, aynı ildeki
alan dışı programlarla dolar); fonksiyon yorumu, /meraklisina şeması,
4. bölüm anlatımı ve aria-label ise "önce il, sonra alan" diyordu.
KARARLAR.md'de sıra için karar yok; davranış DEĞİŞMEDİ, yalnız anlatım
koda eşitlendi (AGENTS.md şema senkronu). Hangi sıranın doğru olması
gerektiği raporda [BİLAL] sorusu.
Kanıt: p01 (Eskişehir), p06 (İzmir), a15 (Kilis) — il korunur, alan
gevşer; 40 profilde bu commit öncesi/sonrası havuz birebir aynı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Havuz yalnız taban sırasına bakıyordu; hayal dilimi "adayın üstünde
kapanan her şey" olduğu için barajın hemen dışındaki adaya tam da
yazamayacağı bölümler düşüyordu (52.000 sıralı adaya tıp, 310.000'e
mühendislik). Kaynak uydurma tablo değil: program_ozellik.min_basari_sirasi
(YÖK Atlas API, 2026 kılavuzu; katalogdaki "baraj … sıra" satırı ve
danışmanın tercihBaraji alanı da aynı kolonu okur). db.havuzAdaylari artık
min_basari_sirasi < adayın sırası olan programları SQL'de çıkarır; barajı
boş program süzülmez.
Kanıt (havuzdaki baraj dışı program, önce → sonra): a04 4 → 0, a06 11 → 0,
a08 11 → 0, p03 17 → 0; 40 profilin hepsinde 0. a07 (SÖZ 310.000, eğitim):
alandaki programların tamamı barajlı olduğu için alan artık gerçekten
gevşiyor (24 hayal → 5/13/6).
Bilinen sınır: kolon bazı barajlı bölümlerde boş (ör. 16 tıp, 11 hukuk
satırı) — veri işi, raporda.
/meraklisina şeması (aday havuzu düğümü), 4. bölüm anlatımı, aria-label
ve figcaption aynı kuralla güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
YÖK Atlas özel kontenjanları ayrı program satırı olarak veriyor; adında
"(KKTC Uyruklu)" ya da "(M.T.O.K.)" geçen, taban sırası olan 118 satır
herkesin aday havuzuna giriyordu (p02'de 54 programın 7'si). Sihirbaz
uyruk ya da lise türü sormadığı için bu satırlar herkese önerilemez.
Kural tek yerde ve export'lu: rapor-havuzu.ts → ozelKontenjanSatiriMi().
Kanıt (havuzdaki özel kontenjan satırı, önce → sonra): p02 7 → 0,
p14 6 → 0, p05 4 → 0, p09 3 → 0, a09 3 → 0; 40 profilin hepsinde 0.
Gevşetme basamağı ve liste uzunluğu hiçbir profilde değişmedi.
/meraklisina şeması (aday havuzu düğümü), 4. bölüm anlatımı, aria-label
ve figcaption aynı kuralla güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
İl gevşeyince havuz baştan, ilsiz kuruluyordu; seçili ildeki programlar
sıraya en yakın 20'ye giremezse listeden tamamen düşüyordu (Kayseri 1/60,
Trabzon 0/25) — prompt ise "seçili illere öncelik ver" diyordu. Artık
gevşetmenin her basamağında seçime uyan programlar önce alınır, boşluk
sıraya en yakın diğer programlarla dolar. Aynı kural alan ve danışman
profili gevşediğinde de geçerli (tek yardımcı: oncelikliBirlestir). Kırpma
sonrası havuz yine dilim sırasında, dilim içinde yakından uzağa dizilir.
Kanıt (havuzda seçili ildeki program, önce → sonra): p12 Kayseri 1 → 9,
p13 Trabzon 0 → 4, b06 Düzce 2 → 10, a09 Konya 2 → 3. Gevşetme basamağı ve
liste uzunluğu hiçbir profilde değişmedi.
/meraklisina şeması, 4. bölüm anlatımı ve aria-label aynı kuralla
güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Sunucu, istemci kopsa da cevabı üretip kaydeder ve kredi harcanmış kalır
(bilerek: kopmada iade, cevabı okuyup bağlantıyı kesene bedava cevap olurdu).
İstemci metni buna göre düzeltildi; görsel değişiklik yok.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
sohbetGecmisiGetir yeniden eskiye sıralayıp 100 alır, sonra çevirir; aynı
saniyedeki soru-cevap sırası rowid ile korunur. GET /api/soru da aynı
sorguyu kullanır (iki kopya vardı).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Sunucu: elle yazılmış araç döngüsü yerine streamText + UI mesaj akışı
(src/lib/ai/sohbet-akisi.ts). Kredi düşme/iade, bedelsiz profil onayı,
mesaj kaydı ve Jev çıktı denetimi aynı davranışla korunur.
- İstemci: sohbet-client useChat kullanır; araç çalışırken balonun altında
durum satırı görünür. Kayıtlı geçmiş düz metin kalır.
- Sağlayıcı aynı tek kapı (AI_BASE_URL / AI_API_KEY), openai-compatible.
- Yeni araçlar: bolum_ozeti, il_ozeti, rehber_ara, tercih_takvimi.
- Kalkan davranış: sağlayıcı araç çağrısını reddedince düz sohbete düşme.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Danışman: program_netleri, program_karsilastir ve bolum_istihdam araçları;
program_ara'ya devlet/vakıf, öğretim türü ve sıralama parametreleri;
program_detay'a trend cümlesi; bozuk araç argümanı modele hata döner.
- TÜİK Yükseköğretim İstihdam Göstergeleri 2025: bölüm bazında istihdam
oranı, ilk işi bulma süresi ve kazanç grubu (src/lib/bolum-istihdam.ts,
üretici scripts/tuik-istihdam-uret.py, kaynak Excel'ler data/kaynak/).
- Bölüm sayfasında "Mezun istihdamı" ayrıntı satırı ve alt sayfası;
AkademikAyrinti başlık/ikon alır.
- Jev (TypeSafe AI) ile danışman cevabında garanti/olasılık dili denetimi;
ihlalde cevabın sonuna düzeltme notu. Anahtar yoksa denetim atlanır.
- /gizlilik: TypeSafe AI (ABD) sağlayıcı satırı. KARARLAR.md: 5 Ekim kaydı.
- Üç katalog dosyasındaki bg-white → bg-card değişiklikleri de bu commit'te.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Kareler önce logonun üç karesi gibi belirir, sonra yerlerine büyür;
içerik satır satır netleşir. Hareketi azalt'ta yalnız kısa belirme.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Bilal kararı (26 Eyl 2026): 'kaydedeyim mi?' sorusuna kısa evet/hayır
cevabı bedelsiz. Sunucu son danışman mesajında onay ibaresini arar,
mesaj ≤40 karakter ve evet/hayır kalıbıyla başlıyorsa kredi düşmez,
ledger'a yazılmaz, iade yolu atlanır; X-Kredi-Dusuldu başlığıyla istemci
bakiyeyi buna göre günceller. Gerçek soru içeren 'evet ama …' bedava geçmez.
- Bilal kararı: model Türkiye'de barındırılacak. client.ts baseURL ve
anahtar AI_BASE_URL/AI_API_KEY'den okunur (OPENROUTER_* geriye uyumlu);
sağlayıcı değişince kod değil .env değişir, /gizlilik aynı commit'te.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- db.ts OzellikSuzgeci (dil, yalnız örgün, yalnız burslu, ücret üst sınırı)
program_ozellik alt sorgusuyla; tablo yoksa süzgeç yok.
- rapor-havuzu: profilSuzgeci (ev ili + km → il listesi; sihirbazda il
seçiliyse km uygulanmaz); havuz 24'ün altına düşerse gevşetme sırası
profil → il → kategori. rapor.ts prompt'a 'danışmana söylediği tercihler'
ve profil gevşetme notu; rapor-actions profili okuyup geçirir.
- /meraklisina şeması (huni-semasi SEMA + aria-label + figcaption) ve 4.
bölüm metni yeni adım ve gevşetme sırasıyla eşitlendi (AGENTS.md kuralı).
- /api/soru: profil kaydı öncesi 'kaydedeyim mi?' onayı (PROFIL_ONAY_SOR).
- Gizlilik metni kodla eşitlendi: OpenRouter→DeepSeek (Anthropic değil),
profil satırı, amaç+hukuki sebep, saklama süreleri, md. 11 hakları,
18 yaş altı notu; unvan/adres ve aktarım dayanağı TODO. Giriş kartı:
koşullar 'kabul', gizlilik 'okudum'. Sohbet girişine kişisel bilgi uyarısı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Üniversite sayfasındaki 'Örgün öğrenci' karesine '%54 kadın · %46 erkek'
satırı eklendi; kaynak notu üniversite düzeyi olduğunu ve bölüm bazında
veri olmadığını söyler. Filtre ya da öncelik değil, bilgi satırı.
Üretim betiği E/K sütunlarını okur; kadinYuzdesi() yardımcı eklendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Telefonda dik kutu haritadan uzun olunca ülke haritasının altı kesiliyor,
şehir işareti metnin arkasına kayıyordu (Lefkoşa, 375 px). Kutu haritadan
küçükse harita içinde kalır, büyükse harita kutunun içinde kalır.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- /universiteler/devlet ve /universiteler/vakif: şehir sayfası iskeleti,
haritada bu türden üniversitesi olan her il turuncu (yakınlaşma yok), üç
özet kartı, şehir çipleri (sayfa içi çapa), şehir şehir §4.15 satırları,
öteki türe geçiş hapı; metadata + sitemap.
- TurCipi tek kaynak: devlet/vakıf çipi tür sayfasına link (sonuç, listem,
tadımlık, bölüm, şehir/tür satırları); üniversite sayfası tür hapı ve
/universiteler başlıkları da link. UniSatirlari ortak dosyada: ad, tür ve
il ayrı linkler.
- Kompakt profilli satır (DESIGN.md §10.9): iri kupa kutusu + text-3xl/4xl
sıra, text-xl/2xl başlık, 48 px buton; telefonda alt alta, lg'de tek satır.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- UniSatirlari: kenarlıklı liste, satırın tamamı üniversite sayfasına link,
SATIR_AD_DUZ ad (hover mavi, §2.1 istisnası), SATIR_META içinde tür çipi +
program sayısı (+ ana il farklıysa il), sağda kayan ok, active:scale-[0.99].
İki sütunlu kompakt UniLinkleri /universiteler dizininde kaldı.
- DESIGN.md §4.17 güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Özet ızgarası relative isolate; konum haritası absolute katman (-inset-x-4
-inset-y-8) olarak ızgaranın tamamını kaplar, üçüncü sütun yalnız yer tutar.
lg'de sağdan sola, telefonda üst satırdan aşağı uzun rampalı mask.
- Yakınlaşma ease-out yerine spring bounce 0 (0,6 s gecikme, 1,6 s): sert
başlangıç gitti. Şehir yüzeyi mask'ları da uzatıldı.
- DESIGN.md §4.17 güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Izgara 72 → 56 sütun, serpinti kaldırıldı (Bilal: "piksel detaylarını azalt").
- Harita `doldur` (slice) ile SehirYuzeyi kartını kaplar, metin üstünde; iki
katlı mask ile hiçbir kenarda kesik kare kalmaz (Bilal: "canvas net bir
şekilde kesiliyor"). Telefonda altta, lg'de sağ yarıda belirir.
- Yakınlaşma kutusu kabın oranında kurulur, il `odakHiza` ile kabın istenen
noktasına gelir (şehir sayfası: lg sağ orta, telefon alt orta; konum kartı orta).
- usePixelHeat meet/slice + ortalama ofsetini hesaba katar.
- Üniversite konum kartı: kartı doldurur, radyal erime.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- viewBox 0,7 s gecikmeyle 1,1 s güçlü ease-out ile ilin çevresindeki kutuya
kayar (en çok 2,4 kat; ülke haritasında şehir işaretine 1,8 kat); kutu SVG
oranında ve harita dışına taşmaz. Hareketi azalt: doğrudan odak.
- usePixelHeat viewBox'ı her taramada canlı okur; yakınlaşmış haritada da
imleç doğru kareyi ısıtır (hero davranışı değişmez).
- DESIGN.md §4.17 yakınlaşma notu.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- scripts/il-izgara-uret.ts → src/lib/il-izgara-verisi.ts: 81 il ve 7 ülke
kontürü hero'nun dot-matrix ızgarasına (72×31) rasterize; küçük iller 2×2 garanti.
- SehirPikselHaritasi: iri kareler, altı opaklık, kıyı serpintisi, usePixelHeat
ısı fırçası; bulunulan il iri turuncu karelerle sırayla belirir (kt-piksel-belir)
ve nabız atar; KKTC/yurt dışında şehir merkezinde 2×2 iri kare.
- Şehir sayfası başlığı beyaz piksel dokulu yüzeyde (SehirYuzeyi), harita sağda/altta.
- UniversiteKonumHaritasi düz SVG yerine aynı piksel haritayı kullanır.
- DESIGN.md §4.12/§4.17/§10.8 güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- ilSayfaHref: üniversite sayfası il hapı, /universiteler listesi, bölüm /
sonuç / listem / tadımlık satırlarındaki il metası şehir sayfasına gider.
- Şehir kümeleri tüm (üniversite, il) çiftlerinden: DB'deki her il değerinin
sayfası var (ODTÜ Ankara + KKTC); dev'de eski globalThis önbelleğine dayanıklı.
- PikselZemin ton="acik", CtaBandi/CtaSiraForm ton="beyaz": /universiteler
altı ve /meraklisina kapanışı beyaz, diğer bantlar mavi (dönüşümlü).
- ilUlkeHaritasi: il değerinden ülke haritası + şehir konumu.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Veri: getAllIller/getIlBySlug (üniversite en çok programının olduğu ile
sayılır; ili boş olan hiçbir şehre girmez; tireli yurt dışı adlar baş harfli).
- /universiteler: "Şehre göre" çip satırı (2+ üniversiteli 28 şehir) +
"Tüm şehirler" A–Z üç sütunlu liste (#tum-sehirler).
- /universiteler/[il]: 92 statik şehir sayfası — katalog detay düzeni, il ve
üniversite sayısı hapları, kompakt sıra satırı, devlet/vakıf/KKTC-yurt dışı
öbekleri, diğer şehir çipleri, CTA bandı; metadata + breadcrumb JSON-LD.
- SehirCipleri: sihirbaz il çipiyle aynı kalıp, aktif şehir mavi dolu.
- Sitemap'e şehir sayfaları eklendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- CtaSiraForm kompakt: kayıtlı sıralamalı hâl CtaBandi kompakt kabuğuyla
birebir (bg-primary, beyaz yazı, PikselZemin); form hâli beyaz kalır.
İç boşluk ve saydam kenarlıkla iki hâlin kutusu aynı (CLS yok); telefondaki
süs piksel ayracı kaldırıldı.
- /sonuc "24 tercihlik listen hazır": beyaz kart yerine CtaBandi (seed 23),
buton sonda ArrowRight, telefonda tam genişlik.
- DESIGN.md §10.8: CtaBandi kullanım yerleri ve "piksel konmaz" listesi güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Site metni (rapor 31 §4.3):
- "23.000+ lisans programı" → DB sayımıyla "21.000+ lisans ve önlisans"
(12.239 + 9.254); sayı tek kaynaktan (veri-kapsami.ts).
- Hero "48 saatlik panikle seçme" → "Tercih listeni gerçek veriyle kur,
panikle değil"; "Yapay zekâ veriyi tarasın" → resmî veri taransın, YZ
yalnızca havuzdan seçer; "boşta kalmanın en yaygın sebebi" ve "ihtimalini
en aza indiririz" iddiaları kaldırıldı; paket sayfasında "insan danışmanın
işini / aynı işi" dili bırakıldı.
Rehber (rapor 32 §4, 06, 07, 12):
- yerlesemedim: "ekte tabanlar gevşer" hatası düzeltildi (dolu programda
eşik ilk turun en küçük puanı, Ek Yerleştirme Kılavuzu 1.2); ek listeye
yerleşince OBP'nin yarıya indiği uyarısı ve kaynaklar eklendi.
- kyk-burs-mu-kredi-mi: "bir öğretim yılı kaybı" maddesi yorumsuz, "KYGM'ye
sor"; kısmi zamanlı çalışma (2547 md.46), kamu/özel burs ayrımı ve TEV'in
2026 duyurusu eklendi.
- yatay-gecis-cap-yandal: şemada Ek Madde-1 ve ÇAP kutuları yeşilden sarıya
(hak ≠ kabul); ÇAP 70 + ilk %20, yandal 65 eşikleri; kontenjan %30/90;
28 Şubat 2026 "baraj 90" yalnızca açık/uzaktan → örgün; kaynaklar eklendi.
- obp: meslek lisesi ek puanı bölümü (OBP × 0,06, Tablo 6C, lisansta yok,
yarıya inme, sınavsız geçiş yok). ozel-kosullu: "sınavsız" ifadesi
M.T.O.K. ve ek puanla düzeltildi.
Danışman sohbeti (rapor 06, 40 §3.2): umutsuzluk / kendine zarar dilinde
tercih konusunu bırakıp yardım almaya yönlendiren güvenlik kuralı; bu dil
artık "tercih dışı" diye reddedilmiyor.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bilal (24 Eyl 2026): ana sayfa CTA'sında doku hiç görünmüyordu, bazı
kartlarda çok azdı; sonra "çok fazla piksel, küçük olanlar hiç olmasın"
ve "/sonuc'taki kartın arkasına da piksel koymuşsun; pikseller CTA'larda
olacak sadece".
- Kök neden: PixelMasonry sabit 420×120 çizimi kaplayacak şekilde
ölçekleniyordu; yüksek kartlarda görünen kısım boş banda düşüyordu.
Artık kabın gerçek ölçüsüne göre üretiliyor (ResizeObserver), yalnız
kenar çerçevesinde, orta boş; `haric` verilen öğenin (24'lük piksel
tablosu) çevresi her genişlikte boş. Sunucuda boş, ölçülünce belirir.
- Küçük (tek hücre) kare yok: 4×4 makro hücrede 2–4 hücrelik kareler,
iri olan seyrek ve silik. Ölçüm: kapanış kartı 1280 px'te 58 kare
(tabloya binen 0), 375 px'te 27 kare.
- Beyaz içerik kartlarından zemin geri alındı (tadımlık, /listem üretim
ve kilit kartları, boş durum, sıralama-yok, meraklısına, paket kartları,
kaydet bandı, katalog üstü kompakt satır, /sonuc "listen hazır").
Kalanlar: CtaBandi, PikselCtaYuzeyi, arama penceresi kartı.
PikselZemin'in açık tonu kaldırıldı. DESIGN.md §10.8 güncellendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bilal'in isteği (24 Eyl 2026): piksel arka planı her CTA benzeri kısmın
arkasında, büyüklü küçüklü masonry. Tek kaynak PikselZemin (açık kartta
silik mavi, koyu/mavi yüzeyde beyaz); CtaBandi ve PikselCtaYuzeyi de
onu kullanır. Eklenen yüzeyler: /sonuc "listen hazır" kartı, /listem
dört üretim kartı + boş durum + kilit kartı, tadımlık kartı, sıralama-yok
sayfası, meraklısına kapanış kartı, ana sayfa ve /paket ana paket kartı,
kaydet bandı, katalog üstü kompakt satır, arama penceresi kartı.
Kapsam dışı (form, durum kartı, modal düğmesi, 404) DESIGN.md §10.8'de.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- 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>
- 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>
- 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>
- 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>
- /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>
- 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>