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>
- 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>
- 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>
- 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>
- 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>
- 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>
Ü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>
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>
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>
(a) `sihirbaz_adim{adim:1}` artık sihirbaz modalı açıldığında atılıyor.
Bugüne kadar olay yalnız `adimaGit`in ileri geçişinde atılıyordu; modal
zaten 1. adımda açıldığı için 1. adım hiç "geçilmiyor", dolayısıyla hiç
sayılmıyordu ve huninin paydası `sira_girildi`den türetilmek zorunda
kalıyordu. Mount effect'i + `olayBirKez` ile tam bir kez düşüyor:
1→2→1→2 gezinmesi bileşeni unmount etmediği için tekrar tetiklemiyor,
sessionStorage tekilleştirmesi de aynı sekmede ikinci açılışı sayıyor.
SERİ KIRILMASI: bu değişikliğin canlıya çıktığı tarihten ÖNCEKİ
`sihirbaz_adim` serisinin paydası farklıdır — o dönemde `adim:1` hiç
atılmadı, seri yalnız 2 ve 3'ten oluşuyor. Öncesi ve sonrası
karşılaştırılamaz; huni okumalarında kırılma tarihi dipnot edilmeli.
Aynı desen `program_eklendi` için 21 Eylül'de uygulanmıştı.
(b) Kaynaksız 10 `/paket` linkine tekil `?kaynak=` eklendi; sitedeki 14
`/paket` linkinin 14'ünde artık kaynak var. Değerler mevcut şemayla
(`kilit`, `kredi_bitti`, `nav`) aynı dilde: fiyat_paket, fiyat_kredi,
kosullar, tercih_degisti, tercih_degisti_yetersiz, danisman_rozet,
danisman_kredi_bitti, danisman_kredi_az, odeme_geri, odeme_hata.
`paket-gorunum-olayi.tsx`'teki `KAYNAKLAR` allowlist'i de genişletildi:
listede olmayan her değer `"diger"`e düştüğü için, genişletilmeseydi 10
yeni kaynağın tamamı tek kovada toplanır ve ölçüm deliği kapanmazdı
(bağımlılık kapanışı — dosya şartnamenin listesinde yoktu, raporda
sapma olarak yazıldı).
Görsel değişiklik yok; yeni olay adı ya da yeni ölçüm yüzeyi eklenmedi.
Doğrulama: `next typegen` + `tsc --noEmit` + `lint` temiz.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
/sonuc program tablosunda risk yalnız renkli bir noktaydı (aria-hidden,
görünür metin yok); /listem'de etiket vardı ama sm altında sr-only idi.
Trafiğin büyük kısmı mobil olduğu için gerçek kullanıcı yalnız rengi
görüyordu. AGENTS.md: "kırmızı/sarı/yeşil her zaman metin etiketiyle
birlikte, renk tek başına anlam taşımaz."
- program-tablosu: nokta + RISK_ETIKET[risk] kalıbı rapor-listesi'nden
birebir kopyalandı; boş kalan ilk sütun başlığı "Risk" oldu.
- rapor-listesi: risk etiketindeki sr-only sm:not-sr-only kaldırıldı.
Yeni bileşen/sabit/olay yok; etiket metninin tek kaynağı src/lib/risk.ts
içindeki RISK_ETIKET ve o dosyaya dokunulmadı.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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>
Arşivlenen slug'lar 200 + 'sayfa yok' dönüyordu (soft 404). Eşlemenin tek kaynağı
src/lib/kapanan-sluglar.ts; alt yollar (/sayfa/N) hedefin köküne gider; zincir ya da
çift kaynak build'i durdurur. Yıllık güncelleme kılavuzuna 5b adımı eklendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Added a new router and middleware for handling www to apex domain redirection, ensuring that Let's Encrypt certificates are obtained for both domains. Updated the docker-compose.yml file to include necessary rules and middleware for proper redirection and TLS handling.
Also, updated the CEO agent description to remove redundant details and clarified the QA engineer's responsibilities regarding testing critical flows and error reporting. Adjusted the CTO agent's section for consistency in expert guidance and clarified the designer's tools to include 'Skill' for better design resource management.
Kılavuz kodu başka programa devredildiğinde (ör. 209210292: Diş Hekimliği SAY
lisans → İlk ve Acil Yardım TYT önlisans) refresh yalnız koda bakıp yıl
kolonlarını yazıyordu; satır eski adıyla yeni programın sırasını gösteriyordu.
- scripts/kimlik.ts (yeni): kimlik = puan türü + önlisans + baz ad slug'ı.
Devir yılı kanıt zinciriyle bulunur (API …1/…2/…3 sıra/puanı DB ile eşleşen
ardışık yıllar + netler.puanTuru); API geçmişi kod bazlı ve kirli olduğu
için (gk2, bazı basariSirasi3) zincirsiz güvenilmez. Yalnız adı değişen ve
API penceresinin tamamında sürekliliği olan satır "ad değişimi"dir, geçmişi
korunur.
- refresh: uyumsuz satır varsa listeler ve HİÇBİR ŞEY yazmadan durur;
--kimlik-onar ile isim/tur/onlisans/fakulte/sure API'den yazılır, devir
öncesi tüm yıl kolonları NULL'lanır, eski kimlik + geçmişi programs_arsiv'e
<kod>~<yıl> id'siyle kopyalanır, eski yılların netleri oraya taşınır,
veri_meta'ya kimlik_onar:<kod> kaydı düşer. Önceki-yıl sağlaması onarılanlar
dışındaki satırlar için aynen geçerli. --isim-esitle (varsayılan kapalı):
kimliği aynı, yalnız burs/dil eki farklı satırlarda isim API'den.
- gecmis-doldur: onarılmış satırda devir öncesi yılları hiçbir kaynaktan
doldurmaz (yoksa API'nin kod bazlı …N alanları eski programı geri yazar).
- veri-kalite: --ham ile ZORUNLU kimlik kontrolü (0 uyumsuz beklenir);
--onceki karşılaştırmasında onarılanlar ayrı doğrulanır.
- docs/veri/yillik-guncelleme.md: kimlik kilidi adımı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Yıl sözleşmesi (veri-yillari.ts, EFEKTIF_SIRA_SQL), P-A veri betikleri ve
yıllık güncelleme runbook'u, yokatlas.db 2026 verisi (arşivli), okuyan taraf
yılsız Program tipi, metinler + meraklısına şeması, yazdırma dipnotu.
Denetim: kod-denetcisi 2026-09-21 — koşullu merge; yayın sonrası prod'da
pnpm tadimlik --force, kayıtlı liste tabanı yenileme takip işi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- odemeyiSonuclandir fonksiyonu, kredi ve paid damgalarını doğru sırayla işleyerek sipariş durumunu günceller.
- iade akışında, paket tek seferlik kontrolü ve eski siparişlerin onarımı sağlandı.
- UNIQUE hatası için DrizzleQueryError mesajı güncellendi; callback geçici DB hatalarında yönlendirme yapıldı.
- krediKaydiVarMi indeksi ile haftalık mutabakat sorgusu optimize edildi.
- yokatlas-goc: idempotent şema göçü (yıl kolonları, son_kilavuz_yili, eski_kod,
programs_arsiv, veri_meta) + betiklerin ortak yardımcıları
- refresh: --yil/--db zorunlu, YIL KİLİDİ (…1 = DB sira<yil-1> ≥%95 ve eksiz ≠),
yıl asla r.yil'den türetilmez; ham veri data/ham/*.jsonl.gz, --ham ile API'siz
tekrar; benzersiz kod = totalElements; tek transaction + önceki yıl sağlaması;
yeni programda …1/2/3 → üç önceki yıl; efektif indeks EFEKTIF_SIRA_SQL ile
- gecmis-doldur: yalnız NULL alan; API …1/2/3 → eski_kod → kanıtlı 1:1 ad eşleşmesi
- eski-arsivle: güncel kılavuzda olmayanlar → programs_arsiv, netler yeni koda; --kuru
- detay: netler bağımsız + yıl sağlaması; kırılım yalnız --kirilim, alan yoksa durur,
mevcut değerin üstüne NULL yazılmaz; `yil - 1` varsayımı kalktı
- veri-kalite: salt okunur kalite kapısı, zorunlu kontrol kalırsa çıkış kodu 1
- docs/veri/yillik-guncelleme.md: adım adım runbook + geri alma
DB commit'lenmedi (arşivleme kararı [Bilal]).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Site geneli ScrollFlow sarmalayıcısı (Lenis lerp'li kaydırma + hıza bağlı
skewY) tüm sayfa katmanını her karede transform'luyor, kaydırma performansını
düşürüyordu. Yerel tarayıcı kaydırmasına dönüldü; bölüm çapaları mevcut
scroll-mt değerleriyle çalışmaya devam eder. lenis bağımlılığı ve
data-lenis-prevent işaretleri temizlendi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Replaced `NEXT_PUBLIC_APP_URL` with `APP_URL` in the payment processing logic to ensure proper runtime access. Updated related documentation to clarify the distinction between build-time and runtime environment variables, emphasizing the importance of using `APP_URL` for callback and webhook URLs. Adjusted references in the codebase to reflect this change, enhancing clarity and functionality in the payment flow.
Refactored the iyzico payment integration to improve the handling of payment callbacks and order status updates. Added signature validation for responses to ensure data integrity. Enhanced the `initializeCheckoutForm` function to include buyer's name and surname, and updated the order schema to enforce unique constraints on iyzico tokens. Improved error handling and logging for payment processing, ensuring better tracking of payment states and issues. Updated the app database to reflect these changes.
- Added new scripts for database operations and temporary production in package.json.
- Integrated KaydetBannerLazy component into the layout for improved user notifications.
- Enhanced API error handling in the soru route to mark credit exhaustion.
- Updated the IletisimPage for better button styling and user experience.
- Refactored ListemPage to streamline user flow and improve session handling.
- Removed unused ListePaneli component to clean up the codebase.
- Introduced a new document detailing the design principles behind the funnel CTA drawer, emphasizing user flow and context retention.
- Added a UX/CRO corrections document outlining critical findings from a recent audit, including payment flow adjustments, button transparency, and pricing clarity.
- Created a gamification document to outline user engagement strategies and the program evaluation model for the Kolay Tercih feature.
- Developed a vision document for TercihAI, detailing the product's positioning, revenue model, and MVP scope, aimed at providing AI-assisted preference guidance for students.