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>
/universite/[slug] metrik ızgarasında takas: URAP listesinde olan
üniversitede "Tür" kartının yerini "URAP TÜRKİYE · 18 / 198 ·
2025-2026" alır, olmayan 31 kurumda "Tür" yerinde kalır. Kart sayısı
4'te kalıyor, lg ızgara şablonu değişmiyor, yeni bileşen yok, hiçbir
sayfada "—" ya da delik yok. Payda kartın içinde: "18." tek başına
yanıltır.
Tablonun altına AYRI ikinci kaynak satırı eklendi; VeriKaynagi
kullanılmadı ve kopyalanmadı, çünkü o satır YÖK Atlas'ın yerleştirme
yılına ve son güncelleme tarihine bağlı — URAP'ın dönemi başka.
Satırda metodoloji uyarısı da var: URAP akademik yayın ve araştırma
performansını ölçer, eğitim kalitesini ya da iş bulma oranını ölçmez.
URAP listesinde olmayan üniversitede eksiklik gizlenmiyor, nedeni tek
cümleyle yazılıyor (KKTC/yurt dışı ile MYO/yeni için ayrı cümle).
URAP'ın yayımlama izni "urapcenter.org adresine aktif bağlantı/atıf
vermek" şartına bağlıdır. Kaynak satırındaki bağlantı bu yüzden gerçek
bir <a href>: adres URAP_KAYNAK_URL sabitinden, target="_blank",
rel="noopener", nofollow YOK. Sıranın göründüğü ekran ile atıfın
göründüğü ekran aynı sayfadır; URAP sayısı yalnız ilk sayfada
gösterildiği için kaynak satırı da yalnız ilk sayfada çiziliyor.
Renk yok, rozet yok; URAP risk dili değildir. /universiteler hub'ında
URAP'a göre sıralama/filtre eklenmedi. URAP 24'lük listeye, /sonuc
tablosuna ve LLM prompt'una girmiyor — dokunulan dosya kümesi bunu
zaten dışlıyor.
veri-kalite.ts'e 5 URAP kontrolü (dosyanın en sonunda, tek satırlık
çağrıyla): (1) her URAP slug'ı bir üniversite sayfasına bağlı —
eşleşmeyen sessizce düşmüyor, adıyla listeleniyor; (2) kayıt sayısı =
URAP_TOPLAM; (3) sıralar 1..N tekrarsız ve boşluksuz; (4) puanlar
sıraya göre azalan; (5) kapsama boşluğu — URAP dışında kalan 150+
programlı bir Türkiye üniversitesi varsa UYARI (ad değişikliği
işareti). Beşi de geçiyor, boşluk 31 kurum.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
198 üniversitenin genel sıralaması, /universite/[slug] sayfa slug'ına
anahtarlanmış tek seferlik sabit (uni-koordinatlar.ts deseni). Yeni DB
dosyası, tablo, göç, cron ya da çekme betiği yok: 198 satır × 2 alan
için SQLite'ın hiçbir faydası olmazdı.
Eşleşme 198/198; URAP'ın yazımı bizim DB yazımımızla birebir aynı,
takma ad tablosu gerekmedi. Sıralar 1..198 kesintisiz ve tekrarsız,
puanlar sıraya göre azalan (veri-kalite kontrolleriyle doğrulanıyor).
URAP'ın yayımlama izni "urapcenter.org adresine aktif bağlantı/atıf
vermek" şartına bağlıdır: URAP sayısının göründüğü her yüzeyde, aynı
ekranda, URAP_KAYNAK_URL'ye çıkan gerçek bir <a href> (rel="noopener",
yeni sekme, nofollow YOK) bulunmak zorundadır. Link konulamayan bir
yüzeyde (ör. OG görseli) URAP sayısı hiç gösterilmez. Şart dosyanın
başındaki yorumda da yazılıdır.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
credit_ledger.ref_id benzersizliği yalnız AYNI denemenin tekrarını koruyordu
(ağda kaybolan cevap → aynı requestId ile retry). requestId istemcide her
mount'ta yeniden üretildiği için "aynı kullanıcı üretimi iki kez başlattı"
durumu hiç yakalanmıyordu: üretim sürerken (20-60 sn) ikinci sekmede açılan
/listem?uret=1 ya da geri→ileri ikinci bir ListeUretici monte edip 3 krediyi
ikinci kez yakıyordu. Karşılığında tek rapor çıkıyordu, çünkü reports.user_id
benzersiz ve ikinci üretim birincinin üstüne yazıyor. Bakiyesi yetmeyen
deneme kullanıcısı ise akışın ortasında "kredi yetersiz" ekranı görüyordu.
- report_locks (user_id birincil anahtar): ikinci INSERT benzersizlik
ihlaliyle düşer, bu da "üretim sürüyor" demektir. Kilit kredi
harcamasından ÖNCE alınır, finally'de bırakılır.
- Bayat kilit (süreç OOM'la öldü, deploy) 180 sn sonra devralınabilir;
devir koşullu UPDATE olduğu için iki eşzamanlı devralmadan yalnız biri
kazanır. Salım requestId koşullu: geç uyanan eski sahip devralanın
kilidini silemez.
- Yeni SURUYOR kodu: istemci bunu "hata" sayıp taze requestId ile yeniden
denerse çifte harcama kapısı yeniden açılırdı. Ekranda "Tekrar dene"
bilerek yok; kullanıcı listeye yönlendiriliyor, kredi harcanmadı.
- DUPLICATE dalının "İstek tekrarlandı" HATA'sı da SURUYOR'a çevrildi
(BACKLOG #1'deki ikinci çifte harcama yolu). Revizyon dalı değişmedi.
BACKLOG #1 · güvenlik denetimi G5
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Yalnız `BANT_METNI["takvim-belirsiz"]` değişir. İki seçenek yan yana:
A (dalda duran, ana commit'te):
"2027 tercihine hazırlık · 2026 yerleştirme verisi yüklü"
Kısa, bant şeridine tek satırda sığar; ne beklendiğini söylemez.
B (bu commit):
"2026 yerleştirme verileri yüklendi — 2027 tercih takvimi açıklanınca
geri sayım burada başlar"
Sayacın neden boş olduğunu açıklar ve geri döneceğini vaat eder;
~95 karakter, 375 px'te saat ikonunun yanında alt satıra taşar.
Cherry-pick edilmezse dal A ile tutarlı çalışır.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Üst banttaki elle gömülü 2026 başlangıç/bitiş damgaları `src/lib/sezon.ts`
içindeki `SEZON_TAKVIMI`ye taşındı. Aşama hesabı (`sezonAsamasi`) ve geri
sayım hedefi (`sezonHedefi`) artık oradan geliyor; `devam-ediyor` dalının
davranışı birebir aynı. 2027 takvimi ÖSYM tarafından açıklanmadığı için
`null` bırakıldı — tarih uydurulmadı.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bugüne kadar yalnız başarı (liste_olusturuldu) ölçülüyordu; kaç kişinin
üretimi denediği bilinmiyordu. /listem?uret=1 ile üretim gövdesi mount
olduğunda yeni bileşen `liste_uretim_basladi` atar.
Olay bilerek liste-uretici.tsx'e değil, listem-icerik.tsx'te ona kardeş
mount edilen yeni bir istemci bileşenine kondu (o dosya bu turda başka bir
işin altında). İkisi aynı `uret` dalında render edildiği için koşulları
birebir aynı.
`kaynak` URL'den, yani kullanıcı denetiminden geldiği için allowlist'ten
geçirilir; listede olmayan değer "bilinmiyor" raporlanır. Giriş
round-trip'inde değerin kaybolmaması için geriYol da kaynağı taşır —
`uret=1` her zaman ilk parametre kalır (giris-karti.tsx:31 sözleşmesi).
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>
Yayın sonrası denetim (2026-09-21):
- tadımlık havuzu snapshot'ı 2025 tabanını taşıyordu: örnek satır 'Tıp ~5.118,
az riskli' derken aynı sayfadaki tablo 4.481 gösteriyordu. Taban ve sıra
geçmişi artık okuma anında canlı DB'den; güncel kılavuzdan çıkmış program
örnek gösterilmez (sıradaki kategoriye düşülür)
- sunucuylaBirlestir riskleri her zaman yeniler: sunucu kaydı taze taban +
başka cihazın bayat riskini taşıyabiliyordu
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Denetim bulgusu (2026-09-21): ManuelTercih.efektifSira ekleme anının
snapshot'ıydı; 2026 verisi yüklenince /listem 2025 tabanıyla renk verirken
/sonuc tablosu 2026 gösteriyordu ve hiçbir yol yenilemiyordu.
- db.ts: efektifSiralarGetir(ids) — güncel COALESCE(sira2026, sira2025).
- liste-actions: listeTabanlariniTazele (oturumsuz, ≤24 id); sunucu kaydı
(listeSenkronla/listeyiKaydet) tazelenmiş yazılır.
- liste-store: tabanlariGuncelle — efektif sıra + profil varsa risk yenilenir,
arşivlenmiş program eski değerini korur, değişiklik yoksa yayın yok.
- liste-senkron: girişli/girişsiz herkes için sekme oturumu başına bir kez
(anahtar SON_YIL taşır).
- meraklisina-icerik: "son beş yılın" → VERI_YIL_SAYISI.
- rehber (4 yazı): katalog sayfalarını anlatan "2021–2025 / son 5 yıl"
ifadeleri 2021–2026 / son yıllar; yazıların kendi örnek tabloları
2021–2025 olarak etiketli kaldı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Program artık siraGecmisi (YILLAR ile hizalı) + efektifSira + siraSon/puanSon/
kontenjanSon/yerlesenSon taşır. db.ts kolonları YILLAR'dan üretip takma adla
seçer, programSatiri eşleyicisi ham satırı Program'a çevirir; SELECT_COLS'un
üç tüketicisi de eşleyiciden geçer. EFEKTIF_SIRA veri-yillari'dan gelir.
- trend: ILK_YIL tek kaynaktan, opsiyonel ilkYil parametresi
- rapor snapshot'ına opsiyonel ilkYil yazılır (eski kayıtlar: okurken ILK_YIL)
- rapor promptu son 4 yılı göndermeye devam eder, anahtarlar dinamik
- tadımlık "son N yıl" filtresi genel: N != VERI_YIL_SAYISI ise servis edilmez
- veri-kapsami VERI_YIL_SAYISI'nı veri-yillari'dan türetir
Bileşenler bir sonraki commit'te yeni tipe geçer (ikisi birlikte derlenir).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- derin /bolum ve /universite sayfalarında sıra aralığı hangi yıldan geldiğini
söyler (2025 / 2024 / 2024–2025); 2024 sırası '2025 verisi' diye sunulmaz
- <title> yuvarlanmış rakamlarla ve şablon eki olmadan ≤~86 karakter
- giriş formunda tek geri sayım interval'i (çift sayaç butonu erken açıyordu)
- RYBBIT_HOST sonundaki '/' atılır
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
cae2aaa yalnız riskNotu'yu deterministik yapmıştı; aynı satırın gerekce ve
trendOzeti alanları DB'deki eski LLM metni olarak servis ediliyordu (lokal
havuzda 89 satır "Son 4 yıl…", 13+ satır "yerleşme olasılığı/ihtimali").
Oradaki "olasılık dili sızamaz" yorumu yanlıştı; düzeltildi.
- yeni src/lib/trend.ts: trendOzetiMetni() saf fonksiyonu — rapor.ts'teki
trendOzetiUret gövdesi buraya taşındı, rapor ve tadımlık aynı kaynaktan
okur. Yıl aralığı serideki dolu yıllardan gelir ("2021-2025 arasında…")
- trend cümlesinden tahmin yargısı çıktı: "bölüm zorlaşıyor" → "taban
sıkılaştı", "yerleşmek görece kolaylaşıyor" → "taban gevşedi". ±%10
eşiği, ilk–son yıl mantığı, 5/13/6 ve LLM şeması/prompt'u aynı
- tadimlikSec(): DB'deki trendOzeti servis edilmez; program.siraGecmisi'nden
okuma anında üretilir (alan yoksa "yeterli geçmiş yıl verisi yok")
- tadimlikSec(): gerekce olasılık/ihtimal/şans/garanti/kesin/yüzde/
"yerleşirsin"/"son 4 yıl" içeriyorsa satır yok sayılır → "genel"
kategoriye düşer, o da takılırsa null (tadımlık gizlenir). Eşleşme
Türkçe küçük harfle yapılır (İ/ı)
DB satırları, şema ve script'ler değişmedi.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Erken olay kuyruğu yalnız olay() içindi; sert yüklemede (OAuth / e-posta
linki dönüşü) RybbitIdentify effect'i de script'ten önce koşuyor, identify
kayboluyor ve kuyruktan boşalan olaylar anonim profile yazılıyordu
(08-kod-denetimi #6).
- Tek "son değer" slotu (bekleyenKimlik): kuyruk değil, yalnız en son
kimlik anlamlı. Yoklama zamanlayıcısı olay kuyruğuyla ortak
(zamanlayiciyiBaslat); script 10 sn'de gelmezse slot da atılır.
- kuyruguBosalt kimliği olaylardan ÖNCE uygular.
- kullaniciTemizle slotu siler.
rybbit-identify.tsx'e dokunulmadı.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Profil kapısının açılışı ve tamamlanmadan kapanışı doğrudan ölçülmüyordu;
"82 oturum kapıyı gördü" kod davranışından çıkarımdı (09-analitik-tur2).
İki yeni olay (adlar kalıcı sözleşme):
- kapi_acildi {tetik: arti|sonuc|sihirbaz|duzenle|diger}: depoda tek
açılış noktası (kapiyiAc). Her açıcı kendi tetik'ini yazar:
programEkleIste → arti, profilDuzenlemeyiAc → duzenle, profilToplamaAc →
isteğe bağlı 3. parametre, verilmezse hedeften (sonuc/sihirbaz), o da
yoksa diger. Depoya `tetik` alanı eklendi.
- kapi_kapatildi {adim: giris|sira|sihirbaz, tetik}: yalnız TAMAMLANMADAN
kapanışta; kapı bileşeninde tek noktadan (vazgec) — X, dışarı tıklama,
Esc ve "Vazgeç" butonları. Tamamlanan kapı profilTamamlandi ile depodan
kapanır, bu noktaya uğramaz.
Ham sıra/e-posta olaylara girmez. Davranış değişmez.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Oturum oluşturulduğunda (databaseHooks.session.create.after) Rybbit'e
sunucudan giris_basarili düşer; yontem = eposta | google | diger
(better-auth uç yolundan türetilir). Huninin "link istendi → giriş yapıldı"
adımı bugüne dek ölçülemiyordu.
- await yok: Rybbit'in 3 sn'lik timeout'u girişi geciktirmez; sunucuOlayi
hata fırlatmaz. E-posta adresi olaya girmez, yalnızca kullanıcı ID.
- RYBBIT_HOST/SITE_ID/API_KEY yoksa no-op — prod .env.production'da bu
üçü bugün yok (bkz. ayrı ci.yaml commit'i), eklenene dek olay düşmez.
Giriş akışının davranışını değiştirmez (yalnızca yan etki ekler).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Aynı e-posta adresine 60 sn içinde ikinci giriş linki gönderilmez: istek
yine 200 döner (form "gönderildi" gösterir), mail çıkmaz. Üçüncü kişiye
mail bombardımanını ve Resend kotasının yakılmasını engeller; bugüne dek
tek sınır better-auth'un IP limitiydi (5 istek/60 sn).
- Kaynak süreç içi Map (globalThis.__girisEpostaSon), anahtar
trim+lowercase adres. verification tablosundan türetilmez: orada
identifier token'dır ve satır sendMagicLink'ten önce yazılır.
- Pencere kaymaz (düşen istek süreyi uzatmaz); her çağrıda eski kayıtlar
budanır. Gönderim hata verirse kayıt silinir, kullanıcı hemen yeniden
deneyebilir.
- Yalnızca NODE_ENV=production: dev paneli "anında giriş" art arda istek
atıyor. Konsol modunda da işler (lokal docker testi).
Canlı giriş yolunu değiştirir; merge öncesi lokal docker testi şart.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Resend gönderimine replyTo eklendi (EMAIL_REPLY_TO, yoksa
destek@kolaytercih.com) — mail.kolaytercih.com'un MX'i olmadığı için
yanıtlar bounce oluyordu.
- epostaKonsolModu(): konsola yazma yalnızca anahtar yokken VE (dev'de ya
da EPOSTA_KONSOL_FALLBACK=1 ile) geçerli. Production'da anahtar yoksa
artık "gönderildi" dönmüyor, token'lı link loga yazılmıyor; gönderim
anında net hata fırlatılıyor (better-auth 500 → formda hata toast'ı).
- Production'da EMAIL_FROM yoksa sessizce onboarding@resend.dev'e düşmek
yerine hata. Env okumaları çağrı anında — next build etkilenmez.
Canlı giriş yolunu değiştirir; merge öncesi lokal docker testi şart.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Girişsiz /sonuc tadımlığının riskNotu'su LLM üretimiydi ve DB'den olduğu
gibi servis ediliyordu; prompt'u da açıkça "yüksek/orta/düşük ihtimal dili
kullan" diyordu. Rozet ise aynı satırda canlı hesaplanıyor → metinle rozet
çelişebiliyordu.
- tadimlikSec(): riskNotu okuma anında riskNotuMetni(riskHesapla(...) ??
dilimdenRisk(...)) ile üretilir (rozetle aynı formül). DB satırları ve
şema değişmez; prod'da havuzu yeniden üretmek gerekmez, /api/tadimlik de
kapsanır
- tadimlik-uret prompt'u + mock metinleri: ihtimal dili yasaklandı,
"son 4 yıl" → "son 5 yıl" (çıktı şeması aynı; script koşulmadı)
- danışman sohbeti sistem prompt'u: "ihtimal dili kullan" → olasılık/yüzde/
ihtimal yasak, risk etiketleri + taban sıralarıyla konuş
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- <head>'deki Google Fonts preconnect/stylesheet <link>'leri kaldırıldı
(çoğu istemci yok sayıyor, bazı spam filtrelerinde eksi puan).
- HTML footer'a ve düz metin gövdelerin sonuna kolaytercih.com +
destek@kolaytercih.com satırı eklendi. Satış dili yok.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Frontmatter'a isteğe bağlı `guncelleme` alanı geldi ve uçtan uca akıyor:
sitemap lastmod (yazı + /rehber dizini), Article JSON-LD dateModified,
og:article modified_time ve makale başlığının altındaki görünür tarih
satırı. `tarih`/`guncelleme` YYYY-AA-GG değilse ya da güncelleme yayından
önceyse build kırılır. Tarih metni saat diliminden bağımsız `trTarih` ile
üretilir.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
useGorunumOlayi useRef + [ad, anahtarEki] deps'li effect kullanıyordu:
eleman ilk commit'te yoksa (kaydet-banner: mount sonrası açılır, portal
içinde) ya da sökülüp yeni düğümle geri geliyorsa (tadımlık satırı) gözlem
hiç kurulmuyordu → kaydet_banner_goruntulendi / tadimlik_goruntulendi = 0.
Hook artık callback ref döner; gözlem düğüm bağlanınca kurulur, sökülünce
React 19 ref temizliğiyle bırakılır. Çağıranlar yalnız ref={…} verdiği
için kullanım yerleri değişmedi.
olay(): Rybbit script'i afterInteractive; sert yüklemede mount anında
atılan olaylar window.rybbit henüz yokken sessizce düşüyordu. Artık en çok
20 olay, 500 ms aralıkla en çok 20 deneme (10 sn) kuyrukta bekler; script
gelmezse (reklam engelleyici, dev) kuyruk atılır.
olayBirKez(): hook'taki sessionStorage tekilleştirmesinin effect'ten
çağrılabilir hâli (anahtar biçimi aynı: kolaytercih.olay.<ad>[.<ek>]).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Frontmatter değerinin iki ucundaki tırnak bağımsız siliniyordu; "Alıntı"
diye başlayan açıklamalar baştaki tırnağını kaybediyordu. Artık yalnızca
tamamı aynı tırnakla sarılı değer soyulur. Makale tabloları yatay kayan,
klavyeyle odaklanabilir bir bölgeye sarılır (mobilde sayfa taşması).
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
outputFileTracingIncludes yalnızca eşleşen dosyaları kopyalar, trace etmez:
resources/*.js imaja girdi ama IyzipayResource'un require ettiği
postman-request ve bağımlılıkları girmedi — initialize prod'da
"Cannot find module 'postman-request'" ile düşüyordu. IyzipayResource'u
statik import etmek nft trace'inin tüm zinciri doğru pnpm yerleşimiyle
kopyalamasını sağlar.
Co-Authored-By: Claude Fable 5 <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.
Enhanced the iyzico payment processing logic by updating the handling of checkout form content. Modified the order schema to include a new field for storing the checkout form content, ensuring it persists across page refreshes. Updated related functions to reflect these changes, improving the overall payment experience. Additionally, updated the app database to incorporate the latest changes.
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.
Enhanced the handling of user profiles and callback URLs in various components. Updated the `GirisKarti` to support multiple callback scenarios, ensuring seamless user experience. Improved the `ListeUretici` and `ListemIcerik` components to manage profile data more effectively, including handling cases where the profile is stored in cookies. Additionally, refined the logic for redirecting users based on their profile status, ensuring they are directed to the appropriate pages without losing context. Updated the database file to reflect these changes.
Removed unnecessary elements and optimized styles in the AramaFunnelKarti component for improved layout. Updated the city data structure in harita-ulkeler.ts to include coordinates, enhancing geographical data handling. Additionally, refactored risk color definitions in risk.ts for better clarity and maintainability.
Profil çerezinin SSR'da kullanılmasını sağlayarak, sonuç sayfasındaki yönlendirmeleri güncelledik. Artık profil bilgileri URL parametreleri yerine çerezden alınarak işleniyor. Ayrıca, profil çerezi olmayan kullanıcılar için yönlendirme mantığı iyileştirildi. Çeşitli bileşenlerdeki URL oluşturma fonksiyonları güncellenerek, profil bilgileri çerezden okunacak şekilde düzenlendi. Bu değişiklikler, kullanıcı deneyimini artırmayı ve daha tutarlı bir veri akışı sağlamayı hedefliyor.
Tadımlık satırı batch üretildiği için sihirbazdaki devlet/vakıf seçimini
bilmiyor, vakıf seçen kullanıcıya devlet örneği gösteriyordu. Havuz
anahtarı kova×tür×kategori×tip'e genişledi (migration 0001; mevcut
satırlar tip='genel'). Üretim scripti tip varyantlarını uniturGrubu
filtresiyle seçer; tadimlikSec tip verildiğinde kategori→genel fallback'i
korur ama tip fallback'i YAPMAZ — uygun satır yoksa bileşen gizlenir,
yanlış tipte örnek asla gösterilmez. Client profildeki tipi de gönderir ve
SSR "genel" satırı tipe uymuyorsa fetch bitene kadar gizler.
Not: prod app.db volume'de — `pnpm tadimlik` prod DB'ye karşı ayrıca
koşulmalı.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sihirbazın alan çipleri artık YÖK Atlas'ın kendi verisiyle süzülüyor:
kategoriBul program adı kurallarını fakülte kurallarıyla kesiştiriyor
(Siber Güvenlik Müh. artık Hukuk değil, Siyaset Bilimi artık Fen değil).
Aşırı geniş isim regexleri sıkılaştırıldı (bilim/güvenlik/programcı/çevre
+ gastronomi'nin içindeki "astronomi" tuzağı) — sayısalda Hukuk & Siyasal,
sözelde Mühendislik çipi tamamen kalktı.
İl adımındaki .slice(0,15) kırpması kaldırıldı: penceresinde programı olan
TÜM iller listelenir; KKTC/yurtdışı kampüsler ayrı çip grubunda. Haritanın
15-limit yüzünden yanlış "program yok" grilemesi kendiliğinden düzeldi.
Öncelik çiplerine şeffaflık notu eklendi (listeyi daraltmaz, AI'ya yön
verir). /meraklisina şeması ve anlatımı aynı davranışla senkronlandı.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>