From 8cf0c3267d7bdb61a8a7726a6c511b8dacd529ba Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Sat, 1 Aug 2026 17:28:38 +0300 Subject: [PATCH] Update routing in next.config.ts to redirect "/tercih-robotu" to the hero form, add simple-icons dependency in package.json, and enhance database indexing for improved query performance. Remove unused SVG files and update metadata across various pages for better SEO and clarity. --- content/rehber/devlet-mi-vakif-mi.md | 32 + content/rehber/ek-yerlestirme-2026.md | 40 ++ ...c-siralama-ile-hangi-bolume-girebilirim.md | 41 ++ content/rehber/olu-tercih-nedir.md | 33 + content/rehber/onlisans-mi-lisans-mi.md | 32 + content/rehber/siralama-sartlari-2026.md | 40 ++ content/rehber/taban-puan-mi-siralama-mi.md | 33 + .../rehber/taban-siralamalar-nasil-degisir.md | 39 ++ .../rehber/tercih-listesi-nasil-yapilir.md | 36 + content/rehber/yks-tercih-takvimi-2026.md | 37 + data/app.db | Bin 143360 -> 155648 bytes data/yokatlas.db | Bin 7811072 -> 9519104 bytes next.config.ts | 2 + package.json | 1 + pnpm-lock.yaml | 9 + public/file.svg | 1 - public/globe.svg | 1 - public/next.svg | 1 - public/vercel.svg | 1 - public/window.svg | 1 - scripts/db-index.ts | 8 + src/app/api/facetler/route.ts | 44 +- src/app/api/katalog-ara/route.ts | 86 +++ src/app/api/programlar/route.ts | 43 ++ src/app/bolum/[slug]/bolum-icerik.tsx | 129 ++++ src/app/bolum/[slug]/page.tsx | 28 + src/app/bolum/[slug]/sayfa/[no]/page.tsx | 47 ++ src/app/bolumler/page.tsx | 123 ++++ src/app/favicon-for-app/apple-icon.png | Bin 2573 -> 0 bytes src/app/favicon-for-app/favicon.ico | Bin 15086 -> 0 bytes src/app/favicon-for-app/icon0.svg | 1 - src/app/favicon-for-app/icon1.png | Bin 2258 -> 0 bytes src/app/favicon-for-app/manifest.json | 21 - src/app/giris/page.tsx | 3 +- src/app/gizlilik/page.tsx | 5 +- src/app/iletisim/page.tsx | 5 +- src/app/kosullar/page.tsx | 5 +- src/app/layout.tsx | 35 +- src/app/listem/page.tsx | 3 +- src/app/meraklisina/demo.tsx | 640 ++++++++++++++++++ src/app/meraklisina/page.tsx | 189 ++++++ src/app/odeme/sonuc/page.tsx | 3 +- src/app/opengraph-image.alt.txt | 1 + src/app/opengraph-image.png | Bin 0 -> 43788 bytes src/app/page.tsx | 65 +- src/app/paket/page.tsx | 5 +- src/app/rapor/yazdir/page.tsx | 3 +- src/app/rehber/[slug]/opengraph-image.tsx | 220 ++++++ src/app/rehber/[slug]/page.tsx | 137 ++++ src/app/rehber/page.tsx | 77 +++ src/app/robots.ts | 15 + src/app/sitemap.ts | 40 ++ src/app/sonuc/page.tsx | 22 +- src/app/sonuc/sihirbaz-cagri-karti.tsx | 2 + src/app/sonuc/sihirbaz-modal.tsx | 6 + src/app/universite/[slug]/page.tsx | 25 + src/app/universite/[slug]/sayfa/[no]/page.tsx | 47 ++ .../universite/[slug]/universite-icerik.tsx | 336 +++++++++ src/app/universiteler/page.tsx | 112 +++ src/components/bolum-program-listesi.tsx | 191 ++++++ src/components/cta-sira-form.tsx | 57 ++ src/components/hero-form.tsx | 4 +- src/components/katalog-arama.tsx | 398 +++++++++++ src/components/program-tablosu.tsx | 203 ++++-- src/components/rehber-kapak.tsx | 159 +++++ src/components/sayfalama.tsx | 98 +++ src/components/sihirbaz-adimlar.tsx | 70 +- src/components/site-footer.tsx | 161 +++++ src/components/site-header.tsx | 19 +- src/components/universite-konum-haritasi.tsx | 156 +++++ src/lib/db.ts | 233 ++++--- src/lib/katalog.ts | 384 +++++++++++ src/lib/rehber.ts | 90 +++ src/lib/risk.ts | 2 +- src/lib/seo.tsx | 124 ++++ src/lib/slug.ts | 45 ++ 76 files changed, 5050 insertions(+), 255 deletions(-) create mode 100644 content/rehber/devlet-mi-vakif-mi.md create mode 100644 content/rehber/ek-yerlestirme-2026.md create mode 100644 content/rehber/kac-siralama-ile-hangi-bolume-girebilirim.md create mode 100644 content/rehber/olu-tercih-nedir.md create mode 100644 content/rehber/onlisans-mi-lisans-mi.md create mode 100644 content/rehber/siralama-sartlari-2026.md create mode 100644 content/rehber/taban-puan-mi-siralama-mi.md create mode 100644 content/rehber/taban-siralamalar-nasil-degisir.md create mode 100644 content/rehber/tercih-listesi-nasil-yapilir.md create mode 100644 content/rehber/yks-tercih-takvimi-2026.md delete mode 100644 public/file.svg delete mode 100644 public/globe.svg delete mode 100644 public/next.svg delete mode 100644 public/vercel.svg delete mode 100644 public/window.svg create mode 100644 src/app/api/katalog-ara/route.ts create mode 100644 src/app/api/programlar/route.ts create mode 100644 src/app/bolum/[slug]/bolum-icerik.tsx create mode 100644 src/app/bolum/[slug]/page.tsx create mode 100644 src/app/bolum/[slug]/sayfa/[no]/page.tsx create mode 100644 src/app/bolumler/page.tsx delete mode 100644 src/app/favicon-for-app/apple-icon.png delete mode 100644 src/app/favicon-for-app/favicon.ico delete mode 100644 src/app/favicon-for-app/icon0.svg delete mode 100644 src/app/favicon-for-app/icon1.png delete mode 100644 src/app/favicon-for-app/manifest.json create mode 100644 src/app/meraklisina/demo.tsx create mode 100644 src/app/meraklisina/page.tsx create mode 100644 src/app/opengraph-image.alt.txt create mode 100644 src/app/opengraph-image.png create mode 100644 src/app/rehber/[slug]/opengraph-image.tsx create mode 100644 src/app/rehber/[slug]/page.tsx create mode 100644 src/app/rehber/page.tsx create mode 100644 src/app/robots.ts create mode 100644 src/app/sitemap.ts create mode 100644 src/app/universite/[slug]/page.tsx create mode 100644 src/app/universite/[slug]/sayfa/[no]/page.tsx create mode 100644 src/app/universite/[slug]/universite-icerik.tsx create mode 100644 src/app/universiteler/page.tsx create mode 100644 src/components/bolum-program-listesi.tsx create mode 100644 src/components/cta-sira-form.tsx create mode 100644 src/components/katalog-arama.tsx create mode 100644 src/components/rehber-kapak.tsx create mode 100644 src/components/sayfalama.tsx create mode 100644 src/components/site-footer.tsx create mode 100644 src/components/universite-konum-haritasi.tsx create mode 100644 src/lib/katalog.ts create mode 100644 src/lib/rehber.ts create mode 100644 src/lib/seo.tsx create mode 100644 src/lib/slug.ts diff --git a/content/rehber/devlet-mi-vakif-mi.md b/content/rehber/devlet-mi-vakif-mi.md new file mode 100644 index 0000000..9699fcb --- /dev/null +++ b/content/rehber/devlet-mi-vakif-mi.md @@ -0,0 +1,32 @@ +--- +baslik: Devlet mi Vakıf mı? Burslu ve İndirimli Programlar Nasıl Okunur? +aciklama: Aynı bölümün beş farklı fiyat etiketi var — %100 burslu, %50 indirimli, ücretli... Vakıf tablosunu doğru okumanın ve devletle kıyaslamanın rehberi. +tarih: 2026-07-19 +--- + +Tercih tablolarında aynı bölümün adı beş kez geçebilir: *Psikoloji (Burslu)*, *Psikoloji (%50 İndirimli)*, *Psikoloji (%25 İndirimli)*, *Psikoloji (Ücretli)*, *Psikoloji (İngilizce)*. Bunlar ayrı programlardır: ayrı kontenjan, ayrı taban, ayrı fiyat. Bu yazı tabloyu doğru okumayı ve devlet-vakıf kararını sağlıklı vermeyi anlatıyor. + +## Varyantlar ne anlama geliyor? + +- **Burslu (%100):** Öğrenim ücreti yok. Vakıfların vitrini olduğu için tabanı çoğu zaman aynı üniversitenin ücretli programından *yüz binlerce sıra* daha iyidir; köklü devletlerle yarışır. +- **%50 / %25 indirimli:** Ücretin o oranı düşülür. Kalan tutar yıllara ve okula göre ciddi bir bütçedir; 4-6 yıllık toplam maliyeti baştan hesapla. +- **Ücretli:** Tam ücret. Tabanlar genelde en geniştir. +- **İngilizce / UOLP:** Öğretim dili veya ortak program bilgisidir; burs bilgisi değildir. Hazırlık yılı ekleyebilir. + +Kritik uyarı: **bursun sürme koşullarını** üniversitenin kendi yönetmeliğinden kontrol et. Çoğu vakıfta giriş bursu süresizdir ama bazı okullarda not ortalaması şartı vardır. + +## Devlet-vakıf kararında gerçek kriterler + +**Bütçe dışında** şunlara bak: + +1. **Kadro ve bölümün kurumsallığı.** Bölümün öğretim üyesi sayısı, araştırma çıktısı, akreditasyonu (MÜDEK, PSİKOLOG odaklı akreditasyonlar vb.) devlet-vakıf etiketinden daha belirleyicidir. +2. **Şehir ve yaşam maliyeti.** Devlet okulu + büyükşehir kirası, bazen vakıf burslusu + yurt kombinasyonundan pahalıya gelir. Toplam maliyeti karşılaştır. +3. **Tabanın söylediği.** Bir vakıf burslusunun tabanı köklü devletlerle aynıysa, piyasa o programa devlet muadili değer biçiyor demektir. [İşletme](/bolum/isletme) veya [Psikoloji](/bolum/psikoloji) tablolarını aç; Tür kolonunda devlet/vakıf ayrımını, satır altlarında burs varyantlarını yan yana görüp kendi sıralamanla kıyaslayabilirsin. + +## Listede nasıl konumlanır? + +- Burslu vakıf programları taban olarak "hayal/dengeli" bölgene düşüyorsa devlet alternatifleriyle **aynı blokta, istek sırana göre** diz — ayrı kefeye koyma. +- İndirimli programlarda aileyle net bütçe konuşmasını *listeyi vermeden önce* yap; yerleştikten sonra "ödeyemeyiz" durumu bir yıl kaybettirir. +- Ücretli programı yalnızca bütçe gerçekten uygunsa ve o okulu gerçekten istiyorsan yaz — "garanti olsun" diye yazılan ücretli program, kayıt yaptırmayacaksan [ölü tercihten](/rehber/olu-tercih-nedir) beterdir: yerleşirsen ek tercih hakkın da yanar. + +Sıralamana hangi devlet ve vakıf programlarının düştüğünü tek ekranda görmek için [tercih robotuna](/tercih-robotu) sıralamanı gir; devlet/vakıf filtresiyle iki evreni ayrı ayrı da tarayabilirsin. diff --git a/content/rehber/ek-yerlestirme-2026.md b/content/rehber/ek-yerlestirme-2026.md new file mode 100644 index 0000000..2e8fe0b --- /dev/null +++ b/content/rehber/ek-yerlestirme-2026.md @@ -0,0 +1,40 @@ +--- +baslik: Ek Yerleştirme Nedir? 2026 Ek Tercih Rehberi +aciklama: İlk yerleştirmede boşta kaldıysan oyun bitmedi — ek yerleştirmenin kuralları, kimlerin başvurabileceği ve ikinci şansı doğru kullanmanın yolu. +tarih: 2026-07-22 +--- + +Merkezi yerleştirme sonuçları açıklandığında bir programa yerleşememiş olmak yılın sonu değildir. Üniversiteler kayıt dönemini kapattığında binlerce kontenjan boş kalır ve ÖSYM bu boş kontenjanlar için **ek yerleştirme** (ek tercih) süreci açar. + +## Ek yerleştirme ne zaman? + +Kayıtlar tamamlandıktan sonra, genellikle **Eylül ayı içinde**. ÖSYM önce boş kontenjanları içeren Ek Yerleştirme Kılavuzu'nu yayımlar, ardından birkaç günlük tercih penceresi açılır. Kesin tarihler her yıl ÖSYM duyurusuyla netleşir — tercih takviminin tamamı için [YKS 2026 tercih takvimi](/rehber/yks-tercih-takvimi-2026) yazısına bak. + +## Kimler başvurabilir? + +Kurallar nettir ve en kritik olanı şudur: + +- **İlk yerleştirmede herhangi bir programa yerleşen aday, kayıt yaptırmasa bile ek yerleştirmeye başvuramaz.** "Yerleştim ama gitmeyeceğim, ek tercihte daha iyisini denerim" diye bir yol yoktur. +- Ek yerleştirme yalnızca ilk yerleştirmede **hiçbir programa yerleşememiş** adaylara açıktır. +- İlk dönemde hiç tercih yapmamış adaylar da ek yerleştirmeye katılabilir. + +Bu kural, ilk listenin sonuna "kayıt yaptırmayacağım ama boşta da kalmayayım" mantığıyla program yazmanın neden tehlikeli olduğunu gösterir: oraya yerleşirsen ek tercih hakkın yanar. Bu tuzağın detayı [tercih listesi rehberinde](/rehber/tercih-listesi-nasil-yapilir). + +## Ek yerleştirmede taban nasıl işler? + +Ek yerleştirmede bir programa başvurabilmek için o programın **ilk yerleştirmedeki taban puanına eşit veya daha yüksek** puana sahip olman gerekir (ilk yerleştirmede hiç dolmayan programlarda bu şart esner). Yani ek tercih "tabanlar sıfırlanır, herkes her yere yazılır" demek değildir. + +## Boş kontenjanlar nereden çıkar? + +- İlk yerleştirmede hiç dolmayan programlar (çoğunlukla vakıf ücretli ve bazı önlisans programları), +- Yerleşip kayıt yaptırmayan adaylardan boşalan yerler. + +Boş kontenjan listesi ağırlıklı olarak vakıf üniversiteleri, ücretli/indirimli varyantlar ve önlisans programlarından oluşur; ama her yıl devlet üniversitelerinden de şaşırtıcı fırsatlar çıkar. Hangi bölümlerde kontenjanların geniş olduğuna dair fikir edinmek için [tüm bölümlerin taban puanları](/bolumler) sayfasındaki kontenjan kolonlarına göz at. + +## Ek tercih stratejisi + +1. **Kılavuzu bekleme, hazırlığını şimdi yap.** Sıralamana uygun program evrenini [tercih robotuyla](/tercih-robotu) önceden çıkar; kılavuz yayımlanınca sadece kesişimi almak kalır. +2. **İlk yerleştirme mantığıyla kurma.** Ek yerleştirmede tek liste hakkın var ve pencere kısa; dengeli-garanti ağırlıklı, gerçekçi bir liste kur. +3. **Kayıt yaptırmayacağın programı yine yazma.** Aynı kural burada da geçerli — ek yerleştirmeden sonra üçüncü bir şans yok. + +Ek yerleştirme, ilk turda şanssızlık yaşayanlar için gerçek bir ikinci şanstır; panik turu değil. Veriyle ve soğukkanlı kurulmuş bir ek liste, aceleyle yazılmış ilk listeden daha iyi sonuç verebilir. diff --git a/content/rehber/kac-siralama-ile-hangi-bolume-girebilirim.md b/content/rehber/kac-siralama-ile-hangi-bolume-girebilirim.md new file mode 100644 index 0000000..12f73cd --- /dev/null +++ b/content/rehber/kac-siralama-ile-hangi-bolume-girebilirim.md @@ -0,0 +1,41 @@ +--- +baslik: Kaç Sıralama ile Hangi Bölüme Girebilirim? (2025 Verileriyle) +aciklama: 10 binden 1 milyona — sıralama bandına göre hangi bölümlerin gerçekçi olduğunun veriye dayalı haritası. +tarih: 2026-07-23 +--- + +"Sıralamam X, nereyi kazanırım?" tercih döneminin en çok sorulan sorusu. Aşağıdaki bantlar 2025 YKS yerleştirme verilerine (YÖK Atlas) dayanır ve **kabaca bir harita** çizer — kesin sınır değildir; aynı bölümün tabanı üniversiteye, şehre ve burs durumuna göre çok geniş bir aralığa yayılır. + +## Sayısal (SAY) için kaba harita + +| Sıralama bandı | Gerçekçi seçenekler | +| --- | --- | +| İlk 5 bin | Köklü devletlerde [Tıp](/bolum/tip), [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi), [Elektrik-Elektronik Mühendisliği](/bolum/elektrik-elektronik-muhendisligi) | +| 5-25 bin | Devlet tıp (yeni fakülteler), [Diş Hekimliği](/bolum/dis-hekimligi), iyi devletlerde mühendislikler | +| 25-75 bin | [Eczacılık](/bolum/eczacilik), devlet mühendislikleri, [Mimarlık](/bolum/mimarlik) | +| 75-200 bin | Sağlık bilimleri ([Fizyoterapi ve Rehabilitasyon](/bolum/fizyoterapi-ve-rehabilitasyon), [Hemşirelik](/bolum/hemsirelik)), Anadolu devletlerinde mühendislik | +| 200-500 bin | Fen bilimleri, ziraat, daha geniş kapatan mühendislikler, vakıf burslu seçenekleri | +| 500 bin+ | Açıköğretim dışı seçenekler daralır; önlisans (TYT) tarafı güçlü alternatif olur | + +## Eşit Ağırlık (EA) için kaba harita + +| Sıralama bandı | Gerçekçi seçenekler | +| --- | --- | +| İlk 10 bin | Köklü devletlerde [Hukuk](/bolum/hukuk), [Psikoloji](/bolum/psikoloji) | +| 10-50 bin | Devlet hukuk (geniş kapatanlar), [İşletme](/bolum/isletme) / [İktisat](/bolum/iktisat) (iyi devletler), Psikoloji | +| 50-150 bin | Anadolu devletlerinde İİBF bölümleri, [Rehberlik ve Psikolojik Danışmanlık](/bolum/rehberlik-ve-psikolojik-danismanlik) | +| 150-400 bin | Vakıf burslu/indirimli seçenekler, sosyal hizmet, kamu yönetimi | + +Sözel ve Dil tarafında bantlar daha da geniştir; öğretmenlikler için ayrıca **başarı sıralaması şartı** devreye girer — detayı [Baraj ve başarı sıralaması şartları](/rehber/siralama-sartlari-2026) yazısında. + +## Bu tabloyu nasıl kullanmalısın? + +1. **Bandını bul, ama banda güvenme.** Bant sana "hangi bölümlere bakmaya değer" der; hangi üniversitede tutacağını söylemez. Aynı bölüm içinde tabanlar 10 kat oynayabilir. +2. **Bölüm sayfasının tablosuna in.** Örneğin [Psikoloji taban puanları](/bolum/psikoloji) sayfasında 380'e yakın programın tek tek tabanını görürsün — senin sıralaman listenin neresine düşüyorsa gerçekçi bölgen orasıdır. +3. **Kendi sıralamanla tara.** [Tercih robotuna](/tercih-robotu) sıralamanı gir; robot 23.000+ programın içinden senin bandına düşenleri hayal/dengeli/garanti dilimleriyle ayırıp önüne koyar. Tablo ezberlemekten hızlıdır. + +## Unutma + +- Sıralaman **puan türüne özeldir**; SAY sıralaman ile EA sıralaman farklıdır, her listeyi kendi türünün sıralamasıyla kur. +- Burslu/indirimli/İngilizce varyantların tabanları aynı bölümde bile çok farklıdır. +- 2026 tabanları bu yılın yerleştirmesiyle netleşir; buradaki veriler pusula, garanti değil. diff --git a/content/rehber/olu-tercih-nedir.md b/content/rehber/olu-tercih-nedir.md new file mode 100644 index 0000000..10788cd --- /dev/null +++ b/content/rehber/olu-tercih-nedir.md @@ -0,0 +1,33 @@ +--- +baslik: Ölü Tercih Nedir, Nasıl Anlaşılır? (Ve Nasıl Kaçınılır) +aciklama: Listende hiç işe yaramayan satırlar olabilir. Ölü tercihin tanımı, en sık yapılan iki biçimi ve listeni bu tuzaktan temizlemenin yolu. +tarih: 2026-07-24 +--- + +Ölü tercih, **hiçbir senaryoda seni yerleştirmeyecek satır** demektir. Listende durur, yer kaplar ama hiç işe yaramaz. 24 tercih hakkın varken bunun 5-6'sını ölü satırlara harcamak, tercih dönemi hatalarının en sessizidir — kimse fark etmez, ta ki sonuçlar açıklanana kadar. + +## Ölü tercihin iki biçimi + +**1) Sıralaması yetmeyecek programı listenin sonuna yazmak.** +ÖSYM yerleştirme sistemi listeni yukarıdan aşağı okur ve seni *yerleşebildiğin en üst tercihe* koyar. Diyelim sıralaman 200 bin ve 15. sıraya tabanı 40 bin kapatan bir program yazdın. O programa yerleşebilmen için üstteki 14 tercihin de tutmaması VE tabanın 40 binden 200 bine gevşemesi gerekir — pratikte imkânsız. O satır ölüdür. Hayal tercihi meşrudur ama yeri listenin **başıdır**, sonu değil. + +**2) Zaten üstte yazdığın programın kopyasını alta yazmak.** +Aynı programın ikinci yazımı sistemde hiçbir şey değiştirmez. Benzer şekilde, tabanı üstteki tercihten belirgin şekilde daha iyi olan bir programı alta koymak da ölüdür: üstteki tutmadıysa alttaki hiç tutmaz. + +## Nasıl anlarsın? + +Her satır için şu soruyu sor: **"Bu programa yerleşmem için üstümdeki tercihlerin hepsinin tutmaması VE bu programın tabanının benim sıralamama gelmesi gerçekçi mi?"** + +Pratik kontrol yöntemi: + +- Satırın taban sıralamasına son 4 yıl üzerinden bak (tek yıl yanıltır). +- Tabanı, senin sıralamandan iyiyse → o satır ancak listenin *üst bloğunda* (hayal) anlamlıdır. +- Tabanı üstündeki satırdan da iyiyse → sıra hatası var; satırları taban gevşekliğine göre yeniden diz. + +[Tercih robotuna](/tercih-robotu) sıralamanı girdiğinde programlar hayal/dengeli/garanti dilimleriyle etiketlenir; bir programın senin sıralamana göre hangi bölgede olduğunu tek bakışta görürsün. Popüler bölümlerde tabanların ne kadar geniş bir aralığa yayıldığını görmek için [Psikoloji](/bolum/psikoloji) veya [Hukuk](/bolum/hukuk) tablolarına bak — aynı bölümün tabanı üniversiteye göre yüz binlerce sıra oynayabilir; yani bölüm ölü değildir, *yanlış üniversite-satır eşleşmesi* ölüdür. + +## Ölü tercihten temizlenmiş liste nasıl görünür? + +Yukarıdan aşağı **tabanlar giderek gevşer**. İlk satırlar "tutarsa harika", orta blok "büyük ihtimal buradayım", son satırlar "kesin tutar ve severek giderim" der. Grafiğe döksen düzgün bir merdiven görürsün; ölü tercihli listelerde merdivenin ortasında yukarı fırlayan basamaklar olur. + +Son bir uyarı: ölü tercihi temizleyeyim derken listenin başındaki hayal tercihlerini de kesme. Üst sıradaki iddialı tercih ölü değildir — bedava piyango biletidir. Ölü olan, o iddialı tercihi listenin *sonuna* saklamaktır. diff --git a/content/rehber/onlisans-mi-lisans-mi.md b/content/rehber/onlisans-mi-lisans-mi.md new file mode 100644 index 0000000..d1b9def --- /dev/null +++ b/content/rehber/onlisans-mi-lisans-mi.md @@ -0,0 +1,32 @@ +--- +baslik: TYT ile Önlisans Tercihi — Önlisans mı, Lisans mı? +aciklama: 2 yıllıklar "yedek plan" değil, başlı başına bir rota. Önlisansın avantajları, DGS köprüsü ve TYT sıralamasıyla akıllı tercih kurmanın yolu. +tarih: 2026-07-17 +--- + +AYT'si istediği gibi gitmeyen ya da hedefi zaten uygulamalı bir meslek olan aday için önlisans (2 yıllık) programlar güçlü bir rotadır. Türkiye'deki yükseköğretim kontenjanının büyük bölümü TYT puan türüyle öğrenci alan önlisans programlarındadır — yani seçenek evreni geniştir. + +## Önlisans ne zaman doğru tercih? + +- **Hedef meslek uygulamalıysa.** [Bilgisayar Programcılığı](/bolum/bilgisayar-programciligi), [Anestezi](/bolum/anestezi), [İlk ve Acil Yardım](/bolum/ilk-ve-acil-yardim) gibi programlar 2 yılda alana özgü istihdama bağlanır. +- **Lisansa köprü olarak.** DGS (Dikey Geçiş Sınavı) ile önlisans mezunları ilgili lisans bölümlerine geçebilir. "TYT'm iyi, AYT'm zayıf" profili için 2+ yıl planı — önlisans + DGS — düşük sıralamayla doğrudan zayıf bir lisansa gitmekten daha iyi sonuç verebilir. +- **Bir yıl daha sınav istemiyorsan.** Tekrar hazırlanmak yerine alanda ilerlemek isteyene zaman kazandırır. + +## Lisans lehine düşünmen gereken durumlar + +- Hedef meslek lisans diploması şart koşuyorsa (mühendislik, hukuk, tıp, öğretmenlik...). +- Sıralaman, gitmekten mutlu olacağın bir lisans programına yetiyorsa — sırf "üniversite kazandı" demek için istemediğin lisansa gitmek de, gereksiz yere önlisansa razı olmak da hatadır. Bandını görmek için [kaç sıralama ile hangi bölüme girebilirim](/rehber/kac-siralama-ile-hangi-bolume-girebilirim) rehberine bak. + +## TYT tablosunu doğru okumak + +Önlisans tercihinde üç ayrıntı belirleyicidir: + +1. **Sıralama TYT sıralamasıdır.** SAY/EA sıralamanla önlisans tablosu okuma; sonuç belgende TYT satırı ayrı yazar. +2. **Aynı programın tabanı okula göre uçurum yapar.** Büyükşehirdeki köklü bir MYO'nun programı ile küçük ilçe MYO'sunun aynı adlı programı arasında yüz binlerce sıra fark olabilir — [Bilgisayar Programcılığı tablosunda](/bolum/bilgisayar-programciligi) bunu net görürsün (395 program!). +3. **DGS planın varsa bölüm adına dikkat.** DGS'de hangi önlisanstan hangi lisansa geçilebildiği tablolarla sınırlıdır; hedef lisansı önce belirle, ona köprü olan önlisansı sonra seç. + +## Tercih listesi taktiği + +24 tercih hakkı lisans ve önlisansta **ortaktır** — aynı listeye ikisini de yazabilirsin. Ama farklı puan türlerinin sıralamaları karışacağı için düzeni şöyle kur: önce gitmeye razı olduğun lisans programları (kendi türünün sıralamasıyla), sonra önlisans bloğu (TYT sıralamasıyla). Her iki blokta da [ölü tercih](/rehber/olu-tercih-nedir) kuralları aynen geçerli. + +TYT sıralamanı [tercih robotuna](/tercih-robotu) girip türü "TYT" seçersen önlisans evrenini hayal/dengeli/garanti dilimleriyle görürsün; lisans sıralamanla da ayrı bir tarama yapıp iki listeyi yan yana koyman en sağlıklısı. diff --git a/content/rehber/siralama-sartlari-2026.md b/content/rehber/siralama-sartlari-2026.md new file mode 100644 index 0000000..93a2417 --- /dev/null +++ b/content/rehber/siralama-sartlari-2026.md @@ -0,0 +1,40 @@ +--- +baslik: Baraj ve Başarı Sıralaması Şartları 2026 (Tıp, Hukuk, Mühendislik, Öğretmenlik...) +aciklama: Bazı bölümleri istemek yetmez — YÖK'ün koyduğu başarı sıralaması şartını geçmek gerekir. Hangi bölümde hangi eşik var, tek tabloda. +tarih: 2026-07-18 +--- + +Bazı bölümler için puanın ve sıralaman "yetiyor" görünse bile, YÖK'ün belirlediği **başarı sıralaması şartını** sağlamıyorsan o bölümü tercih bile edemezsin. Bu şart taban sıralamasından farklıdır: taban, yerleşen son kişinin sıralamasıdır ve her yıl piyasada oluşur; **sıralama şartı** ise merkezî bir üst eşiktir — geçemeyen listeye yazamaz. + +## 2026'da sıralama şartı olan başlıca bölümler + +| Bölüm | Puan türü | Sıralama şartı | +| --- | --- | --- | +| [Tıp](/bolum/tip) | SAY | İlk 50 bin | +| [Hukuk](/bolum/hukuk) | EA | İlk 100 bin | +| [Diş Hekimliği](/bolum/dis-hekimligi) | SAY | İlk 80 bin | +| [Eczacılık](/bolum/eczacilik) | SAY | İlk 100 bin | +| Mühendislik programları (ör. [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi)) | SAY | İlk 300 bin | +| [Mimarlık](/bolum/mimarlik) | SAY | İlk 250 bin | +| Öğretmenlik programları (ör. [İlköğretim Matematik Öğretmenliği](/bolum/ilkogretim-matematik-ogretmenligi)) | İlgili tür | İlk 300 bin | + +Şartlar kılavuzla kesinleşir; tercih vermeden önce mutlaka ÖSYM kılavuzunun güncel maddesinden doğrula. (Eşikler son yıllarda sabit seyrediyor ama nihai söz her yıl kılavuzundur.) + +## Sıralama şartı ile taban sıralaması karışmasın + +İki örnekle netleşir: + +- Sıralaman SAY 45 bin olsun. Tıp için şartı (ilk 50 bin) **geçiyorsun** — tercih edebilirsin. Ama köklü devlet tıp fakültelerinin tabanı ilk 5-15 bin bandında kapanır; senin gerçekçi tıp evrenin tabanı 45 bine yakın olan fakültelerdir. Şartı geçmek yerleşmeyi garanti etmez. +- Sıralaman EA 130 bin olsun. Hukuk şartı ilk 100 bin olduğundan hukuk programlarını **hiç tercih edemezsin** — tabanı 130 binden geniş bir hukuk fakültesi olsa bile. Bu durumda enerjini şartı olmayan komşu bölümlere ([Kamu Yönetimi](/bolum/kamu-yonetimi), [Sosyal Hizmet](/bolum/sosyal-hizmet) vb.) yönlendirmek daha akıllıca. + +## Baraj puanları + +Sıralama şartından ayrı olarak tercih yapabilmek için puan türünde **baraj puanını** aşmış olman gerekir (TYT ve ilgili yerleştirme puanı barajları). Sonuç belgende puanın hesaplandıysa bu barajı geçmişsin demektir; ayrıca dert etme. + +## Ne yapmalı? + +1. Hedef bölümünün şartı var mı, kılavuzdan işaretle. +2. Şartı geçiyorsan gözünü tabana çevir: bölüm sayfasındaki tabloda ([örnek: Tıp](/bolum/tip)) kendi sıralamanın düştüğü bandı bul. +3. Şartı geçemiyorsan o bölümü listeden çıkar ve alternatif rotayı kur — [tercih robotu](/tercih-robotu) sıralamana uygun programları zaten şartlara göre süzülmüş tablolar üzerinden gösterir. + +Sıralama şartı acımasız görünür ama işlevi nettir: hem kontenjan enflasyonunu hem de "nasılsa yazayım" kalabalığını engeller. Senin işin, şartı geçtiğin bölümlerde tabanı doğru okumak. diff --git a/content/rehber/taban-puan-mi-siralama-mi.md b/content/rehber/taban-puan-mi-siralama-mi.md new file mode 100644 index 0000000..d8e4c7f --- /dev/null +++ b/content/rehber/taban-puan-mi-siralama-mi.md @@ -0,0 +1,33 @@ +--- +baslik: Taban Puan mı, Başarı Sıralaması mı? Tercihte Hangisine Bakılır? +aciklama: İki sayı da sonuç belgende yazıyor ama tercih listeni sadece biriyle kurmalısın. Neden sıralamanın kazandığının kısa ve net açıklaması. +tarih: 2026-07-21 +--- + +Kısa cevap: **başarı sıralamasına bakılır.** Taban puan, tabelada büyük yazan ama seni yanıltan sayıdır. Nedenini iki dakikada anlatalım. + +## Puan neden yanıltır? + +YKS puanı, sınavın o yılki zorluğuna ve aday kitlesinin performansına göre şekillenir. Sınav kolay geçtiyse herkesin puanı şişer; zor geçtiyse söner. 450 puan bir yıl ilk 30 bine, ertesi yıl ilk 60 bine denk gelebilir. Yani "geçen yıl bu bölüm 450 ile kapatmış, benim puanım 455, güvendeyim" cümlesi hatalıdır — iki farklı yılın puanları aynı cetvelle ölçülmez. + +## Sıralama neden güvenilir? + +Başarı sıralaması, seni o yıl sınava giren herkesle kıyaslar: "SAY'da 85.000'incisin" bilgisi yıldan yıla **karşılaştırılabilir** kalır. Bir programın geçen yılki taban *sıralaması* 90 bin ise, bu yıl 85 bininci aday için o program "dengeli" bölgededir — sınav kolay muydu zor muydu fark etmez, çünkü herkes aynı gemide. + +ÖSYM sonuç belgende her puan türü için ayrı sıralama yazar. Tercih listeni hangi türden kuruyorsan **o türün sıralamasını** kullan; SAY sıralamanla EA listesi kurmak elma-armut kıyasıdır. + +## Peki taban puan ne işe yarar? + +- Aynı yıl içinde iki programı kabaca kıyaslamaya, +- Ek yerleştirmede başvuru eşiği olarak (ek tercihte ilk yerleştirme taban puanı şart koşulur — detay [ek yerleştirme rehberinde](/rehber/ek-yerlestirme-2026)), +- Bir de haber sitelerine manşet olmaya. + +Liste kurarken açtığın her tabloda gözün **sıralama kolonunda** olmalı. Örneğin [Bilgisayar Mühendisliği taban puanları](/bolum/bilgisayar-muhendisligi) sayfasında programlar taban sıralamasına göre dizilir; puan kolonu yalnızca bağlam içindir. Aynısı [Hukuk](/bolum/hukuk) ve tüm diğer bölüm sayfaları için geçerli. + +## Uygulamada üç kural + +1. **Listeyi sıralamayla kur.** Her satırın son 3-4 yıllık taban sıralaması trendine bak; tek yıl yanıltır ([neden yanılttığını burada gösterdik](/rehber/taban-siralamalar-nasil-degisir)). +2. **Puan haberlerine kapılma.** "X bölümü 500 puanla öğrenci aldı" manşeti sana hiçbir şey söylemez; o yılın 500 puanı kaçıncı sıraysa bilgi odur. +3. **Sıralamanı doğru yerden oku.** ÖSYM sonuç belgesindeki, kendi puan türünün "başarı sırası" satırı. OBP eklenmiş/eklenmemiş karışıklığına dikkat — tercihte kullanılan, yerleştirme puanına ait sıralamadır. + +Sıralamanı biliyorsan gerisi mekanik: [tercih robotuna](/tercih-robotu) gir, sıralamana uygun programları hayal/dengeli/garanti dilimleriyle gör, listeni veriyle kur. diff --git a/content/rehber/taban-siralamalar-nasil-degisir.md b/content/rehber/taban-siralamalar-nasil-degisir.md new file mode 100644 index 0000000..21c1437 --- /dev/null +++ b/content/rehber/taban-siralamalar-nasil-degisir.md @@ -0,0 +1,39 @@ +--- +baslik: Taban Sıralamalar Yıldan Yıla Ne Kadar Değişir? +aciklama: "Geçen yıl 90 bin kapatmış, ben 85 binim, garanti" demeden önce oku — tabanları oynatan beş mekanizma ve trend okumanın doğru yolu. +tarih: 2026-07-16 +--- + +Tercih listeni geçen yılın tabanlarıyla kuruyorsun ama yerleşmeni **bu yılın** tabanları belirleyecek. Aradaki fark bazen birkaç bin, bazen yüz binlerce sıra. Bu yazı tabanları neyin oynattığını ve trendi nasıl okuyacağını anlatıyor. + +## Tabanı oynatan mekanizmalar + +**1) Kontenjan değişimi.** En mekanik etki: bir program kontenjanını 60'tan 90'a çıkarırsa taban gevşer; 90'dan 60'a inerse sıkılaşır. Bölüm sayfalarındaki kontenjan kolonunu yıllar arasında kıyaslamak bu yüzden önemli. + +**2) Aday davranışı (sürü etkisi).** "Geçen yıl çok kapattı" diye herkes bir programdan kaçarsa taban gevşer; "gevşedi" diye ertesi yıl herkes geri dönerse tekrar sıkılaşır. Tabanlar bu yüzden testere dişi gibi salınabilir — tek yıla bakan, testere dişinin tepesinden ya da dibinden ölçüm alır. + +**3) Yeni açılan programlar.** Bir şehirde yeni fakülte açılınca hem kendi tabanı belirsiz olur hem çevresindeki programların tabanını seyreltir. + +**4) Şartlar ve politika değişiklikleri.** Başarı sıralaması şartının gelmesi/eşiğin değişmesi, burs oranlarının değişmesi, öğretim dilinin değişmesi tabanı sıçratır. ([Şartların güncel listesi burada.](/rehber/siralama-sartlari-2026)) + +**5) Ekonomi ve istihdam algısı.** Mezun istihdamına dair haber akışı bile birkaç yıl içinde bir bölümün talebini görünür şekilde değiştirir — son yıllarda kimi mühendisliklerde ve sağlık programlarında bunun örnekleri yaşandı. + +## Trend nasıl okunur? + +Tek yılın tabanı **fotoğraf**, dört yılın tabanı **film**dir. Film izle: + +- **İstikrarlı taban** (dört yıl üst üste dar bantta): güvenilir referans. Sıralaman tabana yakınsa "dengeli", belirgin gerisindeyse "garanti" davranabilirsin. +- **Tek yönlü trend** (her yıl sıkılaşıyor): geçen yılın tabanına güvenme; bu yıl daha da sıkılaşacağını varsayıp payla yaklaş. Popüler bölümlerde sık görülür — [Psikoloji](/bolum/psikoloji) ve [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi) tablolarında 2024-2025 kolonlarını yan yana koyup bak. +- **Testere dişi** (bir sıkı bir gevşek): sürü etkisi işliyor demektir; ortalamayı referans al, uç yıla değil. +- **Veri boşluğu** (bazı yıllar "—"): yeni ya da o yıl dolmamış program; belirsizlik yüksek, listende dengeli değil garanti bölgesine koyma, hayal bölgesine koy. + +Bölüm sayfalarımızdaki tablolarda 2025 sıralamasının yanında 2024 kolonu ve değişim yönü işareti (▲/▼) tam bu iş için var. + +## Listeye nasıl yansıtılır? + +1. Her satır için son 4 yılın tabanına bak; tek yıl asla yeterli değil. +2. Sıkılaşma trendindeki programları bir kademe yukarı say ("dengeli" sandığın aslında "hayal" olabilir). +3. Gevşeme trendindeki programlara erken sevinme; sürü geri dönebilir. +4. Belirsizliği [dengeli bir listeyle](/rehber/tercih-listesi-nasil-yapilir) yönet: trend ne yaparsa yapsın, hayal/dengeli/garanti dağılımı düzgün kurulmuş bir liste boşta bırakmaz. + +[Tercih robotu](/tercih-robotu) bu analizi senin yerine yapar: sıralamanı girdiğinde programları yalnızca son tabana göre değil, çok yıllı veriyle dilimleyerek gösterir. diff --git a/content/rehber/tercih-listesi-nasil-yapilir.md b/content/rehber/tercih-listesi-nasil-yapilir.md new file mode 100644 index 0000000..c157c96 --- /dev/null +++ b/content/rehber/tercih-listesi-nasil-yapilir.md @@ -0,0 +1,36 @@ +--- +baslik: YKS Tercih Listesi Nasıl Yapılır? (2026 Rehberi) +aciklama: 24 tercihlik listeyi dilim dilim kurmanın adım adım yöntemi — hangi tercihi kaçıncı sıraya, neden yazacağını bilerek. +tarih: 2026-07-25 +--- + +Tercih listesi kurmanın tek doğru yolu yok; ama boşta bırakan yanlış yolları belli. Bu rehber, ÖSYM'nin tanıdığı 24 tercih hakkını **hayal / dengeli / garanti** mantığıyla nasıl dağıtacağını anlatıyor. + +## Önce ölçüyü düzelt: puan değil, sıralama + +Tercihin tek sağlam ölçüsü **başarı sıralamandır**. Puanlar her yıl sınavın zorluğuna göre kayar; aynı puan bir yıl 80 bininci, ertesi yıl 120 bininci sıraya denk gelebilir. ÖSYM sonuç belgende her puan türü için ayrı sıralaman yazar — listeyi o satıra göre kur. Bu konunun detayı için [Taban puan mı, başarı sıralaması mı?](/rehber/taban-puan-mi-siralama-mi) yazısına bak. + +## Listenin üç bölgesi + +**1) Hayal tercihleri (ilk 4-8 sıra).** Taban sıralaması seninkinden *daha iyi* kapatan ama çok istediğin programlar. "Sıralamam yetmez, boşa gider" korkusu yersizdir: bir programı üst sıraya yazmak, alttaki tercihlere yerleşme ihtimalini **azaltmaz**. ÖSYM sistemi yukarıdan aşağı bakar; hayal tutmazsa sıradakine geçer. Tabanlar her yıl oynar — geçen yıl 5 bin kapatmış bir bölüm bu yıl 8 bine gevşeyebilir. + +**2) Dengeli tercihler (orta blok, 8-12 sıra).** Taban sıralaması senin sıralamana yakın programlar. Listenin kalbi burasıdır; yerleşme ihtimalinin en yüksek olduğu bölge. Aynı bölümün farklı şehirlerdeki/üniversitelerdeki versiyonlarını sıralama sırasıyla diz. + +**3) Garanti tercihleri (son 4-6 sıra).** Taban sıralaması seninkinden belirgin şekilde geniş programlar. Buradaki altın kural: **yerleşsen kayıt yaptırmayacağın hiçbir programı yazma.** Garanti dilimi "razı olacağın en makul seçenek" demektir, "ne olursa olsun bir yere gireyim" demek değil. Kayıt yaptırmayacağın bir yere yerleşirsen hem bir yılın gider hem de ek yerleştirmeye başvuramazsın. + +## Sık yapılan hatalar + +- **Tek yıla bakmak.** 2025 tabanı tek başına yanıltır; en az son 3-4 yılın trendine bak. Tabanların yıldan yıla nasıl oynadığını [Taban sıralamalar yıldan yıla ne kadar değişir?](/rehber/taban-siralamalar-nasil-degisir) yazısında verilerle gösterdik. +- **24'ü doldurmak için doldurmak.** Okumayacağın bölümü listeye eklemek hata; 16 gerçekçi tercih, 24 gelişigüzel tercihten iyidir. +- **"Ölü tercih" yazmak.** Tabanı senin sıralamandan çok daha iyi olan bir programı listenin *sonlarına* yazmak o satırı çöpe atar — üstteki tercihlerinden birine yerleşmişsen oraya sıra zaten gelmez. Detay: [Ölü tercih nedir?](/rehber/olu-tercih-nedir) +- **Sadece bölüme ya da sadece şehre kilitlenmek.** "Ne olursa olsun [Tıp](/bolum/tip)" diyorsan 24 tercihi de tıp yazabilirsin; ama "mühendislik olsun da hangisi olursa olsun" diyorsan [Bilgisayar Mühendisliği](/bolum/bilgisayar-muhendisligi), [Elektrik-Elektronik Mühendisliği](/bolum/elektrik-elektronik-muhendisligi) gibi yakın bölümleri karışık ve sıralama sırasıyla dizmek daha akıllıca. + +## Pratik akış + +1. Sıralamanı ve puan türünü not et. +2. Sıralamana uygun program evrenini çıkar — [tercih robotuna](/tercih-robotu) sıralamanı girerek hayal/dengeli/garanti dilimlerini saniyede görebilirsin. +3. İstemediklerini ele, kalanları *istek sırana* göre diz (yerleşme ihtimaline göre değil). +4. Son kontrol: listenin başı hayal mi, ortası dengeli mi, sonu gerçekten garanti mi? Sonunda kayıt yaptırmayacağın program var mı? +5. ÖSYM AİS'e girerken listeyi bir kez daha kod kod doğrula. + +Listeyi kurarken her satırın "neden burada" sorusuna cevabı olmalı. Cevabı yoksa o satır ya yanlış yerde ya da listede fazla. diff --git a/content/rehber/yks-tercih-takvimi-2026.md b/content/rehber/yks-tercih-takvimi-2026.md new file mode 100644 index 0000000..b1494b8 --- /dev/null +++ b/content/rehber/yks-tercih-takvimi-2026.md @@ -0,0 +1,37 @@ +--- +baslik: YKS 2026 Tercih Takvimi ve Süreç Adımları +aciklama: Sonuçların açıklanmasından ek yerleştirmeye — 2026 tercih döneminin tüm aşamaları, sıralı ve tek sayfada. +tarih: 2026-07-20 +--- + +Tercih dönemi kısa ve her adımı tarihli bir süreçtir. 2026'nın akışı şöyle işliyor (kesin tarihler için tek resmî kaynak ÖSYM duyurularıdır; buradaki çerçeve genel akışı gösterir): + +## Sürecin aşamaları + +**1) YKS sonuçlarının açıklanması (Temmuz ortası-sonu).** +ÖSYM sonuç belgende puanların ve her puan türü için **başarı sıralaman** yazar. Tercihte kullanacağın sayı budur — puan değil ([neden olduğunu burada anlattık](/rehber/taban-puan-mi-siralama-mi)). + +**2) Tercih kılavuzunun ve kontenjanların yayımlanması.** +ÖSYM Yükseköğretim Programları ve Kontenjanları Kılavuzu'nu yayımlar; YÖK Atlas verileri güncellenir. Hangi programın kaç kişi alacağı ve geçen yılların tabanları netleşir. + +**3) Tercih dönemi (Temmuz sonu — Ağustos başı, ~2 hafta).** +2026'da tercihler 29 Temmuz - 10 Ağustos arasında alındı. Tercihler ÖSYM AİS (Aday İşlemleri Sistemi) üzerinden girilir; en fazla **24 tercih** hakkın vardır. Liste kurma yöntemi için [tercih listesi rehberine](/rehber/tercih-listesi-nasil-yapilir) bak; sıralamana uygun programları görmek için [tercih robotunu](/tercih-robotu) kullan. + +**4) Yerleştirme sonuçlarının açıklanması (Ağustos).** +Tercih döneminin kapanmasından yaklaşık 2-3 hafta sonra. Sonuçla birlikte her programın o yılki gerçek taban puanı ve sıralaması da netleşir. + +**5) Kayıt dönemi (Ağustos sonu — Eylül başı).** +Yerleştiğin programa e-Devlet üzerinden veya üniversiteye giderek kayıt yaptırırsın. Kayıt süresini kaçırmak hakkın yanması demektir — tarihleri takvimine işaretle. + +**6) Ek yerleştirme (Eylül).** +Boş kalan kontenjanlar için ikinci tur. Kritik kural: ilk yerleştirmede bir programa yerleşen, **kayıt yaptırmasa bile** ek tercihe başvuramaz. Detaylar [ek yerleştirme rehberinde](/rehber/ek-yerlestirme-2026). + +## Tercih haftası için pratik plan + +- **1. gün:** Sıralamanı doğrula, puan türünü netleştir. +- **2-3. gün:** Program evrenini çıkar. [Bölüm taban puanları](/bolumler) tablolarında ilgilendiğin bölümlerin son yıllardaki tabanlarını incele; [Psikoloji](/bolum/psikoloji) gibi geniş bölümlerde aralığın ne kadar açıldığını görmek ufuk açar. +- **4-5. gün:** Taslak listeyi kur: üstte hayal, ortada dengeli, altta gerçekten gideceğin garanti. +- **6. gün:** Ölü tercih taraması yap ([nasıl yapılır](/rehber/olu-tercih-nedir)), aile onayını al, üniversitelerin özel şartlarını (kılavuz dipnotlarını) oku. +- **Son gün değil, son günden önce:** AİS'e gir, listeyi kod kod işle, onayla, çıktısını sakla. Sistem son saatlerde yoğunluktan yavaşlar — son güne bırakma. + +Tercih dönemi stresli görünür ama takvimi bilen için sadece sıralı bir yapılacaklar listesidir. Adımları sırayla yürü, kararlarını veriyle ver. diff --git a/data/app.db b/data/app.db index b775651472d3aff37171b493df2b9c700a619a49..7b88dcef8ae38dc0119bc24b9102e428fd32782e 100644 GIT binary patch delta 9366 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 O`Jba&J*g9i!SdgPL3 diff --git a/data/yokatlas.db b/data/yokatlas.db index 95161481dbb2c1daad1ca0c8af7db2fefd52e402..591c0b61209abc3fe7cf530e8ac34723bca3cc41 100644 GIT binary patch delta 717099 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

>oV}F{)cN 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

aN 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 z zu0eNB?o)@|7V~s-H*;-s0qK!+PTDTbmU>C`q{8%?qh&dnmQ0~#DAcAa^mOR#<=|}a zGVoIH67XX1BJe`+0`PqBJn&rb9Pn)LEbvV54DfXDH1JgL6!2v5B=AJ=1h5y(>-_LJ z91rnv;IZH_;L+ew;Mc$-!6U%K!Nb5q!9&1Vzn1WBR{~cA zR{)m>CxFX=%YxxORmwoTG`JMFBsdNn3yuMo02c=r14o04f{TEoz=gquzy-mP-~!+X za5y*&92&4!$**~?m$&Ta>wVW8S5H?RR|Ji|`a`;t}xpI~cC zL(Sckz5Xy|Iv7be?7bze7FxMtueykmY&KM*XpH%JWt%cX>8d2s)Z4q3v$PQCG8!?` zmeL*+vY2QJ)KSVMH$(1A$q(WwYyDs5^ECN(xp@qwK&WMoqU@VDXe{0)X%;0yXd#u8 zf=v%7slzM(d_!WA+SE_VervN5qAEOO+qaIAs_>9)HV@fm^N?*e57}n(kZm>(*=F;Q zZ8i_tX7iA3HV@fm^N?*e57}n(kZm>(*=F;QZ8i_tX7iA3HV@fm^N?*e57}n(kZm>( z*=F;QZ8i_tX7iA3HV@fm^N?*e57}n(kZm>(*=F;QZ8i_tW^<3%&SObYYCY~@WpfWJ zn|oN<+{4P|9#-}^{SGdhdsx}r!^-9!RyOyrvbl$q%{{Da?qOwf4=bB{SlQge%H|$c zHutcyxrdd_J*;f*VP$g*+1$g*<{nly_pq|Lhn3AetZeRKWpfWJn|oN<+{4P| z9#%H@u(G*_mCZe@Y`$~P<~#RnzH`s!JNIn9bI;~G_iXNAWpfWJn|oN<+{4P|9#%H@ zu(G*_mCZe@Z0=!YCK099T=cCR-={YO6zZx-O7BWFXdd0 zqMU3OEjww!v|g6FmV)wQ>cib8&y>5%wdDvJJb0RZi%c_jF(;ZsX@#S&sQRBQb)>=A zA*MTY^!h)2?5J5KY|ekq=KSaEW$@Ug z;3eS2;6>nt;056M;CbM=;5p#gV9tNe$2JqXS&-r;KLY(uT zbKDDY&VSDF@m1wv=4@$ms|sqH`QUlrx!^hA+2C2=ncx}V>ELPLso*K#$>2%giQoxf zFZgvZzQ%D79}6A>9t|D^eoY_StT!AodCnC#BF2fhG8Q}rJQ_R-49}^Ig!l;XaPY8z zy~9Vw+x

5m7(fLMI^H?)g}M)T`%aLo?p$kh^eY_E;lyk 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 H{OLacnkr|^ delta 588 zcmYMrNi#wL0KoD0D%DH%$`%rmeJA_AWM4v->_YZE%eBS|o6J2*$zm z348>9C;yq>@gEMqX~N%M>N~qtBM7>X@Sk*F>Q2)LiXbWSyYbU_E&I*S ziWmq!YL$*3{gdiNk#5y`@xbPAh&R5MS7}`|L|j^(&FfG_g3*AS5;e${%b58pW)`7> z8XCkw3mx>3U_d;KFyZf$VSyD1NJJ8nkpdf1k%n~GkpTxXk%eqHkpmZUk%xQ~pb$kU zMhQw$hH_M(5>=>%8#Sm!9qQ45Ml_)rEoem>+R=edbfFs_^q?1g=*IvCF@#}^U=&`A zVH^|iVG>iA#ti(J#T@3bfJH1}87l~26>C^W5F6OU7Phg2UF=~W2ROtLj&XtzPH~2F KC1$?Jbp8V7z~_?y diff --git a/next.config.ts b/next.config.ts index aacb5a6..4787c8d 100644 --- a/next.config.ts +++ b/next.config.ts @@ -11,6 +11,8 @@ const nextConfig: NextConfig = { return [ { source: "/rapor", destination: "/sonuc", permanent: false }, { source: "/sohbet", destination: "/listem", permanent: false }, + // Ayrı robot sayfası kaldırıldı; rehber içi linkler hero formuna düşer. + { source: "/tercih-robotu", destination: "/#hero-form", permanent: true }, ]; }, }; diff --git a/package.json b/package.json index 30a33ee..4cfa057 100644 --- a/package.json +++ b/package.json @@ -37,6 +37,7 @@ "remark-gfm": "^4.0.1", "resend": "^6.18.0", "shiki": "^4.3.1", + "simple-icons": "^16.27.1", "sonner": "^2.0.7", "tailwind-merge": "^3.6.0", "turkey-map-react": "^2.0.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4089a0d..c715dc9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -86,6 +86,9 @@ importers: shiki: specifier: ^4.3.1 version: 4.3.1 + simple-icons: + specifier: ^16.27.1 + version: 16.27.1 sonner: specifier: ^2.0.7 version: 2.0.7(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -4976,6 +4979,10 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-icons@16.27.1: + resolution: {integrity: sha512-slZF8iKxkv7Lb9SF3L1AcIl5iYLNvDrKKm8yV69cG66XvxJ12SX+bYTgxRwCY4bXSmklGXoXaKEyVmEypOCeqw==} + engines: {node: '>=0.12.18'} + sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -10658,6 +10665,8 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 + simple-icons@16.27.1: {} + sisteransi@1.0.5: {} smart-buffer@4.2.0: {} diff --git a/public/file.svg b/public/file.svg deleted file mode 100644 index 004145c..0000000 --- a/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/globe.svg b/public/globe.svg deleted file mode 100644 index 567f17b..0000000 --- a/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index 7705396..0000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/window.svg b/public/window.svg deleted file mode 100644 index b2b2a44..0000000 --- a/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/scripts/db-index.ts b/scripts/db-index.ts index ff5252a..0fd6c43 100644 --- a/scripts/db-index.ts +++ b/scripts/db-index.ts @@ -17,6 +17,14 @@ db.exec(` ON programs (tur, onlisans, COALESCE(sira2025, sira2024)); `); +// Programatik SEO sayfaları (src/lib/katalog.ts) bölüm/üniversite detaylarını +// ham ada birebir IN (...) eşleşmesiyle çeker; bu iki index olmadan her +// sayfa tam tablo taraması yapar. +db.exec(` + CREATE INDEX IF NOT EXISTS idx_programs_isim ON programs (isim); + CREATE INDEX IF NOT EXISTS idx_programs_universite ON programs (universite); +`); + // Uygulama DB'yi readonly açtığı için checkpoint yapamaz; şişen WAL'i // (okuma başına ekstra maliyet) burada dosyaya geri yaz ve sıfırla. db.pragma("wal_checkpoint(TRUNCATE)"); diff --git a/src/app/api/facetler/route.ts b/src/app/api/facetler/route.ts index ffd2d0a..f353aec 100644 --- a/src/app/api/facetler/route.ts +++ b/src/app/api/facetler/route.ts @@ -1,9 +1,17 @@ import { NextResponse, type NextRequest } from "next/server"; -import { PUAN_TURLERI, rankWindowFacets, type PuanTuruKey } from "@/lib/db"; +import { + PUAN_TURLERI, + dilimAra, + rankWindowFacets, + type DilimKey, + type PuanTuruKey, +} from "@/lib/db"; +import { KATEGORILER } from "@/lib/kategoriler"; -// Ana sayfadaki sihirbaz modalı için: sıralamaya uygun kategori/il/üniversite -// tipi facet'leri. /sonuc bu veriyi server component'te doğrudan alır; burada -// client'tan sıra girildikten sonra çekilir. +// Sihirbaz modalı için: sıralamaya uygun kategori/il/üniversite tipi +// facet'leri. Kademeli filtre: `kategori` (tekrarlı) il adımını, +// `kategori` + `il` (tekrarlı) üniversite tipi adımını süzer — bir önceki +// adımın seçimi bir sonrakinin seçeneklerini daraltır (bkz. rankWindowFacets). export function GET(request: NextRequest) { const { searchParams } = request.nextUrl; const sira = Number.parseInt(searchParams.get("sira") ?? "", 10); @@ -18,5 +26,31 @@ export function GET(request: NextRequest) { ); } - return NextResponse.json({ facetler: rankWindowFacets(sira, tur) }); + const kategoriler = [ + ...new Set( + searchParams + .getAll("kategori") + .filter((k) => (KATEGORILER as readonly string[]).includes(k)), + ), + ]; + const iller = [ + ...new Set(searchParams.getAll("il").filter((i) => i.trim().length > 0)), + ].slice(0, 5); + + // ?dilimler=1: /meraklisina'daki canlı dilim şeridi için dilim başına + // toplam sayılar da eklenir (limit 0 → yalnızca COUNT çalışır) + const dilimToplam = + searchParams.get("dilimler") === "1" + ? Object.fromEntries( + (["hayal", "dengeli", "garanti"] as DilimKey[]).map((d) => [ + d, + dilimAra(sira, tur, d, { limit: 0 }).toplam, + ]), + ) + : undefined; + + return NextResponse.json({ + facetler: rankWindowFacets(sira, tur, { kategoriler, iller }), + ...(dilimToplam ? { dilimToplam } : {}), + }); } diff --git a/src/app/api/katalog-ara/route.ts b/src/app/api/katalog-ara/route.ts new file mode 100644 index 0000000..dd24382 --- /dev/null +++ b/src/app/api/katalog-ara/route.ts @@ -0,0 +1,86 @@ +import { NextResponse, type NextRequest } from "next/server"; +import { getAllBolumler, getAllUniversiteler } from "@/lib/katalog"; +import { trBaslikDuzeni } from "@/lib/slug"; + +const SONUC_SINIRI = 6; + +function normalize(metin: string): string { + return metin + .toLocaleLowerCase("tr-TR") + .replace(/ı/g, "i") + .replace(/ş/g, "s") + .replace(/ğ/g, "g") + .replace(/ü/g, "u") + .replace(/ö/g, "o") + .replace(/ç/g, "c") + .replace(/â/g, "a") + .replace(/î/g, "i") + .replace(/û/g, "u") + .normalize("NFKD") + .replace(/[̀-ͯ]/g, ""); +} + +function eslesmePuani(ad: string, sorgu: string): number { + const normalAd = normalize(ad); + if (normalAd === sorgu) return 0; + if (normalAd.startsWith(sorgu)) return 1; + if (normalAd.split(/\s+/).some((kelime) => kelime.startsWith(sorgu))) return 2; + return 3; +} + +export function GET(request: NextRequest) { + const hamSorgu = request.nextUrl.searchParams.get("q")?.trim() ?? ""; + const sorgu = normalize(hamSorgu).slice(0, 80); + + if (sorgu.length < 2) { + return NextResponse.json({ bolumler: [], universiteler: [] }); + } + + const bolumler = getAllBolumler() + .filter((bolum) => normalize(bolum.ad).includes(sorgu)) + .sort( + (a, b) => + eslesmePuani(a.ad, sorgu) - eslesmePuani(b.ad, sorgu) || + b.programSayisi - a.programSayisi, + ) + .slice(0, SONUC_SINIRI) + .map((bolum) => ({ + href: `/bolum/${bolum.slug}`, + ad: bolum.ad, + programSayisi: bolum.programSayisi, + enIyiSira: bolum.enIyiSira, + seviye: + bolum.lisans && bolum.onlisans + ? "Lisans ve önlisans" + : bolum.lisans + ? "Lisans" + : "Önlisans", + })); + + const universiteler = getAllUniversiteler() + .filter((universite) => normalize(universite.ad).includes(sorgu)) + .sort( + (a, b) => + eslesmePuani(a.ad, sorgu) - eslesmePuani(b.ad, sorgu) || + b.programSayisi - a.programSayisi, + ) + .slice(0, SONUC_SINIRI) + .map((universite) => ({ + href: `/universite/${universite.slug}`, + ad: universite.ad, + il: universite.il ? trBaslikDuzeni(universite.il) : null, + tur: + universite.unitur === "DEVLET" + ? "Devlet" + : universite.unitur && + ["VAKIF", "VAKIF MYO"].includes(universite.unitur) + ? "Vakıf" + : universite.unitur + ? "KKTC / Yurt dışı" + : null, + programSayisi: universite.programSayisi, + fakulteSayisi: universite.fakulteSayisi, + })); + + return NextResponse.json({ bolumler, universiteler }); +} diff --git a/src/app/api/programlar/route.ts b/src/app/api/programlar/route.ts new file mode 100644 index 0000000..1d0e348 --- /dev/null +++ b/src/app/api/programlar/route.ts @@ -0,0 +1,43 @@ +import { NextResponse, type NextRequest } from "next/server"; +import { + PUAN_TURLERI, + dilimAra, + type DilimKey, + type PuanTuruKey, +} from "@/lib/db"; + +const SAYFA_BOYU = 20; + +const DILIMLER: DilimKey[] = ["hayal", "dengeli", "garanti"]; + +// Sonuç sayfasındaki ham tablonun "daha fazla göster" sayfalaması: dilim +// başına SAYFA_BOYU program, yakından uzağa sıralı. İlk sayfa server +// component'te render edilir (bkz. sonuc/page.tsx); devamı buradan akar. +export function GET(request: NextRequest) { + const { searchParams } = request.nextUrl; + const sira = Number.parseInt(searchParams.get("sira") ?? "", 10); + const turParam = searchParams.get("tur") ?? "say"; + const tur: PuanTuruKey = + turParam in PUAN_TURLERI ? (turParam as PuanTuruKey) : "say"; + const dilimParam = searchParams.get("dilim") ?? ""; + const offset = Number.parseInt(searchParams.get("offset") ?? "0", 10); + + if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) { + return NextResponse.json( + { error: "Geçerli bir sıralama gerekli." }, + { status: 400 }, + ); + } + if (!DILIMLER.includes(dilimParam as DilimKey)) { + return NextResponse.json({ error: "Geçersiz dilim." }, { status: 400 }); + } + if (!Number.isFinite(offset) || offset < 0 || offset > 100_000) { + return NextResponse.json({ error: "Geçersiz offset." }, { status: 400 }); + } + + const { programlar, toplam } = dilimAra(sira, tur, dilimParam as DilimKey, { + limit: SAYFA_BOYU, + offset, + }); + return NextResponse.json({ programlar, toplam }); +} diff --git a/src/app/bolum/[slug]/bolum-icerik.tsx b/src/app/bolum/[slug]/bolum-icerik.tsx new file mode 100644 index 0000000..9280391 --- /dev/null +++ b/src/app/bolum/[slug]/bolum-icerik.tsx @@ -0,0 +1,129 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { notFound } from "next/navigation"; +import { ChevronRight } from "lucide-react"; +import { getBolumBySlug, uniSlugFromAd } from "@/lib/katalog"; +import { JsonLd, breadcrumbJsonLd } from "@/lib/seo"; +import { Sayfalama, SAYFA_BOYU } from "@/components/sayfalama"; +import { BolumProgramListesi } from "@/components/bolum-program-listesi"; + +const sayi = (n: number) => n.toLocaleString("tr-TR"); + +export function bolumToplamSayfa(programSayisi: number): number { + return Math.max(1, Math.ceil(programSayisi / SAYFA_BOYU)); +} + +export function bolumSayfaMetadata(slug: string, sayfa: number): Metadata { + const bolum = getBolumBySlug(slug); + if (!bolum) return {}; + const { stats } = bolum; + if (sayfa > 1) { + return { + title: `${bolum.ad} Taban Puanları 2026 (Sayfa ${sayfa})`, + description: `${bolum.ad} taban puanları ve başarı sıralamaları tablosunun ${sayfa}. sayfası — toplam ${stats.toplam} programın 2025 yerleştirme verileri.`, + alternates: { canonical: `/bolum/${slug}/sayfa/${sayfa}` }, + }; + } + const enIyi = + stats.minSira != null + ? ` En iyi taban sıralaması ${sayi(stats.minSira)}.` + : ""; + return { + title: `${bolum.ad} Taban Puanları ve Başarı Sıralamaları 2026`, + description: `${bolum.ad} 2025 yerleştirme verileri: ${stats.toplam} programın taban puanı ve sıralaması, ${stats.devlet} devlet / ${stats.vakif} vakıf.${enIyi} 2026 tercih rehberi.`, + alternates: { canonical: `/bolum/${slug}` }, + }; +} + +export function BolumIcerik({ slug, sayfa }: { slug: string; sayfa: number }) { + const bolum = getBolumBySlug(slug); + if (!bolum) notFound(); + + const tumProgramlar = [ + ...bolum.lisansProgramlari, + ...bolum.onlisansProgramlari, + ]; + const toplamSayfa = bolumToplamSayfa(tumProgramlar.length); + if (sayfa < 1 || sayfa > toplamSayfa) notFound(); + const dilim = tumProgramlar.slice( + (sayfa - 1) * SAYFA_BOYU, + sayfa * SAYFA_BOYU, + ); + const ilkSayfa = sayfa === 1; + const buYol = ilkSayfa ? `/bolum/${slug}` : `/bolum/${slug}/sayfa/${sayfa}`; + + return ( +

+ + + + +
+

+ {bolum.ad} +

+

+ {sayi(tumProgramlar.length)} üniversite programının 2025 taban + puanlarını, başarı sıralamalarını ve kontenjanlarını incele + {!ilkSayfa ? ` — sayfa ${sayfa}` : ""}. +

+
+ +
+
+

+ Üniversite programları +

+ + {sayi(tumProgramlar.length)} program + +
+ + ({ + ...program, + universiteSlug: uniSlugFromAd(program.universite), + }))} + bazAd={bolum.ad} + /> +
+ + +
+ ); +} diff --git a/src/app/bolum/[slug]/page.tsx b/src/app/bolum/[slug]/page.tsx new file mode 100644 index 0000000..675939e --- /dev/null +++ b/src/app/bolum/[slug]/page.tsx @@ -0,0 +1,28 @@ +import type { Metadata } from "next"; +import { getAllBolumSlugs } from "@/lib/katalog"; +import { BolumIcerik, bolumSayfaMetadata } from "./bolum-icerik"; + +// Tüm bölümler build sırasında bilinir (veri ancak ingest + deploy ile +// değişir); bilinmeyen slug getBolumBySlug'dan null dönüp notFound()'a düşer. +// (dynamicParams cacheComponents ile uyumsuz olduğundan kullanılamıyor.) +export function generateStaticParams() { + return getAllBolumSlugs().map((slug) => ({ slug })); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string }>; +}): Promise { + const { slug } = await params; + return bolumSayfaMetadata(slug, 1); +} + +export default async function BolumPage({ + params, +}: { + params: Promise<{ slug: string }>; +}) { + const { slug } = await params; + return ; +} diff --git a/src/app/bolum/[slug]/sayfa/[no]/page.tsx b/src/app/bolum/[slug]/sayfa/[no]/page.tsx new file mode 100644 index 0000000..d1d6b19 --- /dev/null +++ b/src/app/bolum/[slug]/sayfa/[no]/page.tsx @@ -0,0 +1,47 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { getAllBolumler } from "@/lib/katalog"; +import { + BolumIcerik, + bolumSayfaMetadata, + bolumToplamSayfa, +} from "../../bolum-icerik"; + +// Yalnızca 1'den fazla sayfası olan bölümler için 2..N sayfaları üretilir; +// 1. sayfa taban rota (/bolum/[slug]) olduğundan burada üretilmez. +export function generateStaticParams() { + return getAllBolumler().flatMap((b) => { + const toplam = bolumToplamSayfa(b.programSayisi); + return Array.from({ length: Math.max(0, toplam - 1) }, (_, i) => ({ + slug: b.slug, + no: String(i + 2), + })); + }); +} + +function sayfaNo(no: string): number | null { + const n = Number(no); + return Number.isInteger(n) && n >= 2 ? n : null; +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string; no: string }>; +}): Promise { + const { slug, no } = await params; + const n = sayfaNo(no); + if (n == null) return {}; + return bolumSayfaMetadata(slug, n); +} + +export default async function BolumSayfaPage({ + params, +}: { + params: Promise<{ slug: string; no: string }>; +}) { + const { slug, no } = await params; + const n = sayfaNo(no); + if (n == null) notFound(); + return ; +} diff --git a/src/app/bolumler/page.tsx b/src/app/bolumler/page.tsx new file mode 100644 index 0000000..813dba7 --- /dev/null +++ b/src/app/bolumler/page.tsx @@ -0,0 +1,123 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { getAllBolumler, type BolumOzet } from "@/lib/katalog"; +import { KATEGORILER } from "@/lib/kategoriler"; +import { JsonLd, breadcrumbJsonLd } from "@/lib/seo"; +import { CtaSiraForm } from "@/components/cta-sira-form"; +import { SiteFooter } from "@/components/site-footer"; +import { PagePixelDivider } from "@/components/pixel-decor"; + +export const metadata: Metadata = { + title: "Tüm Bölümlerin Taban Puanları ve Sıralamaları 2026", + description: + "Üniversite bölümlerinin 2025 yerleştirme taban puanları ve başarı sıralamaları: lisans ve önlisans programları kategori kategori, 2026 tercihleri için.", + alternates: { canonical: "/bolumler" }, +}; + +const sayi = (n: number) => n.toLocaleString("tr-TR"); + +function BolumLinkleri({ bolumler }: { bolumler: BolumOzet[] }) { + return ( +
    + {bolumler.map((b) => ( +
  • + + {b.ad} + + {sayi(b.programSayisi)} + + +
  • + ))} +
+ ); +} + +function KategoriGruplari({ + bolumler, + seviye, +}: { + bolumler: BolumOzet[]; + seviye: "lisans" | "onlisans"; +}) { + const kalanlar = new Set(bolumler.map((b) => b.slug)); + const gruplar = KATEGORILER.map((kategori) => { + const uyeler = bolumler.filter((b) => + (b.kategoriler as readonly string[]).includes(kategori), + ); + for (const b of uyeler) kalanlar.delete(b.slug); + return { kategori: kategori as string, uyeler }; + }).filter((g) => g.uyeler.length > 0); + const diger = bolumler.filter((b) => kalanlar.has(b.slug)); + if (diger.length > 0) gruplar.push({ kategori: "Diğer", uyeler: diger }); + + return ( + <> + {gruplar.map(({ kategori, uyeler }) => ( +
+

+ {kategori} + + {sayi(uyeler.length)} bölüm + +

+ +
+ ))} + + ); +} + +export default function BolumlerPage() { + const hepsi = getAllBolumler(); + const lisans = hepsi.filter((b) => b.lisans); + const onlisans = hepsi.filter((b) => b.onlisans && !b.lisans); + + return ( + <> +
+ + +

+ Tüm Bölümlerin Taban Puanları ve Sıralamaları 2026 +

+

+ {sayi(hepsi.length)} bölümün 2025 YKS yerleştirme verileri: taban + puanları, başarı sıralamaları, kontenjanlar ve devlet/vakıf dağılımı. + Bölüme tıklayınca o bölümü sunan tüm üniversitelerin tablosunu + görürsün. Veriler YÖK Atlas 2025 yerleştirme sonuçlarına dayanır; 2026 + tercihleri için rehber niteliğindedir. +

+ + + +
+

+ Lisans Bölümleri (4 Yıllık) +

+ +
+ +
+ +
+ +
+

+ Önlisans Bölümleri (2 Yıllık — TYT) +

+ +
+
+ + + ); +} diff --git a/src/app/favicon-for-app/apple-icon.png b/src/app/favicon-for-app/apple-icon.png deleted file mode 100644 index 648ca9317fb27b82cec0fa4a83ffb65a36aea12c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2573 zcmcJRdpHw(8^@K!MywJ`*;c9TRk5KS8etaW$)R#6E95au%yFinFfqc`L6pQiLYW*M zbDA7FAt{T>>6!B>#hlNxcfHT`{{24hb-nK&zu)(|e)s*m?)&=Pzx#9D31@Ba3UYhp zq@<)2EGBw|7_yGXI~_oRfn1$juF_i*zyccXf{`}^TN{5*o( zDE>kF|3RWq0)jCpRFK5#`Ipt}-&QR@4~oXahmM0%QlNOt(^&g!8B>Bw0S*_SO@Y4U zIqv1dD+=Ab_CjSqNX^KB)IyyHd6+%@$sJ%i zQ@1VVRe#;d3u0QGwOd{84=zX7O|ENm`DVVfS*VzM|p84#!P(bz}MbQ=qt zG|)zjhq!}ou9CwU3ewR<;4(;xTul4 zK0uxgK}>X+xPsbz-+nSvBrF-Gvq9->Rjd-FU7bXCRK_ZC3xMft2Qxn4`4KvTpQ)MB2?ua! zQ7YcRsVt4Q@|FPp&bhvjE6JycGWUX2{VER{3PoLDLcN(Kx@yao?B}B!BGmCvsE==qV4=qe# zTx_{f(TEH0JXCK%|0;`lyfn*MoRi8S(PA0fu}FDtE#}PY!~*!{+t;y2l{R!h1PEz; z4~-V){PM8J4`0>9TZ%w!w7;zY-_M-bJ^C5d!W{Q=G?@WEKe#{93O}660CpXTW@M@=i zF0)*W$010Td|V7#E-oOw2a2wR4#k5Ad%5Hi_}D_7YWO|U4M36Y?*g( z5w$V<7bM3mtVbSyM{)nZ&U3~)E~L9nF6-A7YvImT%IB>}bbqs+gs&*~-jaWqZ5 zzqRxTzNp6ojTeJDO2B!!MuypeqsL>|&a&4}ggcT0mqV0chb#43h+?vQ*YqNTk-@Oy z7tuWdQ@;W<;eY3g*2wf2Elu;H27Z&K4~t(l8;Bd4vo%X0pZ)NB`^14s^?>4d7SCV@ zwq`3YAFA%}Z|*mLs@ZtnVFb3)btoagc+H6zsx|aI$8w9PYmq+fji-*A4rH_5#ndu`ICTjPbz@iiw^O7_ffF;| zb95t;dWqI6i=RqETuuF6vpm(tIHOs03NIz~Y50x(T8Q&c!9zUGgof`?6Rz{&MU~Rk zA^l4DljP6xMhOFdy5;xXXDU$qBW1ux#B_0^Ug9HZKmU@9K9nnX(yLx2v)Ka2gmR%@ zN(#;|C*7Y+@GMMH;bxj_-g)#^f}3i+{g*c5b@Sn+HZL(W_6{dqtzyQSXNne;+S+F)J&RtfJPf&{}g2b_L*3xnZLg{DVzCk!q|l4GgKN$sI?hw%D=4V zo+YPp$*)5&B&5aDe;Jg97)KC~C3CwxQS&7dP%X?XiiUo09uRExfniolRp0CLBMcqK z2J?O7Yz0pSnF5zC2*=Srj8ug#cin?U0vEolomV~1U3*$MUs}-8B>kv%M#SouqX^Hy zU^m{rj;l55!+aaQT*De1d?xkF?30Sdnale{B5TM0xirZ*Ibq@Zm|*B>KeP8!uE9kQ9T#{^}cpzVFq~x zbLpp(`!RjTXG>4iOWgT*NMqjg%$;?JXyzO5af4%OEIppjTR=v<ZJ4WVyhsD&FSQgSu?A;5 zw-NP3=4zuU+NioOCtKs#vHK=)6~3^N0nb3TnVvAGSyLoOZ^X@g4^0LVcrSOGU#*a| zq~euL>$xjP-VtMw8IhBE^Achb zt=)UIJbgc%TH419h{Vi&4U=4q6I#4+S^PCgO$)~l(}`%&sQWo4SUCVb*qi;IL@d2k X@&0Zh)n`>Q-$_}T*_&{U)CYCk|J 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 diff --git a/src/app/favicon-for-app/icon0.svg b/src/app/favicon-for-app/icon0.svg deleted file mode 100644 index 7251144..0000000 --- a/src/app/favicon-for-app/icon0.svg +++ /dev/null @@ -1 +0,0 @@ -RealFaviconGeneratorhttps://realfavicongenerator.net \ No newline at end of file diff --git a/src/app/favicon-for-app/icon1.png b/src/app/favicon-for-app/icon1.png deleted file mode 100644 index 19639ae09b70b9aad453afb3574a77a2537734ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2258 zcmV;@2rc)CP)GlZe?^SnVDAM000P0NklOKcTY7{?3Ijq$P2g)WTIRn=AFN-=^9V>If< zL-fdq|+NGJgmB0(V$5E7xKAX*>+BnXCAAH1YWTPOuf3lwS}_tBX-XXeh| zd~@$5x0m~x_c_Jtf`_?R=^pmTmkXZm%nu{hV5 z&Q#50s)j6?^c($${!7=;wNwU`6?S{_Df9|tsM_GhTAlF@t}!i#fnABpq_XKAbT0wg zD+GWVo$0$cV_*yu<)?8ys*ame0Lh;)*`BiX@!T6Q14d|7qEq-;@o)^eD{~^yf zU3Qt&HlYE~I9mWi`6_CoZ~zR=c#~$JVH+nXQCq3aLI6nU`WI#Da*D~MwucHJ4kH)4zbXHiEZqccDh`Q@g;=?*r>O1r{AG48egrvi0Xwha0}3b15}V$z1^fGuuf`t-VQ8RGeM~z;)Y4s#$m9I(=0J>} zR6SVN(IoUd^&wk%3P9)??(nUouMP~rHt@EcV1xYy>s9KES?*4k)Y}f;QXeb;az(xE zMe9~dr(6s`jj(<{txG2ZH@*en;)zn~XBJyUE!^?Su%z5|EF1uxM@y<-YAM@30NRKM z-MA%)cO4ZP0IATXPN7kc6gycm03ci10wDZSgJb|$fu)LkPrp1H=&}INm|hY9nVx=` z0OWfMay|XR#_dQCKx0}#0A7rIG*v?^reY-GT+yfsO({PBEXRl_YstY`xZp@cLvxpk z#Xl=}Yqf$GmnfLzLUjEb-zfOJQNi&J6+@$C1c2$+^8u)FQsC`j6)X2Bcx|OSqvz8r z%N5i$Dd@YUmIVM(=Il80>EC6ypy5#!vo|YvX{kTPPm9W*y+uJJdN%|a0i>d`#{;k% zBCd>SSbIQq?QZOd-ZZ+e^Z+;?&IV9zw~&rr71O>C&iIp3{lfVxs`LO-Zm9YW0LmJ% zb1{u{_MTQTr7lH5S*f zW`8&UXsA0H&8Uyy%hCCio|IYHh;}ay6Tp`QAd*p^?$&SsbT_*KKqA{$Q5vVz0Qx(@ zTN;7~(BJ7A0NLKr;+s$aBE!kxsUQJRXv%QG(3H~L5aSJ1l+Y|S08-zD;5O!48j?|R zV`HuXknJ6<{|E2w=W|fl*g$E#!DgY_~DgY_~LIzNNoiN4j-|PXW$mxInbgtg> z;5WL9X2rOWSzg1?SQPy1ZWvoP|ief10yD_?-I`Ge#PI5OfX0Baa3 z+eGZH<><6VZo_Dt3v>P>Kt8EqyOb50a-$pOf=7cfeoE%T zr@$|_x_3de9PMO7hBP*&VcBl?QE+zj>2?LGG9G|_WS#X?1_^+qA6f4jfVCmxWJ@xw zYqvDa_|bpE6XfZe6!Z_?9hha*&kDr%XUo_+-8BGfOVVvbbnk$MMLU!J*)PApph3Z< z{@kI7#-{fJH$EvrBO*8MC%q}}BrGLcG%DGDR>9lfdTV?N^lfTW5RK(Fz6D_8)Q|wY z>k7cQuoSz2S$SV6MMZbNij!R`j&(TKiB1(4`&6i7#qTLAfN_CYPC^q!k*om5g(f-) z&J{&60w7y^5}q!CWCV~iJl$!6M%a=OK+XgWHz`UL0Jfg~yeUf398VxMfI>-nGN!4@ z1fXb|s*H)+QUNF>QCqg73S+$uya@kBs#7}1^~8?tC49$Bm)3P2R1>H zBg>49(}V`#_{g%1*|E@v_8C8Y+KEVPm5L{zXXCPC#PelVJT_1?%D4 z@%2)4%7cB-cP~O>#q%&fdmQH62Z2xSb1ZYt{V*3ihQzYxVC'e bağlı ResizeObserver + // ile izliyor; html sabit %100 kalınca lazy yüklenen içerik sonrası limit + // bayatlıyor ve sayfa sonunda scroll kilitleniyor. html auto yükseklikte + // içerikle büyümeli, viewport tabanı body'deki min-h-dvh'den gelir. + className={`${calSans.variable} ${clarityCity.variable} ${geistMono.variable} ${bricolage.variable} antialiased`} > - + {/* Site geneli progressive blur — üst ve alt */}
{/* Dev süperadmin paneli — prod build'de hiç render edilmez */} {process.env.NODE_ENV !== "production" ? : null} + + ); diff --git a/src/app/listem/page.tsx b/src/app/listem/page.tsx index 6e22b1c..b201491 100644 --- a/src/app/listem/page.tsx +++ b/src/app/listem/page.tsx @@ -31,7 +31,8 @@ import { SohbetClient, type Mesaj } from "./sohbet-client"; import { RevizyonKutusu } from "./revizyon-kutusu"; export const metadata: Metadata = { - title: "Listem — KolayTercih", + title: "Listem", + robots: { index: false, follow: false }, }; const PAKET_FIYATI = (URUNLER.paket.amountKurus / 100).toLocaleString("tr-TR", { diff --git a/src/app/meraklisina/demo.tsx b/src/app/meraklisina/demo.tsx new file mode 100644 index 0000000..241622a --- /dev/null +++ b/src/app/meraklisina/demo.tsx @@ -0,0 +1,640 @@ +"use client"; + +// /meraklisina'nın canlı anlatım katmanı: kullanıcı kendi sıralamasını girer, +// dilim şeridi ve kademeli filtre hunisi o sıralamanın GERÇEK sayılarıyla +// güncellenir. Provider sayfadaki metin bölümlerini (RSC children) sarar; +// görseller context'ten okur, böylece tek girişle iki diyagram birden yaşar. + +import { + createContext, + useContext, + useEffect, + useRef, + useState, + type ReactNode, +} from "react"; +import type { DilimKey, SihirbazFacetleri } from "@/lib/db"; + +const TUR_SECENEKLERI = [ + { deger: "say", etiket: "Sayısal" }, + { deger: "ea", etiket: "Eşit Ağırlık" }, + { deger: "soz", etiket: "Sözel" }, + { deger: "dil", etiket: "Dil" }, + { deger: "tyt", etiket: "TYT" }, +] as const; + +export type DemoVeri = { + facetler: SihirbazFacetleri; + dilimToplam: Record; +}; + +type DemoDurum = { + sira: number; + tur: string; + veri: DemoVeri; + yukleniyor: boolean; + // Huni seçimleri ve kademeli facet cevapları + kategori: string | null; + il: string | null; + tip: "devlet" | "vakif" | null; + kategoriFacet: SihirbazFacetleri | null; // ?kategori= cevabı (iller buradan) + ilFacet: SihirbazFacetleri | null; // ?kategori&il cevabı (tipler buradan) + kategoriSec: (k: string | null) => void; + ilSec: (i: string | null) => void; + tipSec: (t: "devlet" | "vakif" | null) => void; + siraDegistir: (ham: string) => void; + turDegistir: (t: string) => void; + siraMetni: string; +}; + +const DemoContext = createContext(null); + +function useDemo(): DemoDurum { + const ctx = useContext(DemoContext); + if (!ctx) throw new Error("Demo bileşenleri SiralamaDemo içinde kullanılmalı"); + return ctx; +} + +async function facetGetir( + sira: number, + tur: string, + secim: { kategori?: string; il?: string; dilimler?: boolean }, + signal: AbortSignal, +): Promise<{ facetler: SihirbazFacetleri; dilimToplam?: Record } | null> { + const params = new URLSearchParams({ sira: String(sira), tur }); + if (secim.kategori) params.append("kategori", secim.kategori); + if (secim.il) params.append("il", secim.il); + if (secim.dilimler) params.set("dilimler", "1"); + try { + const res = await fetch(`/api/facetler?${params}`, { signal }); + if (!res.ok) return null; + return (await res.json()) as { + facetler: SihirbazFacetleri; + dilimToplam?: Record; + }; + } catch { + return null; + } +} + +export function SiralamaDemo({ + baslangicSira, + baslangicVeri, + children, +}: { + baslangicSira: number; + baslangicVeri: DemoVeri; + children: ReactNode; +}) { + const [siraMetni, setSiraMetni] = useState( + baslangicSira.toLocaleString("tr-TR"), + ); + const [sira, setSira] = useState(baslangicSira); + const [tur, setTur] = useState("say"); + const [veri, setVeri] = useState(baslangicVeri); + const [yukleniyor, setYukleniyor] = useState(false); + const [kategori, setKategori] = useState(null); + const [il, setIl] = useState(null); + const [tip, setTip] = useState<"devlet" | "vakif" | null>(null); + const [kategoriFacet, setKategoriFacet] = useState( + null, + ); + const [ilFacet, setIlFacet] = useState(null); + const zamanlayici = useRef | null>(null); + + // Sıralama/tür değişti → ana veriyi tazele, huni seçimlerini sıfırla + useEffect(() => { + if (sira === baslangicSira && tur === "say" && veri === baslangicVeri) { + return; // ilk render: sunucudan gelen veri zaten güncel + } + const ctrl = new AbortController(); + // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch başlangıç işareti + setYukleniyor(true); + setKategori(null); + setIl(null); + setTip(null); + setKategoriFacet(null); + setIlFacet(null); + facetGetir(sira, tur, { dilimler: true }, ctrl.signal) + .then((cevap) => { + if (!cevap?.dilimToplam) return; + setVeri({ facetler: cevap.facetler, dilimToplam: cevap.dilimToplam }); + }) + .finally(() => setYukleniyor(false)); + return () => ctrl.abort(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [sira, tur]); + + // Kategori seçildi → o kategorinin illerini getir + useEffect(() => { + if (!kategori) return; + const ctrl = new AbortController(); + facetGetir(sira, tur, { kategori }, ctrl.signal).then((cevap) => { + if (cevap) setKategoriFacet(cevap.facetler); + }); + return () => ctrl.abort(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [kategori]); + + // İl seçildi → kategori+il ile tipleri getir + useEffect(() => { + if (!kategori || !il) return; + const ctrl = new AbortController(); + facetGetir(sira, tur, { kategori, il }, ctrl.signal).then((cevap) => { + if (cevap) setIlFacet(cevap.facetler); + }); + return () => ctrl.abort(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [kategori, il]); + + function siraDegistir(ham: string) { + const rakamlar = ham.replace(/\D/g, "").slice(0, 7); + setSiraMetni(rakamlar ? Number(rakamlar).toLocaleString("tr-TR") : ""); + if (zamanlayici.current) clearTimeout(zamanlayici.current); + const deger = Number(rakamlar); + if (!deger || deger < 1 || deger > 4_000_000) return; + zamanlayici.current = setTimeout(() => setSira(deger), 450); + } + + const durum: DemoDurum = { + sira, + tur, + veri, + yukleniyor, + kategori, + il, + tip, + kategoriFacet, + ilFacet, + kategoriSec: (k) => { + setKategori(k); + setIl(null); + setTip(null); + setKategoriFacet(null); + setIlFacet(null); + }, + ilSec: (i) => { + setIl(i); + setTip(null); + setIlFacet(null); + }, + tipSec: setTip, + siraDegistir, + turDegistir: setTur, + siraMetni, + }; + + return {children}; +} + +/** Sıralama girişi + puan türü — iki diyagramı birden süren tek kumanda. */ +export function DemoKumanda() { + const { siraMetni, siraDegistir, tur, turDegistir, sira, yukleniyor } = + useDemo(); + return ( +
+ +
+ siraDegistir(e.target.value)} + placeholder="ör. 85.000" + className="h-11 w-full rounded-xl border border-slate-200 bg-white px-4 text-base font-medium tabular-nums outline-none transition-colors focus:border-primary sm:w-44" + /> +
+ {TUR_SECENEKLERI.map((t) => ( + + ))} +
+
+

+ {yukleniyor + ? "Hesaplanıyor…" + : `Aşağıdaki tüm sayılar ${sira.toLocaleString("tr-TR")}. sıradaki bir aday için gerçek YÖK Atlas verisidir.`} +

+
+ ); +} + +/** Sıralama ekseni: girilen sıraya göre dilim sınırları ve gerçek adetler. */ +export function DilimSeridiCanli() { + const { sira, veri, yukleniyor } = useDemo(); + const t = veri.dilimToplam; + const dengeliUst = Math.round(sira * 1.4); + const fmt = (n: number) => n.toLocaleString("tr-TR"); + + return ( +
+ + {/* eksen */} + + + 1. sıra (en iyi) + + + taban sıralaması büyüdükçe → + + + {/* hayal */} + + + Hayal + + + {fmt(t.hayal)} program + + + tabanı senden iyi + + + {/* aday işareti */} + + + SEN · {fmt(sira)}. + + + {/* dengeli */} + + + Dengeli + + + {fmt(t.dengeli)} program + + + {fmt(sira)}. – {fmt(dengeliUst)}. arası taban + + + {/* garanti */} + + + Garanti + + + {fmt(t.garanti)} program + + + {fmt(dengeliUst + 1)}. sonrası — sonu yok, sayfaladıkça uzar + + +
+ Liste her dilimde{" "} + + sana en yakın tabandan uzağa doğru + {" "} + sıralanır; “Daha fazla göster” dedikçe uzaktakiler gelir. +
+
+ ); +} + +function HuniCubugu({ + etiket, + adet, + oran, +}: { + etiket: string; + adet: number; + oran: number; +}) { + return ( +
+
+ {etiket} + + {adet.toLocaleString("tr-TR")} + +
+
+ ); +} + +function SecimCipleri({ + secenekler, + secili, + onSec, +}: { + secenekler: T[]; + secili: string | null; + onSec: (anahtar: string | null) => void; +}) { + return ( +
+ {secenekler.map((s) => ( + + ))} +
+ ); +} + +// AI listesinin dilim iskeleti: üstte hayal, ortada dengeli, sonda garanti. +// Ürünün risk renkleriyle boyanır; sayılar prompt'taki kuralın orta değeri. +const LISTE_ISKELETI: { dilim: string; adet: number; renk: string }[] = [ + { dilim: "hayal", adet: 5, renk: "bg-red-400" }, + { dilim: "dengeli", adet: 13, renk: "bg-amber-400" }, + { dilim: "garanti", adet: 6, renk: "bg-emerald-500" }, +]; + +/** Huninin finali: kalan havuzun yapay zekâya gidişi ve 24'lük listenin + iskeleti. Havuz 24'ün altına düşerse gevşetme kuralını canlı gösterir. */ +function YapayZekaAsamasi({ havuz }: { havuz: number }) { + const dar = havuz < 24; + return ( +
+

+ Sonra sıra yapay zekâda +

+

+ Seçimlerinden geriye kalan{" "} + + {havuz.toLocaleString("tr-TR")} programlık havuz + {" "} + yapay zekâya gider; o da bu havuzdan tam 24 tercih seçer ve şu iskelete + oturtur: +

+ + {/* 24 hücrelik liste şeridi — renk + metin birlikte (renk tek başına + anlam taşımaz) */} +
+
+ {LISTE_ISKELETI.flatMap((b) => + Array.from({ length: b.adet }, (_, i) => ( + + )), + )} +
+
+ + üstte 4–6 hayal + + + ortada 12–14{" "} + dengeli + + + sonda 5–7{" "} + garanti + +
+
+ +
    +
  • + · Havuzda olmayan bir bölümü yazamaz — listedeki her satırın kimliği + havuzla karşılaştırılır, uymayan liste yeniden ürettirilir. +
  • +
  • + · Her satıra tek cümlelik gerekçe ve bir risk notu ekler; sıraya neyi + neden koyduğu görünür. +
  • +
  • + · Önceliklerin (iş garantisi, maaş, prestij…) hangi programın öne + geçeceğini belirler. +
  • +
  • + · Havuz 24'ün altına düşerse filtreler adım adım gevşetilir — + önce il, sonra alan — ve bu, listende açıkça belirtilir. +
  • +
+ + {dar ? ( +

+ Bu seçimle havuz 24'ün altına düştü. Gerçek sihirbaz bu durumda + filtreleri adım adım gevşetir — önce il, sonra alan tercihi esnetilir + — ve bunu listende açıkça belirtir; liste her zaman 24'e + tamamlanır. +

+ ) : null} +
+ ); +} + +/** Kademeli filtre hunisi: gerçek sihirbaz mantığının oynanabilir kopyası. */ +export function HuniCanli() { + const { + veri, + yukleniyor, + kategori, + il, + tip, + kategoriFacet, + ilFacet, + kategoriSec, + ilSec, + tipSec, + } = useDemo(); + + const toplam = veri.facetler.toplam; + const kategoriAdet = + kategori != null + ? (veri.facetler.kategoriler.find((k) => k.ad === kategori)?.adet ?? 0) + : null; + const ilAdet = + il != null && kategoriFacet + ? (kategoriFacet.iller.find((i) => i.il === il)?.adet ?? 0) + : null; + const tipAdet = + tip != null && ilFacet + ? (ilFacet.uniturler.find((u) => u.grup === tip)?.adet ?? 0) + : null; + + const kategoriSecenekleri = veri.facetler.kategoriler.slice(0, 6).map((k) => ({ + anahtar: k.ad, + etiket: k.ad, + adet: k.adet, + })); + const ilSecenekleri = (kategoriFacet?.iller ?? []).slice(0, 6).map((i) => ({ + anahtar: i.il, + etiket: i.il.toLocaleLowerCase("tr-TR"), + adet: i.adet, + })); + const tipSecenekleri = (ilFacet?.uniturler ?? []).map((u) => ({ + anahtar: u.grup, + etiket: u.grup === "devlet" ? "Devlet" : "Vakıf", + adet: u.adet, + })); + + // Yapay zekâya giden havuz: huninin en derin (en son seçilmiş) katmanı + const havuz = tipAdet ?? ilAdet ?? kategoriAdet ?? toplam; + + return ( +
+ {/* Huni çubukları — her seçim bir çubuk daha ekler */} +
+
+ + +
+ {kategori != null && kategoriAdet != null ? ( +
+ + 1. + + 0 ? kategoriAdet / toplam : 0} + /> +
+ ) : null} + {il != null && ilAdet != null ? ( +
+ + 2. + + 0 ? ilAdet / toplam : 0} + /> +
+ ) : null} + {tip != null && tipAdet != null ? ( +
+ + 3. + + 0 ? tipAdet / toplam : 0} + /> +
+ ) : null} +
+ + {/* Seçim adımları — sihirbazın küçük, oynanabilir hali */} +
+
+

+ 1. Bir alan seç +

+ +
+ {kategori != null ? ( +
+

+ 2. Bir il seç{" "} + + (iller artık yalnızca “{kategori}” programlarını sayıyor) + +

+ {ilSecenekleri.length > 0 ? ( + + ) : ( +

Yükleniyor…

+ )} +
+ ) : null} + {kategori != null && il != null ? ( +
+

+ 3. Üniversite tipi seç{" "} + + (sayılar hem alanı hem ili hesaba katıyor) + +

+ {tipSecenekleri.length > 0 ? ( + tipSec(t as "devlet" | "vakif" | null)} + /> + ) : ( +

Yükleniyor…

+ )} +
+ ) : null} +
+ + +
+ ); +} diff --git a/src/app/meraklisina/page.tsx b/src/app/meraklisina/page.tsx new file mode 100644 index 0000000..27af064 --- /dev/null +++ b/src/app/meraklisina/page.tsx @@ -0,0 +1,189 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { ArrowRight } from "lucide-react"; +import { Parallax } from "@/components/parallax"; +import { PagePixelDivider } from "@/components/pixel-decor"; +import { dilimAra, rankWindowFacets, type DilimKey } from "@/lib/db"; +import { + DemoKumanda, + DilimSeridiCanli, + HuniCanli, + SiralamaDemo, + type DemoVeri, +} from "./demo"; + +export const metadata: Metadata = { + title: "Meraklısına: KolayTercih nasıl çalışır?", + alternates: { canonical: "/meraklisina" }, + description: + "Sıralamanı girdiğinde arka planda ne oluyor? Dilimler, risk renkleri ve sihirbazın adım adım daralan filtreleri — öğrenci diliyle, kendi sıralamanla deneyebileceğin canlı görsellerle.", +}; + +/** + * Algoritmanın öğrenci diline çevrilmiş anlatımı. Teknik detay (SQL, çarpan + * mutfağı) bilerek verilmez; amaç güven: veri gerçek, kurallar şeffaf. + * Görseller canlıdır: kullanıcı sıralamasını girer, dilim şeridi ve filtre + * hunisi o sıralamanın gerçek sayılarıyla güncellenir (bkz. demo.tsx). + * Diyagramlar ürünün risk renk dilini kullanır (yeşil/sarı/kırmızı) ve her + * bölge metinle de etiketlenir — renk tek başına anlam taşımaz. + */ + +// Demo ilk açılışta bu sıralamayla dolu gelir; SSR'da gerçek veriyle render +// edilir ki kullanıcı girmeden de sayfa anlamlı olsun. +const VARSAYILAN_SIRA = 100_000; + +export default function MeraklisinaPage() { + const dilimToplam = Object.fromEntries( + (["hayal", "dengeli", "garanti"] as DilimKey[]).map((d) => [ + d, + dilimAra(VARSAYILAN_SIRA, "say", d, { limit: 0 }).toplam, + ]), + ) as Record; + const baslangicVeri: DemoVeri = { + facetler: rankWindowFacets(VARSAYILAN_SIRA, "say"), + dilimToplam, + }; + + return ( +
+ +

+ Meraklısına +

+

+ Sıralamanı girince arka planda ne oluyor? +

+

+ Sihir yok, kara kutu yok: KolayTercih'in önerdiği her satır resmî + YÖK Atlas verisinden gelir ve hangi kurala göre önüne geldiği bellidir. + Bu sayfa o kuralları öğrenci diliyle anlatır — üstelik görseller + canlı: kendi sıralamanı gir, sayılar sana göre değişsin. +

+
+ + + + + +
+

+ 1. Her şey taban sıralamasıyla başlar +

+

+ Bir bölümün taban sıralaması, geçen yıl o bölüme + yerleşen son{" "} + öğrencinin Türkiye sıralamasıdır. Senin sıralaman bu sayıdan + küçükse (yani daha iyiysen), geçen yılın koşullarında o bölüme + yerleşebilirdin demektir. Sistemde her programın en güncel taban + sıralaması kayıtlıdır; bir bölümün 2025 verisi henüz oluşmamışsa + bir önceki yılınki kullanılır. +

+
+ + + +
+

+ 2. Programlar üç dilime ayrılır +

+

+ Sıralamanı girdiğinde tüm programlar senin konumuna göre üç kümeye + ayrılır: tabanı senden daha iyi olanlar{" "} + Hayal (şansını + denediğin satırlar), tabanı sıralamana{" "} + yakın olanlar{" "} + Dengeli{" "} + (listenin bel kemiği — sıralamanın yaklaşık yüzde kırk fazlasına + kadar pay bırakılır), tabanı{" "} + belirgin şekilde altında kalan her şey ise{" "} + Garanti{" "} + dilimidir. +

+ +

+ Garanti diliminin bir sonu yok: 87. sıradaki bir adayın da 500 + bininci sıradaki bir adayın da ulaşabildiği bütün{" "} + programlar listededir. Liste sana en yakın tabandan başlar; aşağı + indikçe ve “Daha fazla göster”e bastıkça senden + uzaklaşan seçenekler gelir. Böylece ilk gördüklerin her zaman en + isabetli adaylardır ama hiçbir seçenek senden saklanmaz. +

+
+ +
+

+ 3. Risk renkleri her yerde aynı dili konuşur +

+

+ Tabloda, haritada ve yapay zekâ listesinde gördüğün nokta ve + renkler tek bir kurala bağlıdır:{" "} + yeşil{" "} + tabanı sıralamanın belirgin altında (güvenli),{" "} + sarı{" "} + sıralamana yakın (az riskli),{" "} + kırmızı{" "} + tabanı senden iyi (riskli). Renk hangi sayfada olursa olsun aynı + hesaptan çıkar; bir satır sekme değiştirdi diye renk değiştirmez. +

+
+ +
+

+ 4. Sihirbaz süzer, yapay zekâ kurar +

+

+ “Listemi oluştur” sihirbazındaki üç adım birbirinden + bağımsız değildir. İlk adımda yalnızca{" "} + sıralamanla ulaşabildiğin{" "} + alanlar listelenir; ikinci adımdaki iller, seçtiğin alanlardaki + program sayısına göre yeniden hesaplanır; üçüncü adımdaki + devlet/vakıf sayıları da hem alan hem il seçimini hesaba katar. + Adımlar bitince elde kalan gerçek programlar bir{" "} + aday havuzu{" "} + olur ve yapay zekâya öyle gider: ona boş bir sayfa değil, bu havuz + verilir. Aşağıda kendin dene — her seçimin havuzu nasıl + daralttığını ve havuzun 24'lük listeye nasıl dönüştüğünü huni + canlı gösterir. +

+ +
+ +
+

+ 5. Dürüst olalım: bu bir tahmin aracıdır +

+

+ Tüm bu hesaplar geçen yılların{" "} + yerleştirme sonuçlarına dayanır. Kontenjanlar, tercih davranışları + ve puanlar her yıl değişir; geçen yıl “garanti” + görünen bir bölüm bu yıl dolabilir. Bu yüzden satırlarda son beş + yılın taban seyrini de gösteririz — çizgi yukarı tırmanıyorsa + bölüm zorlaşıyor demektir. KolayTercih karar destek{" "} + aracıdır; listenin son hâli ve sorumluluğu her zaman sana aittir. +

+
+ +
+

+ Kuralları öğrendin — şimdi kendi sıralamanla dene. +

+ + Sıralamanı gir + + +
+
+
+
+ ); +} diff --git a/src/app/odeme/sonuc/page.tsx b/src/app/odeme/sonuc/page.tsx index f6f7490..e6323ee 100644 --- a/src/app/odeme/sonuc/page.tsx +++ b/src/app/odeme/sonuc/page.tsx @@ -9,7 +9,8 @@ import { Button } from "@/components/ui/button"; import { PagePixelDivider } from "@/components/pixel-decor"; export const metadata: Metadata = { - title: "Ödeme Sonucu — KolayTercih", + title: "Ödeme Sonucu", + robots: { index: false, follow: false }, }; export default async function OdemeSonucPage({ diff --git a/src/app/opengraph-image.alt.txt b/src/app/opengraph-image.alt.txt new file mode 100644 index 0000000..e731f02 --- /dev/null +++ b/src/app/opengraph-image.alt.txt @@ -0,0 +1 @@ +KolayTercih — YKS tercihin, gerçek YÖK Atlas verisiyle. Sıralamanı gir, dengeli 24 tercihlik listeni al. diff --git a/src/app/opengraph-image.png b/src/app/opengraph-image.png new file mode 100644 index 0000000000000000000000000000000000000000..d6dcce3d33e1402ded7647e6914712c3c968a754 GIT binary patch literal 43788 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
+ + {/* Hero */}
- Nasıl çalışır? +
+ Nasıl çalışır? + {/* Kuralların şeffaf anlatımına köprü: /meraklisina */} + + Meraklısına + + +

Üç adımda listen hazır

@@ -515,41 +542,7 @@ export default function Home() {
-
-
-

- © 2026 KolayTercih. Veriler resmî YÖK Atlas kaynağından derlenir; - KolayTercih, ÖSYM veya YÖK ile bağlantılı değildir. -

-

- KolayTercih bir karar destek aracıdır, yerleşme garantisi vermez. - Tercih listenizin son hali ve başvuru sorumluluğu size aittir. -

- -
-
+
); } diff --git a/src/app/paket/page.tsx b/src/app/paket/page.tsx index 71f112b..f67ae1e 100644 --- a/src/app/paket/page.tsx +++ b/src/app/paket/page.tsx @@ -18,7 +18,10 @@ import { PagePixelDivider } from "@/components/pixel-decor"; import { SatinAlForm } from "./satin-al-form"; export const metadata: Metadata = { - title: "Tercih Dönemi Paketi — KolayTercih", + title: "Tercih Dönemi Paketi", + description: + "Tek seferlik Tercih Dönemi Paketi: yapay zekâ destekli kişisel 24 tercihlik liste, risk analizi, liste revizyonları ve soru hakkı. Abonelik yok.", + alternates: { canonical: "/paket" }, }; function tl(kurus: number) { diff --git a/src/app/rapor/yazdir/page.tsx b/src/app/rapor/yazdir/page.tsx index 8071219..2820901 100644 --- a/src/app/rapor/yazdir/page.tsx +++ b/src/app/rapor/yazdir/page.tsx @@ -10,7 +10,8 @@ import type { RaporParams } from "@/lib/rapor-havuzu"; import { YazdirButonu } from "./yazdir-butonu"; export const metadata: Metadata = { - title: "Tercih Raporu (Yazdır) — KolayTercih", + title: "Tercih Raporu (Yazdır)", + robots: { index: false, follow: false }, }; const DILIM_LABEL: Record = { diff --git a/src/app/rehber/[slug]/opengraph-image.tsx b/src/app/rehber/[slug]/opengraph-image.tsx new file mode 100644 index 0000000..cdca730 --- /dev/null +++ b/src/app/rehber/[slug]/opengraph-image.tsx @@ -0,0 +1,220 @@ +import { ImageResponse } from "next/og"; +import { getRehber } from "@/lib/rehber"; +import { + rehberBasliginiBol, + rehberMetniniParcala, +} from "@/components/rehber-kapak"; + +export const alt = "KolayTercih Tercih Rehberi yazı kapağı"; +export const size = { width: 1200, height: 630 }; +export const contentType = "image/png"; + +export default async function RehberOpenGraphImage({ + params, +}: { + params: Promise<{ slug: string }>; +}) { + const { slug } = await params; + const yazi = getRehber(slug); + const baslik = yazi?.baslik ?? "Tercih Rehberi"; + const { vurgu, kalan } = rehberBasliginiBol(baslik); + + return new ImageResponse( + ( +
+ {[ + [960, 50, 0.16], [980, 50, 0.28], [1020, 50, 0.12], + [940, 70, 0.24], [980, 70, 0.12], [1000, 70, 0.3], + [1060, 70, 0.18], [960, 90, 0.12], [1000, 90, 0.2], + [1040, 90, 0.1], [1080, 90, 0.26], [1080, 110, 0.14], + [1120, 110, 0.22], [1140, 110, 0.12], [60, 490, 0.12], + [100, 490, 0.25], [120, 490, 0.14], [40, 510, 0.24], + [80, 510, 0.12], [120, 510, 0.3], [160, 510, 0.16], + [60, 530, 0.14], [100, 530, 0.22], [140, 530, 0.1], + [180, 530, 0.27], + ].map(([left, top, opacity], i) => ( + + ))} + + +
+ +
+
+ Tercih Rehberi +
+ +
70 ? 48 : baslik.length > 52 ? 54 : 62, + fontWeight: 300, + lineHeight: 1.02, + letterSpacing: "-0.025em", + color: "#2563eb", + }} + > + + {rehberMetniniParcala(vurgu).map((parca, i) => + /^\d/.test(parca) ? ( + + {parca} + + ) : ( + parca + ), + )} + + {kalan ? ( + + {rehberMetniniParcala(kalan.trimStart()).map((parca, i) => + /^\d/.test(parca) ? ( + + {parca} + + ) : ( + parca + ), + )} + + ) : null} +
+ +
+ + + + + + + Kolay + Tercih + +
+
+
+ ), + size, + ); +} diff --git a/src/app/rehber/[slug]/page.tsx b/src/app/rehber/[slug]/page.tsx new file mode 100644 index 0000000..f20d98b --- /dev/null +++ b/src/app/rehber/[slug]/page.tsx @@ -0,0 +1,137 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { notFound } from "next/navigation"; +import { ChevronRight } from "lucide-react"; +import { getAllRehberSlugs, getAllRehberler, getRehber } from "@/lib/rehber"; +import { JsonLd, articleJsonLd, breadcrumbJsonLd } from "@/lib/seo"; +import { CtaSiraForm } from "@/components/cta-sira-form"; +import { RehberKapak } from "@/components/rehber-kapak"; +import { SiteFooter } from "@/components/site-footer"; + +export function generateStaticParams() { + const slugs = getAllRehberSlugs(); + if (slugs.length === 0) { + throw new Error("rehber: content/rehber altında hiç makale yok"); + } + return slugs.map((slug) => ({ slug })); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string }>; +}): Promise { + const { slug } = await params; + const yazi = getRehber(slug); + if (!yazi) return {}; + return { + title: yazi.baslik, + description: yazi.aciklama, + alternates: { canonical: `/rehber/${slug}` }, + openGraph: { + type: "article", + title: yazi.baslik, + description: yazi.aciklama, + publishedTime: yazi.tarih, + }, + }; +} + +export default async function RehberYaziPage({ + params, +}: { + params: Promise<{ slug: string }>; +}) { + const { slug } = await params; + const yazi = getRehber(slug); + if (!yazi) notFound(); + + const digerYazilar = getAllRehberler() + .filter((y) => y.slug !== slug) + .slice(0, 4); + + return ( + <> +
+ + + + + +
+ +

+ {yazi.baslik} +

+

+ {yazi.aciklama} +

+
+
+ +
+ +
+ + {digerYazilar.length > 0 ? ( +
+

+ Diğer rehber yazıları +

+
    + {digerYazilar.map((y) => ( +
  • + + {y.baslik} + +
  • + ))} +
+
+ ) : null} +
+ + + ); +} diff --git a/src/app/rehber/page.tsx b/src/app/rehber/page.tsx new file mode 100644 index 0000000..6f20f1b --- /dev/null +++ b/src/app/rehber/page.tsx @@ -0,0 +1,77 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { ArrowRight } from "lucide-react"; +import { getAllRehberler } from "@/lib/rehber"; +import { JsonLd, breadcrumbJsonLd } from "@/lib/seo"; +import { CtaSiraForm } from "@/components/cta-sira-form"; +import { RehberKapak } from "@/components/rehber-kapak"; +import { SiteFooter } from "@/components/site-footer"; +import { PagePixelDivider } from "@/components/pixel-decor"; + +export const metadata: Metadata = { + title: "Tercih Rehberi 2026 — YKS Tercih Dönemi Yazıları", + description: + "YKS tercih dönemi rehberi: tercih listesi nasıl yapılır, ölü tercih nedir, ek yerleştirme nasıl işler, sıralama mı puan mı — hepsi öğrenci diliyle.", + alternates: { canonical: "/rehber" }, +}; + +export default function RehberIndexPage() { + const yazilar = getAllRehberler(); + + return ( + <> +
+ + +

+ Tercih Rehberi +

+

+ Tercih döneminin en çok sorulan soruları, veriye dayalı ve öğrenci + diliyle. Panik yok, pazarlama yok — sadece işine yarayacak bilgi. +

+ + + +
    + {yazilar.map((y) => ( +
  • + + +
    +

    + {y.aciklama} +

    + + Yazıyı oku + + +
    + +
  • + ))} +
+ +
+ +
+
+ + + ); +} diff --git a/src/app/robots.ts b/src/app/robots.ts new file mode 100644 index 0000000..c354071 --- /dev/null +++ b/src/app/robots.ts @@ -0,0 +1,15 @@ +import type { MetadataRoute } from "next"; +import { SITE_URL } from "@/lib/seo"; + +export default function robots(): MetadataRoute.Robots { + return { + rules: { + userAgent: "*", + allow: "/", + // /sonuc bilinçli olarak ENGELLENMEDİ: sayfa noindex meta taşıyor ve + // robots.txt engeli o meta'nın görülmesini imkânsız kılardı. + disallow: ["/api/", "/listem", "/odeme/", "/rapor/", "/giris"], + }, + sitemap: `${SITE_URL}/sitemap.xml`, + }; +} diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts new file mode 100644 index 0000000..773208a --- /dev/null +++ b/src/app/sitemap.ts @@ -0,0 +1,40 @@ +import type { MetadataRoute } from "next"; +import { SITE_URL } from "@/lib/seo"; +import { getAllBolumSlugs, getAllUniversiteSlugs } from "@/lib/katalog"; +import { getAllRehberler } from "@/lib/rehber"; + +// Bilinçli olarak sitemap DIŞI: /sonuc (noindex), /giris, /listem, +// /odeme/sonuc, /rapor/yazdir (auth/utility sayfaları). +const staticEntries: MetadataRoute.Sitemap = [ + { url: `${SITE_URL}/`, priority: 1, changeFrequency: "weekly" }, + { url: `${SITE_URL}/bolumler`, priority: 0.8, changeFrequency: "weekly" }, + { url: `${SITE_URL}/universiteler`, priority: 0.8, changeFrequency: "weekly" }, + { url: `${SITE_URL}/rehber`, priority: 0.8, changeFrequency: "weekly" }, + { url: `${SITE_URL}/paket`, priority: 0.7, changeFrequency: "monthly" }, + { url: `${SITE_URL}/meraklisina`, priority: 0.6, changeFrequency: "monthly" }, + { url: `${SITE_URL}/iletisim`, priority: 0.3, changeFrequency: "yearly" }, + { url: `${SITE_URL}/gizlilik`, priority: 0.2, changeFrequency: "yearly" }, + { url: `${SITE_URL}/kosullar`, priority: 0.2, changeFrequency: "yearly" }, +]; + +export default async function sitemap(): Promise { + const bolumler: MetadataRoute.Sitemap = getAllBolumSlugs().map((slug) => ({ + url: `${SITE_URL}/bolum/${slug}`, + priority: 0.7, + changeFrequency: "monthly", + })); + const universiteler: MetadataRoute.Sitemap = getAllUniversiteSlugs().map( + (slug) => ({ + url: `${SITE_URL}/universite/${slug}`, + priority: 0.6, + changeFrequency: "monthly", + }), + ); + const rehberler: MetadataRoute.Sitemap = getAllRehberler().map((y) => ({ + url: `${SITE_URL}/rehber/${y.slug}`, + lastModified: y.tarih, + priority: 0.7, + changeFrequency: "monthly", + })); + return [...staticEntries, ...bolumler, ...universiteler, ...rehberler]; +} diff --git a/src/app/sonuc/page.tsx b/src/app/sonuc/page.tsx index 4e0fb37..87efaf7 100644 --- a/src/app/sonuc/page.tsx +++ b/src/app/sonuc/page.tsx @@ -19,10 +19,15 @@ import type { MevcutRapor } from "./liste-paneli"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { ProgramTablosu } from "@/components/program-tablosu"; +import { ManuelHarita } from "@/components/manuel-liste/manuel-harita"; import { PagePixelDivider } from "@/components/pixel-decor"; export const metadata: Metadata = { - title: "Tercih Listeni Kur — KolayTercih", + title: "Tercih Listeni Kur", + // Param uzayı sonsuz + içerik sıralamaya göre kişisel: indexlenmez ama + // link değeri follow ile geri akar. robots.txt'te ENGELLEME — noindex'in + // görülebilmesi için sayfa taranabilir kalmalı. + robots: { index: false, follow: true }, }; const TUR_LABELS: Record = { @@ -132,15 +137,22 @@ export default async function SonucPage({

+ {/* Sayfa hiyerarşisi: önce Türkiye haritası, sonra liste. Manuel + liste store'una abone olduğundan tablodan "+" ile eklenenler + buraya canlı yansır. */} +
+ +
+ + {/* AI'dan bağımsız ham tablo — haritanın hemen altında, sayfanın ana + gövdesi; puan türü seçici de listenin başında yaşar */} + + {/* Satın alım funnel'ı: değişen cümlelerle adayı sihirbaza (rapor varsa /listem paywall'ına) iten banner — paketli kullanıcıya satacak bir şey kalmadığından gösterilmez */} {!hasPaket ? : null} - {/* AI'dan bağımsız ham tablo + manuel liste haritası — sayfanın ana - gövdesi; puan türü seçici de listenin başında yaşar */} - - {/* Sihirbaz akışı (CTA + modal + AI listesi) — blurlu AI paneli sayfanın en altında yaşar */} void; + sira: number; + tur: string; facetler: SihirbazFacetleri; baslangicSecimler?: SihirbazSecimleri | null; sonButonEtiketi: string; @@ -41,6 +45,8 @@ export function SihirbazModal({ Sıralamana uygun 24 tercihlik listeni oluştur. ({ slug })); +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string }>; +}): Promise { + const { slug } = await params; + return uniSayfaMetadata(slug, 1); +} + +export default async function UniversitePage({ + params, +}: { + params: Promise<{ slug: string }>; +}) { + const { slug } = await params; + return ; +} diff --git a/src/app/universite/[slug]/sayfa/[no]/page.tsx b/src/app/universite/[slug]/sayfa/[no]/page.tsx new file mode 100644 index 0000000..a5484ed --- /dev/null +++ b/src/app/universite/[slug]/sayfa/[no]/page.tsx @@ -0,0 +1,47 @@ +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { getAllUniversiteler } from "@/lib/katalog"; +import { + UniversiteIcerik, + uniSayfaMetadata, + uniToplamSayfa, +} from "../../universite-icerik"; + +// Yalnızca 1'den fazla sayfası olan üniversiteler için 2..N üretilir; +// 1. sayfa taban rota (/universite/[slug]) olduğundan burada üretilmez. +export function generateStaticParams() { + return getAllUniversiteler().flatMap((u) => { + const toplam = uniToplamSayfa(u.programSayisi); + return Array.from({ length: Math.max(0, toplam - 1) }, (_, i) => ({ + slug: u.slug, + no: String(i + 2), + })); + }); +} + +function sayfaNo(no: string): number | null { + const n = Number(no); + return Number.isInteger(n) && n >= 2 ? n : null; +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ slug: string; no: string }>; +}): Promise { + const { slug, no } = await params; + const n = sayfaNo(no); + if (n == null) return {}; + return uniSayfaMetadata(slug, n); +} + +export default async function UniversiteSayfaPage({ + params, +}: { + params: Promise<{ slug: string; no: string }>; +}) { + const { slug, no } = await params; + const n = sayfaNo(no); + if (n == null) notFound(); + return ; +} diff --git a/src/app/universite/[slug]/universite-icerik.tsx b/src/app/universite/[slug]/universite-icerik.tsx new file mode 100644 index 0000000..6172ba6 --- /dev/null +++ b/src/app/universite/[slug]/universite-icerik.tsx @@ -0,0 +1,336 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { notFound } from "next/navigation"; +import { ChevronRight } from "lucide-react"; +import { getUniversiteBySlug, bolumSlugFromIsim } from "@/lib/katalog"; +import { trBaslikDuzeni } from "@/lib/slug"; +import { JsonLd, breadcrumbJsonLd, SITE_URL } from "@/lib/seo"; +import { CtaSiraForm } from "@/components/cta-sira-form"; +import { SiteFooter } from "@/components/site-footer"; +import { Sayfalama, SAYFA_BOYU } from "@/components/sayfalama"; +import { PagePixelDivider } from "@/components/pixel-decor"; +import { UniversiteKonumHaritasi } from "@/components/universite-konum-haritasi"; +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/components/ui/table"; +import type { Program } from "@/lib/db"; + +const sayi = (n: number) => n.toLocaleString("tr-TR"); + +const TUR_ETIKET: Record = { + SAYISAL: "SAY", + "EŞİT AĞIRLIK": "EA", + SÖZEL: "SÖZ", + DİL: "DİL", + TYT: "TYT", +}; + +export function uniToplamSayfa(programSayisi: number): number { + return Math.max(1, Math.ceil(programSayisi / SAYFA_BOYU)); +} + +export function uniSayfaMetadata(slug: string, sayfa: number): Metadata { + const uni = getUniversiteBySlug(slug); + if (!uni) return {}; + if (sayfa > 1) { + return { + title: `${uni.ad} Taban Puanları 2026 (Sayfa ${sayfa})`, + description: `${uni.ad} taban puanları ve başarı sıralamaları tablosunun ${sayfa}. sayfası — toplam ${uni.programSayisi} programın 2025 yerleştirme verileri.`, + alternates: { canonical: `/universite/${slug}/sayfa/${sayfa}` }, + }; + } + return { + title: `${uni.ad} Taban Puanları ve Başarı Sıralamaları 2026`, + description: `${uni.ad} 2025 yerleştirme verileri: ${uni.programSayisi} programın taban puanları, başarı sıralamaları ve kontenjanları${uni.il ? ` (${trBaslikDuzeni(uni.il)})` : ""}. 2026 tercih rehberi.`, + alternates: { canonical: `/universite/${slug}` }, + }; +} + +export function UniversiteIcerik({ + slug, + sayfa, +}: { + slug: string; + sayfa: number; +}) { + const uni = getUniversiteBySlug(slug); + if (!uni) notFound(); + + // Sayfalama fakülte sıralı düz liste üzerinden; dilim içi yeniden gruplanır + const tumProgramlar = uni.fakulteler.flatMap((f) => f.programlar); + const toplamSayfa = uniToplamSayfa(tumProgramlar.length); + if (sayfa < 1 || sayfa > toplamSayfa) notFound(); + const dilim = tumProgramlar.slice( + (sayfa - 1) * SAYFA_BOYU, + sayfa * SAYFA_BOYU, + ); + const gruplar: { fakulte: string; programlar: Program[] }[] = []; + for (const p of dilim) { + const anahtar = p.fakulte ?? "Diğer"; + const son = gruplar[gruplar.length - 1]; + if (son && son.fakulte === anahtar) son.programlar.push(p); + else gruplar.push({ fakulte: anahtar, programlar: [p] }); + } + + const ilkSayfa = sayfa === 1; + const buYol = ilkSayfa + ? `/universite/${slug}` + : `/universite/${slug}/sayfa/${sayfa}`; + + return ( + <> +
+ + {ilkSayfa ? ( + + ) : null} + + + +

+ {uni.ad} Taban Puanları 2026 + {ilkSayfa ? "" : ` — Sayfa ${sayfa}`} +

+ + {ilkSayfa ? ( + <> +

+ {uni.ad} + {uni.il ? ` (${trBaslikDuzeni(uni.il)})` : ""}, 2025 YKS + yerleştirme sonuçlarına göre{" "} + {sayi(uni.programSayisi)} programda öğrenci aldı + {uni.fakulteSayisi > 1 + ? `; programlar ${sayi(uni.fakulteSayisi)} fakülte/yüksekokula dağılıyor` + : ""} + . + {uni.stats.minSira != null ? ( + <> + {" "} + En iyi taban başarı sıralaması{" "} + {sayi(uni.stats.minSira)}. + + ) : null} + {uni.stats.toplamKontenjan > 0 ? ( + <> Toplam kontenjan {sayi(uni.stats.toplamKontenjan)}. + ) : null}{" "} + Aşağıdaki tablolar 2026 tercihleri için rehber niteliğindedir;{" "} + + 2026 taban puanları ve sıralamaları, yerleştirme sonuçları + açıklandığında netleşir. + +

+ +
+
+
+
+ Program +
+
+ {sayi(uni.programSayisi)} +
+
+
+
+ Fakülte / Birim +
+
+ {sayi(uni.fakulteSayisi)} +
+
+
+
+ Tür +
+
+ {uni.unitur === "DEVLET" + ? "Devlet" + : uni.unitur + ? trBaslikDuzeni(uni.unitur) + : "—"} +
+
+
+
+ En iyi sıralama +
+
+ {uni.stats.minSira != null ? sayi(uni.stats.minSira) : "—"} +
+
+
+ +
+ + ) : ( +

+ {uni.ad} taban puanları tablosunun {sayfa}. sayfası ( + {sayi(tumProgramlar.length)} programın{" "} + {sayi((sayfa - 1) * SAYFA_BOYU + 1)}– + {sayi(Math.min(sayfa * SAYFA_BOYU, tumProgramlar.length))}. + satırları, fakülte sırasıyla). Üniversite özeti ve istatistikler{" "} + + ilk sayfada + + . +

+ )} + + + +
+

+ Üniversite programları +

+

+ Fakülte ve birimlere göre +

+
+ + {gruplar.map(({ fakulte, programlar }, i) => ( +
+

+ {fakulte} +

+
+ + + + Program + Puan Türü + 2025 Puan + 2025 Sıralama + 2024 Sıralama + Kontenjan + + + + {programlar.map((p) => { + const bolumSlug = bolumSlugFromIsim(p.isim); + return ( + + + {bolumSlug ? ( + + {p.isim.trim()} + + ) : ( + + {p.isim.trim()} + + )} + + {TUR_ETIKET[p.tur] ?? p.tur} + + {p.puan2025 != null + ? p.puan2025.toFixed(2).replace(".", ",") + : "—"} + + + {p.sira2025 != null ? sayi(p.sira2025) : "—"} + + + {p.sira2024 != null ? sayi(p.sira2024) : "—"} + + + {p.kontenjan2025 != null + ? sayi(p.kontenjan2025) + : "—"} + + + ); + })} + +
+
+
+ ))} + +

+ "—": o yıl için yerleştirme verisi bulunmuyor (yeni açılan + veya o yıl yerleşen çıkmayan program). Kaynak: YÖK Atlas 2025 + yerleştirme sonuçları. +

+ + + +
+ +
+
+ + + ); +} diff --git a/src/app/universiteler/page.tsx b/src/app/universiteler/page.tsx new file mode 100644 index 0000000..3e65573 --- /dev/null +++ b/src/app/universiteler/page.tsx @@ -0,0 +1,112 @@ +import type { Metadata } from "next"; +import Link from "next/link"; +import { getAllUniversiteler, type UniOzet } from "@/lib/katalog"; +import { trBaslikDuzeni } from "@/lib/slug"; +import { JsonLd, breadcrumbJsonLd } from "@/lib/seo"; +import { CtaSiraForm } from "@/components/cta-sira-form"; +import { SiteFooter } from "@/components/site-footer"; +import { PagePixelDivider } from "@/components/pixel-decor"; + +export const metadata: Metadata = { + title: "Üniversitelerin Taban Puanları ve Sıralamaları 2026", + description: + "Devlet ve vakıf üniversitelerinin 2025 yerleştirme taban puanları, başarı sıralamaları ve kontenjanları — üniversite üniversite, 2026 tercihleri için.", + alternates: { canonical: "/universiteler" }, +}; + +const sayi = (n: number) => n.toLocaleString("tr-TR"); + +function UniLinkleri({ uniler }: { uniler: UniOzet[] }) { + return ( +
    + {uniler.map((u) => ( +
  • + + {u.ad} + + {u.il ? `${trBaslikDuzeni(u.il)} · ` : ""} + {sayi(u.programSayisi)} program + + +
  • + ))} +
+ ); +} + +export default function UniversitelerPage() { + const hepsi = getAllUniversiteler(); + const devlet = hepsi.filter((u) => u.unitur === "DEVLET"); + const vakif = hepsi.filter( + (u) => u.unitur != null && ["VAKIF", "VAKIF MYO"].includes(u.unitur), + ); + const digerUniler = hepsi.filter( + (u) => !devlet.includes(u) && !vakif.includes(u), + ); + + return ( + <> +
+ + +

+ Üniversitelerin Taban Puanları ve Sıralamaları 2026 +

+

+ {sayi(hepsi.length)} üniversitenin 2025 YKS yerleştirme verileri. + Üniversiteye tıklayınca tüm programlarının taban puanlarını, başarı + sıralamalarını ve kontenjanlarını fakülte fakülte görürsün. Veriler + YÖK Atlas 2025 yerleştirme sonuçlarına dayanır; 2026 tercihleri için + rehber niteliğindedir. +

+ + + +
+

+ Devlet Üniversiteleri + + {sayi(devlet.length)} + +

+ +
+ +
+

+ Vakıf Üniversiteleri + + {sayi(vakif.length)} + +

+ +
+ + {digerUniler.length > 0 ? ( +
+

+ KKTC ve Yurt Dışı + + {sayi(digerUniler.length)} + +

+ +
+ ) : null} + +
+ +
+
+ + + ); +} diff --git a/src/components/bolum-program-listesi.tsx b/src/components/bolum-program-listesi.tsx new file mode 100644 index 0000000..444c315 --- /dev/null +++ b/src/components/bolum-program-listesi.tsx @@ -0,0 +1,191 @@ +"use client"; + +import { useMemo, useState } from "react"; +import Link from "next/link"; +import { ChevronDown, ChevronUp } from "lucide-react"; +import { Badge } from "@/components/ui/badge"; +import type { Program } from "@/lib/db"; +import { trBaslikDuzeni } from "@/lib/slug"; + +const sayi = (n: number) => n.toLocaleString("tr-TR"); + +type SiralamaAlani = "sira2025" | "puan2025" | "kontenjan2025"; +type SiralamaYonu = "artan" | "azalan"; +export type BolumProgrami = Program & { universiteSlug: string | null }; + +const ALAN_ETIKETLERI: Record = { + sira2025: "Sıralama", + puan2025: "Puan", + kontenjan2025: "Kontenjan", +}; + +function SiralamaDugmesi({ + alan, + aktifAlan, + yon, + onSirala, +}: { + alan: SiralamaAlani; + aktifAlan: SiralamaAlani | null; + yon: SiralamaYonu; + onSirala: (alan: SiralamaAlani) => void; +}) { + const aktif = alan === aktifAlan; + const etiket = ALAN_ETIKETLERI[alan]; + + return ( + + ); +} + +export function BolumProgramListesi({ + programlar, + bazAd, +}: { + programlar: BolumProgrami[]; + bazAd: string; +}) { + const [aktifAlan, setAktifAlan] = useState(null); + const [yon, setYon] = useState("artan"); + + const siraliProgramlar = useMemo(() => { + if (!aktifAlan) return programlar; + + return programlar + .map((program, index) => ({ program, index })) + .sort((a, b) => { + const aDeger = a.program[aktifAlan]; + const bDeger = b.program[aktifAlan]; + if (aDeger == null && bDeger == null) return a.index - b.index; + if (aDeger == null) return 1; + if (bDeger == null) return -1; + + const fark = aDeger - bDeger; + return fark === 0 + ? a.index - b.index + : yon === "artan" + ? fark + : -fark; + }) + .map(({ program }) => program); + }, [aktifAlan, programlar, yon]); + + function sirala(alan: SiralamaAlani) { + if (aktifAlan === alan) { + setYon((mevcut) => (mevcut === "artan" ? "azalan" : "artan")); + return; + } + setAktifAlan(alan); + setYon("artan"); + } + + return ( +
    + {siraliProgramlar.map((p) => { + const uniAd = trBaslikDuzeni(p.universite); + const varyant = p.isim.trim() !== bazAd ? p.isim.trim() : null; + return ( +
  • +
    + {p.universiteSlug ? ( + + {uniAd} + + ) : ( +

    {uniAd}

    + )} +
    + {p.il ? {trBaslikDuzeni(p.il)} : null} + {p.il && p.unitur ? · : null} + {p.unitur ? ( + + {p.unitur === "DEVLET" + ? "Devlet" + : trBaslikDuzeni(p.unitur)} + + ) : null} +
    + {varyant ? ( +

    {varyant}

    + ) : null} +
    + +
    +
    +
    + +
    +
    + {p.sira2025 != null ? sayi(p.sira2025) : "—"} +
    +
    +
    +
    + +
    +
    + {p.puan2025 != null + ? p.puan2025.toFixed(2).replace(".", ",") + : "—"} +
    +
    +
    +
    + +
    +
    + {p.kontenjan2025 != null ? sayi(p.kontenjan2025) : "—"} +
    +
    +
    +
  • + ); + })} +
+ ); +} diff --git a/src/components/cta-sira-form.tsx b/src/components/cta-sira-form.tsx new file mode 100644 index 0000000..ac47797 --- /dev/null +++ b/src/components/cta-sira-form.tsx @@ -0,0 +1,57 @@ +import { ArrowRight } from "lucide-react"; + +/** + * Programatik SEO sayfalarındaki funnel girişi: JS'siz düz GET formu, + * /sonuc?sira=&tur= akışına düşer. Client bileşen DEĞİL — sayfalar tamamen + * statik prerender edilir, form tarayıcının kendi submit'iyle çalışır. + */ +export function CtaSiraForm({ baslik }: { baslik?: string }) { + return ( +
+

+ {baslik ?? "Sıralamanla nereye yerleşirsin? Saniyede gör."} +

+

+ YKS başarı sıralamanı gir; gerçek YÖK Atlas verisiyle sıralamana uygun + hayal, dengeli ve garanti dilimlerindeki programları anında listele. + Ücretsiz, üyelik gerekmez. +

+
+ + + +
+
+ ); +} diff --git a/src/components/hero-form.tsx b/src/components/hero-form.tsx index 68c5a08..011834d 100644 --- a/src/components/hero-form.tsx +++ b/src/components/hero-form.tsx @@ -170,9 +170,11 @@ export function HeroForm() { Sıralamana uygun seçimlerini yap, tercih planına geç. - {facetler ? ( + {facetler && sira ? ( deger.toLocaleString("tr-TR"); + +export function KatalogArama() { + const [acik, setAcik] = useState(false); + const [sorgu, setSorgu] = useState(""); + const [sonuclar, setSonuclar] = useState(BOS_SONUCLAR); + const [yukleniyor, setYukleniyor] = useState(false); + const inputRef = useRef(null); + const temizSorgu = sorgu.trim(); + const aramaAktif = temizSorgu.length >= 2; + const sonucVar = + sonuclar.bolumler.length > 0 || sonuclar.universiteler.length > 0; + + useEffect(() => { + if (!acik || !aramaAktif) return; + + const controller = new AbortController(); + const zamanlayici = window.setTimeout(async () => { + setYukleniyor(true); + try { + const response = await fetch( + `/api/katalog-ara?q=${encodeURIComponent(temizSorgu)}`, + { signal: controller.signal }, + ); + if (!response.ok) throw new Error("Arama başarısız"); + setSonuclar((await response.json()) as AramaSonuclari); + } catch (hata) { + if (!(hata instanceof DOMException && hata.name === "AbortError")) { + setSonuclar(BOS_SONUCLAR); + } + } finally { + if (!controller.signal.aborted) setYukleniyor(false); + } + }, 160); + + return () => { + window.clearTimeout(zamanlayici); + controller.abort(); + }; + }, [acik, aramaAktif, temizSorgu]); + + function modalDegisti(yeniAcik: boolean) { + setAcik(yeniAcik); + if (!yeniAcik) { + setSorgu(""); + setSonuclar(BOS_SONUCLAR); + } + } + + function kapat() { + setAcik(false); + } + + return ( + <> + + + + + + { + event.preventDefault(); + inputRef.current?.focus(); + }} + className="max-h-[min(720px,calc(100dvh-2rem))] gap-0 overflow-hidden rounded-2xl bg-white p-0 duration-200 sm:max-w-2xl motion-reduce:data-open:zoom-in-100 motion-reduce:data-closed:zoom-out-100" + > + + Bölüm ve üniversite ara + + + YKS bölümlerini ve üniversiteleri tek yerden ara. + + +
+ + { + const yeniSorgu = event.target.value; + setSorgu(yeniSorgu); + setSonuclar(BOS_SONUCLAR); + setYukleniyor(yeniSorgu.trim().length >= 2); + }} + placeholder="Bölüm veya üniversite ara..." + aria-label="Bölüm veya üniversite ara" + autoComplete="off" + className="h-16 min-w-0 flex-1 bg-transparent text-base text-slate-950 outline-none placeholder:text-slate-400 sm:h-18 sm:text-lg" + /> + +
+ +
+ {!aramaAktif ? ( + + ) : yukleniyor ? ( + + ) : sonucVar ? ( +
+ {sonuclar.bolumler.length > 0 ? ( + } + > + {sonuclar.bolumler.map((bolum) => ( + + ))} + + ) : null} + + {sonuclar.universiteler.length > 0 ? ( + } + > + {sonuclar.universiteler.map((universite) => ( + + ))} + + ) : null} +
+ ) : ( +
+
+ +
+

+ "{temizSorgu}" için sonuç bulunamadı +

+

+ Bölüm veya üniversite adını farklı yazarak tekrar dene. +

+
+ )} +
+ +
+ En az 2 harf yazarak ara + Esc ile kapat +
+
+
+ + ); +} + +function BaslangicIcerigi({ onSec }: { onSec: () => void }) { + return ( +
+

+ Keşfet +

+
+ } + baslik="Tüm bölümler" + aciklama="Lisans ve önlisans" + onSec={onSec} + /> + } + baslik="Üniversiteler" + aciklama="Devlet ve vakıf" + onSec={onSec} + /> + } + baslik="Tercih rehberi" + aciklama="Sorularına yanıtlar" + onSec={onSec} + /> +
+
+

+ Neyi merak ediyorsun? +

+

+ “Psikoloji” veya “Boğaziçi” gibi bir ad yaz; eşleşen sayfaları ve + temel bilgilerini burada önizle. +

+
+
+ ); +} + +function KesfetLinki({ + href, + ikon, + baslik, + aciklama, + onSec, +}: { + href: string; + ikon: React.ReactNode; + baslik: string; + aciklama: string; + onSec: () => void; +}) { + return ( + + + {ikon} + + + {baslik} + + {aciklama} + + ); +} + +function SonucGrubu({ + baslik, + ikon, + children, +}: { + baslik: string; + ikon: React.ReactNode; + children: React.ReactNode; +}) { + return ( +
+

+ {ikon} + {baslik} +

+
{children}
+
+ ); +} + +function SonucLinki({ + href, + baslik, + meta, + detay, + onSec, +}: { + href: string; + baslik: string; + meta: string; + detay: string; + onSec: () => void; +}) { + return ( + + + + {baslik} + + + {meta} + + + + {detay} + + + + ); +} + +function AramaIskeleti() { + return ( +
+ {[0, 1, 2, 3].map((sira) => ( +
+
+
+ ))} +
+ ); +} diff --git a/src/components/program-tablosu.tsx b/src/components/program-tablosu.tsx index cb9b24d..02796a4 100644 --- a/src/components/program-tablosu.tsx +++ b/src/components/program-tablosu.tsx @@ -1,7 +1,8 @@ "use client"; // Sonuç sayfasının AI'sız ham listesi: yalnızca başarı sıralamasıyla -// yokatlas'tan gelen programlar, dilim sekmeleri halinde. Her satırın "+" +// yokatlas'tan gelen programlar, dilim sekmeleri halinde ve yakından uzağa +// sayfalanır ("daha fazla göster" /api/programlar'dan akıtır). Her satırın "+" // butonu programı manuel 24'lük listeye ekler (bkz. manuel-liste/store). import { useState } from "react"; @@ -9,6 +10,7 @@ import Link from "next/link"; import { useLinkStatus } from "next/link"; import { Check, + ChevronDown, Plus, Rocket, Scale, @@ -16,8 +18,9 @@ import { TrendingDown, TrendingUp, } from "lucide-react"; -import type { Program, PuanTuruKey, RankResults } from "@/lib/db"; +import type { DilimKey, Program, PuanTuruKey, RankResults } from "@/lib/db"; import { riskHesapla, type RiskSeviyesi } from "@/lib/risk"; +import { turkishSlugify } from "@/lib/slug"; import { Table, TableBody, @@ -33,9 +36,6 @@ import { useManuelListe, type ManuelTercih, } from "@/components/manuel-liste/store"; -import { ManuelHarita } from "@/components/manuel-liste/manuel-harita"; - -type DilimKey = keyof RankResults; const DILIMLER: { key: DilimKey; @@ -144,6 +144,20 @@ function tercihYap(p: Program, adaySira: number): ManuelTercih { }; } +const BOS_EKSTRA: Record = { + hayal: [], + dengeli: [], + garanti: [], +}; + +// Dengeli ve hayal dilimleri tamamen boşsa (sıralama çok gerideyse) boş bir +// "dengeli" sekmesi yerine dolu olan "garanti" ile açılır. +function varsayilanDilim(sonuclar: RankResults): DilimKey { + return sonuclar.toplam.dengeli === 0 && sonuclar.toplam.hayal === 0 + ? "garanti" + : "dengeli"; +} + export function ProgramTablosu({ sonuclar, adaySira, @@ -154,14 +168,59 @@ export function ProgramTablosu({ tur: PuanTuruKey; }) { const liste = useManuelListe(); - const [aktifDilim, setAktifDilim] = useState("dengeli"); + const [aktifDilim, setAktifDilim] = useState(() => + varsayilanDilim(sonuclar), + ); const listedekiler = new Set(liste.map((t) => t.id)); const doldu = liste.length >= MANUEL_LISTE_MAX; + // "Daha fazla göster" ile sayfalanan devam satırları. Sıra/tür değişince + // (puan türü seçici aynı bileşeni yeniden render eder, remount etmez) + // render sırasında sıfırlanır ki eski türün satırları yenisine karışmasın. + const [ekstra, setEkstra] = useState(BOS_EKSTRA); + const [yuklenen, setYuklenen] = useState(null); + const veriAnahtari = `${adaySira}-${tur}`; + const [oncekiAnahtar, setOncekiAnahtar] = useState(veriAnahtari); + if (veriAnahtari !== oncekiAnahtar) { + setOncekiAnahtar(veriAnahtari); + setEkstra(BOS_EKSTRA); + // Yeni sıra/türde dengeli+hayal boş kaldıysa boş sekmede bırakma + if (varsayilanDilim(sonuclar) === "garanti" && aktifDilim !== "garanti") { + setAktifDilim("garanti"); + } + } + function eklemeyiDene(p: Program) { ekle(tercihYap(p, adaySira)); } + async function dahaFazlaYukle(dilim: DilimKey, offset: number) { + setYuklenen(dilim); + try { + const res = await fetch( + `/api/programlar?sira=${adaySira}&tur=${tur}&dilim=${dilim}&offset=${offset}`, + ); + if (!res.ok) return; + const veri = (await res.json()) as { programlar: Program[] }; + // Aynı sayfanın iki kez istenmesine karşı id bazında tekilleştir + setEkstra((mevcut) => { + const eldekiler = new Set( + [...sonuclar[dilim], ...mevcut[dilim]].map((p) => p.id), + ); + return { + ...mevcut, + [dilim]: [ + ...mevcut[dilim], + ...veri.programlar.filter((p) => !eldekiler.has(p.id)), + ], + }; + }); + } catch { + } finally { + setYuklenen(null); + } + } + return (
@@ -177,11 +236,6 @@ export function ProgramTablosu({

- {/* Listendeki üniversitelerin konumu — ekledikçe canlı dolar */} -
- -
- setAktifDilim(v as DilimKey)} @@ -197,7 +251,7 @@ export function ProgramTablosu({ {d.etiket} - {sonuclar[d.key].length} + {sonuclar.toplam[d.key].toLocaleString("tr-TR")} ))} @@ -211,49 +265,70 @@ export function ProgramTablosu({
- {DILIMLER.map((d) => ( - -

{d.aciklama}

-
- {sonuclar[d.key].length === 0 ? ( -

- Bu dilimde filtrene uyan program bulunamadı. -

- ) : ( - - - - - Program - - Son 5 yıl - - - Kontenjan - - Taban sıra - - Listeye ekle - - - - - {sonuclar[d.key].map((p) => ( - - ))} - -
- )} -
-
- ))} + {DILIMLER.map((d) => { + const satirlar = [...sonuclar[d.key], ...ekstra[d.key]]; + const toplam = sonuclar.toplam[d.key]; + return ( + +

{d.aciklama}

+
+ {satirlar.length === 0 ? ( +

+ Bu dilimde filtrene uyan program bulunamadı. +

+ ) : ( + + + + + Program + + Son 5 yıl + + + Kontenjan + + Taban sıra + + Listeye ekle + + + + + {satirlar.map((p) => ( + + ))} + +
+ )} +
+ {satirlar.length < toplam ? ( +
+ + + {satirlar.length.toLocaleString("tr-TR")} /{" "} + {toplam.toLocaleString("tr-TR")} program + +
+ ) : null} +
+ ); + })} ); @@ -339,6 +414,14 @@ function TabanTrendi({ p }: { p: Program }) { ); } +// /universite/[slug] sayfa slug'ı: harita.ts'teki uniAdiNormalize ile aynı +// kural (sondaki "(İL)" eki atılır) — client bundle'a harita verisi çekmemek +// için burada tekrarlanır. Katalog haritası DB'deki tüm universite +// değerlerinden kurulduğu için bu slug her zaman var olan bir sayfaya çıkar. +function uniSayfaSlug(ad: string): string { + return turkishSlugify(ad.replace(/\s*\([^)]*\)\s*$/, "").trim()); +} + function ProgramSatiri({ program: p, adaySira, @@ -379,7 +462,15 @@ function ProgramSatiri({ {devlet ? "Devlet" : "Vakıf"} - {p.universite} + e.stopPropagation()} + > + {p.universite} + {p.il ? ` · ${p.il.toLocaleLowerCase("tr-TR")}` : ""} {p.sure ? ( diff --git a/src/components/rehber-kapak.tsx b/src/components/rehber-kapak.tsx new file mode 100644 index 0000000..def1087 --- /dev/null +++ b/src/components/rehber-kapak.tsx @@ -0,0 +1,159 @@ +type RehberKapakProps = { + baslik: string; + className?: string; + compact?: boolean; +}; + +const VURGU_DESENLERI = [ + /^YKS Tercih Listesi/i, + /^Ölü Tercih/i, + /^Kaç Sıralama/i, + /^Ek Yerleştirme/i, + /^Taban Puan/i, + /^YKS 2026 Tercih Takvimi/i, + /^Devlet mi Vakıf mı\?/i, + /^Baraj ve Başarı Sıralaması Şartları/i, + /^TYT ile Önlisans Tercihi/i, + /^Taban Sıralamalar/i, +]; + +export function rehberBasliginiBol(baslik: string) { + const eslesme = VURGU_DESENLERI.map((desen) => baslik.match(desen)).find( + Boolean, + ); + const vurgu = eslesme?.[0] ?? baslik.split(/\s+/).slice(0, 3).join(" "); + return { vurgu, kalan: baslik.slice(vurgu.length) }; +} + +export function rehberMetniniParcala(metin: string) { + return metin.split(/(\d+(?:[.,]\d+)*)/g).filter(Boolean); +} + +function KapakMetni({ metin }: { metin: string }) { + return rehberMetniniParcala(metin).map((parca, i) => + /^\d/.test(parca) ? ( + + {parca} + + ) : ( + parca + ), + ); +} + +const KAPAK_PIKSELLERI = [ + [960, 50, 0.16], [980, 50, 0.28], [1020, 50, 0.12], + [940, 70, 0.24], [980, 70, 0.12], [1000, 70, 0.3], [1060, 70, 0.18], + [960, 90, 0.12], [1000, 90, 0.2], [1040, 90, 0.1], [1080, 90, 0.26], + [1080, 110, 0.14], [1120, 110, 0.22], [1140, 110, 0.12], + [60, 490, 0.12], [100, 490, 0.25], [120, 490, 0.14], + [40, 510, 0.24], [80, 510, 0.12], [120, 510, 0.3], [160, 510, 0.16], + [60, 530, 0.14], [100, 530, 0.22], [140, 530, 0.1], [180, 530, 0.27], +] as const; + +export function RehberKapak({ + baslik, + className = "", + compact = false, +}: RehberKapakProps) { + const { vurgu, kalan } = rehberBasliginiBol(baslik); + const baslikBoyutu = compact + ? baslik.length > 70 + ? "text-[clamp(15px,1.8vw,20px)]" + : baslik.length > 52 + ? "text-[clamp(17px,2.1vw,23px)]" + : "text-[clamp(19px,2.4vw,27px)]" + : baslik.length > 70 + ? "text-[clamp(28px,4vw,48px)]" + : baslik.length > 52 + ? "text-[clamp(32px,4.5vw,54px)]" + : "text-[clamp(36px,5vw,62px)]"; + + return ( +
+ + {KAPAK_PIKSELLERI.map(([x, y, opacity]) => ( + + ))} + + + + +
+
+ + Tercih Rehberi + +
+ +

+ + + + {kalan ? ( + <> + {/^\s/.test(kalan) ? " " : null} + + + ) : null} +

+ +
+ + + Kolay + Tercih + +
+
+
+ ); +} diff --git a/src/components/sayfalama.tsx b/src/components/sayfalama.tsx new file mode 100644 index 0000000..0b82e45 --- /dev/null +++ b/src/components/sayfalama.tsx @@ -0,0 +1,98 @@ +import Link from "next/link"; +import { ChevronLeft, ChevronRight } from "lucide-react"; + +/** Programatik tablo sayfaları için satır dilimi boyutu. */ +export const SAYFA_BOYU = 50; + +/** + * Statik path tabanlı sayfalama navigasyonu. 1. sayfa taban URL'in + * kendisidir (/bolum/x), sonrakiler /bolum/x/sayfa/2 ... — hepsi gerçek + * , Google her sayfayı ayrı statik URL olarak tarar. + */ +export function Sayfalama({ + tabanYol, + sayfa, + toplamSayfa, + sorgu, +}: { + tabanYol: string; + sayfa: number; + toplamSayfa: number; + sorgu?: string; +}) { + if (toplamSayfa <= 1) return null; + const yol = (n: number) => { + const path = n === 1 ? tabanYol : `${tabanYol}/sayfa/${n}`; + return sorgu ? `${path}?${sorgu}` : path; + }; + + // 7'den çok sayfada pencere: 1 … (c-1) c (c+1) … son + const numaralar: (number | "...")[] = []; + if (toplamSayfa <= 7) { + for (let n = 1; n <= toplamSayfa; n++) numaralar.push(n); + } else { + numaralar.push(1); + if (sayfa > 3) numaralar.push("..."); + for ( + let n = Math.max(2, sayfa - 1); + n <= Math.min(toplamSayfa - 1, sayfa + 1); + n++ + ) { + numaralar.push(n); + } + if (sayfa < toplamSayfa - 2) numaralar.push("..."); + numaralar.push(toplamSayfa); + } + + return ( + + ); +} diff --git a/src/components/sihirbaz-adimlar.tsx b/src/components/sihirbaz-adimlar.tsx index bcec019..0b370ea 100644 --- a/src/components/sihirbaz-adimlar.tsx +++ b/src/components/sihirbaz-adimlar.tsx @@ -3,8 +3,11 @@ // Sihirbazın 3 adımlık seçim gövdesi. Hem ana sayfadaki hero modalında hem de // /sonuc'taki sihirbaz modalında kullanılır; seçim state'ini kendi tutar, // tamamlanınca onTamamla(secimler) çağırır. +// +// Adımlar kademeli süzülür: 2. adımın illeri seçili kategorilere, 3. adımın +// üniversite tipi sayıları kategori+il'e göre /api/facetler'den tazelenir. -import { useState } from "react"; +import { useEffect, useState } from "react"; import { ArrowLeft, ArrowRight, Sparkles, X } from "lucide-react"; import { useReducedMotion } from "motion/react"; import useMeasure from "react-use-measure"; @@ -51,11 +54,15 @@ export function Cip({ const HARITA_ILLERI = new Set(cities.map((c) => normalizeIlAdi(c.name))); export function SihirbazAdimlar({ + sira, + tur, facetler, baslangicSecimler, sonButonEtiketi, onTamamla, }: { + sira: number; + tur: string; facetler: SihirbazFacetleri; baslangicSecimler?: SihirbazSecimleri | null; sonButonEtiketi: string; @@ -77,6 +84,45 @@ export function SihirbazAdimlar({ baslangicSecimler?.oncelikler ?? [], ); + // Kademeli facet'ler: kategoriler daima ilk yükten gelir; il ve üniversite + // tipi sayıları adıma girerken o anki seçimlerle tazelenir. Fetch başarısız + // olursa eldeki (daha geniş) liste kalır — sihirbaz asla kilitlenmez. + const [canliFacetler, setCanliFacetler] = useState(facetler); + const [facetYukleniyor, setFacetYukleniyor] = useState(false); + useEffect(() => { + if (adim === 0) return; + const ctrl = new AbortController(); + const params = new URLSearchParams({ sira: String(sira), tur }); + for (const k of kategoriler) params.append("kategori", k); + if (adim === 2) for (const i of iller) params.append("il", i); + // eslint-disable-next-line react-hooks/set-state-in-effect -- fetch başlangıç işareti + setFacetYukleniyor(true); + fetch(`/api/facetler?${params}`, { signal: ctrl.signal }) + .then((res) => (res.ok ? res.json() : null)) + .then((veri: { facetler: SihirbazFacetleri } | null) => { + if (!veri) return; + setCanliFacetler((mevcut) => ({ + ...mevcut, + iller: veri.facetler.iller, + uniturler: veri.facetler.uniturler, + })); + // Seçili tip daralan filtrede yoksa (ör. seçilen ilde vakıf kalmadı) + // görünmez bir seçim bırakma + setUniversiteTipi((tip) => + tip !== "farketmez" && + !veri.facetler.uniturler.some((u) => u.grup === tip) + ? "farketmez" + : tip, + ); + }) + .catch(() => {}) + .finally(() => setFacetYukleniyor(false)); + return () => ctrl.abort(); + // Seçimler yalnızca önceki adımlarda değişebildiği için adım geçişinde + // okumak yeterli; her çip tıklamasında istek atmayalım. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [adim]); + function listeDegistir( liste: string[], setListe: (v: string[]) => void, @@ -198,10 +244,14 @@ export function SihirbazAdimlar({

{/* Çipler birincil seçim yolu (haritadaki küçük iller mobilde - güvenilir dokunma hedefi değil); tüm iller program sayısına - göre sıralı listelenir. */} -
- {[...facetler.iller] + güvenilir dokunma hedefi değil); iller seçili kategorilere göre + süzülmüş, program sayısına göre sıralı listelenir. */} +
+ {[...canliFacetler.iller] .sort((a, b) => b.adet - a.adet) .map((i) => ( HARITA_ILLERI.has(i.il))} + iller={canliFacetler.iller.filter((i) => HARITA_ILLERI.has(i.il))} secili={iller} onToggle={(il) => listeDegistir(iller, setIller, il, 5)} /> @@ -256,8 +306,12 @@ export function SihirbazAdimlar({

Üniversite tipi

-
- {facetler.uniturler.map((u) => ( +
+ {canliFacetler.uniturler.map((u) => ( b.programSayisi - a.programSayisi) + .slice(0, 8); + + return ( +
+
+
+ + + + + +
+ +
+

+ © 2026 KolayTercih. Veriler resmî YÖK Atlas kaynağından derlenir; + KolayTercih, ÖSYM veya YÖK ile bağlantılı değildir. +

+

+ KolayTercih bir karar destek aracıdır, yerleşme garantisi vermez. + Tercih listenizin son hali ve başvuru sorumluluğu size aittir. +

+ +
+
+
+ ); +} diff --git a/src/components/site-header.tsx b/src/components/site-header.tsx index a31869c..81791d6 100644 --- a/src/components/site-header.tsx +++ b/src/components/site-header.tsx @@ -1,14 +1,9 @@ import { Suspense } from "react"; import Image from "next/image"; import Link from "next/link"; +import { KatalogArama } from "@/components/katalog-arama"; import { UserNav, UserNavFallback } from "@/components/user-nav"; -const navLinks = [ - { href: "/#nasil-calisir", label: "Nasıl çalışır?" }, - { href: "/#karsilastirma", label: "Karşılaştır" }, - { href: "/#sss", label: "SSS" }, -]; - export function SiteHeader() { return (
@@ -32,17 +27,7 @@ export function SiteHeader() { - + {/* UserNav session+DB bekler; Suspense dışına taşarsa tüm kabuk bloklanır */} }> diff --git a/src/components/universite-konum-haritasi.tsx b/src/components/universite-konum-haritasi.tsx new file mode 100644 index 0000000..33b4f12 --- /dev/null +++ b/src/components/universite-konum-haritasi.tsx @@ -0,0 +1,156 @@ +import { siApple, siGooglemaps } from "simple-icons"; +import { cities } from "turkey-map-react/lib/data"; +import { + HARITA_GENISLIK, + HARITA_UST_KIRPMA, + HARITA_YUKSEKLIK, + normalizeIlAdi, + uniKonum, +} from "@/lib/harita"; +import { trBaslikDuzeni } from "@/lib/slug"; + +function HaritaMarkaIkonu({ marka }: { marka: string }) { + const ikon = + marka === "Google" ? siGooglemaps : marka === "Apple" ? siApple : null; + + if (ikon) { + return ( + + + + ); + } + + return ( + + Я + + ); +} + +export function UniversiteKonumHaritasi({ + universite, + il, +}: { + universite: string; + il: string | null; +}) { + const konum = uniKonum(universite, il); + const ilAdi = il ? trBaslikDuzeni(il) : null; + const arama = `${universite}${ilAdi ? ` ${ilAdi}` : ""}`; + const sorgu = encodeURIComponent(arama); + const haritaBaglantilari = [ + { + ad: "Google", + href: `https://www.google.com/maps/search/?api=1&query=${sorgu}`, + }, + { ad: "Yandex", href: `https://yandex.com.tr/maps/?text=${sorgu}` }, + { ad: "Apple", href: `https://maps.apple.com/?q=${sorgu}` }, + ]; + + return ( +
+

+ {universite} kampüs konumu +

+ + {konum ? ( +
+
+ + {cities.map((city) => { + const secili = il ? normalizeIlAdi(city.name) === il : false; + return ( + + {city.name} + + ); + })} + + + + + + +
+ +
+ {haritaBaglantilari.map((baglanti) => ( + + + + ))} +
+
+ ) : ( +
+ {haritaBaglantilari.map((baglanti) => ( + + + + ))} +
+ )} +
+ ); +} diff --git a/src/lib/db.ts b/src/lib/db.ts index 05ff8dc..21c910d 100644 --- a/src/lib/db.ts +++ b/src/lib/db.ts @@ -31,16 +31,20 @@ export const PUAN_TURLERI = { export type PuanTuruKey = keyof typeof PUAN_TURLERI; +export type DilimKey = "hayal" | "dengeli" | "garanti"; + export type RankResults = { hayal: Program[]; dengeli: Program[]; garanti: Program[]; + /** Dilim başına pencereye düşen TOPLAM program sayısı (limit'ten bağımsız) */ + toplam: Record; }; // Dev'de hot-reload başına yeni bağlantı açılmasın diye global cache const globalForDb = globalThis as unknown as { yokatlasDb?: Database.Database }; -function getDb(): Database.Database { +export function getDb(): Database.Database { if (!globalForDb.yokatlasDb) { globalForDb.yokatlasDb = new Database( path.join(process.cwd(), "data", "yokatlas.db"), @@ -50,12 +54,12 @@ function getDb(): Database.Database { return globalForDb.yokatlasDb; } -const SELECT_COLS = `id, isim, universite, unitur, il, fakulte, tur, sure, +export const SELECT_COLS = `id, isim, universite, unitur, il, fakulte, tur, sure, sira2025, sira2024, sira2023, sira2022, sira2021, puan2025, kontenjan2025, yerlesen2025`; // 2025 sıralaması yoksa (az yerleşen/yeni program) 2024'e düşer -const EFEKTIF_SIRA = "COALESCE(sira2025, sira2024)"; +export const EFEKTIF_SIRA = "COALESCE(sira2025, sira2024)"; /** * Kullanıcının başarı sıralamasına göre programları üç dilime ayırır. @@ -74,20 +78,45 @@ function uniturFiltreSql(grup?: UniturGrubu): { sql: string; args: string[] } { return { sql: "", args: [] }; } -export function searchByRank( +/** + * Dilim sınırları. Pencereler çarpan bazlı DEĞİL, açık uçlu: hayal adayın + * üstündeki her şeyi, garanti 1.4× eşiğinin altındaki her şeyi kapsar. + * "Yakından uzağa" sıralama + limit/offset sayesinde uçtaki gerçekçi olmayan + * programlar ancak sayfalandıkça görünür; eski ×0.5/×3 pencereleri küçük + * sıralamalarda (ör. 87) hiç sonuç bırakmıyordu. + */ +export function dilimAraligi( + sira: number, + dilim: DilimKey +): { alt: number; ust: number | null } { + const dengeliUst = Math.round(sira * 1.4); + if (dilim === "hayal") return { alt: 1, ust: sira - 1 }; + if (dilim === "dengeli") return { alt: sira, ust: dengeliUst }; + return { alt: dengeliUst + 1, ust: null }; +} + +/** + * Tek dilimi "yakından uzağa" sıralı ve sayfalı getirir: hayal adayın + * sıralamasından yukarı (taban DESC), dengeli/garanti aşağı (taban ASC). + * toplam, limit'ten bağımsız olarak dilimdeki tüm eşleşme sayısıdır. + */ +export function dilimAra( sira: number, turKey: PuanTuruKey, + dilim: DilimKey, opts: { il?: string; iller?: string[]; uniturGrubu?: UniturGrubu; - limitPerBucket?: number; + limit?: number; + offset?: number; } = {} -): RankResults { +): { programlar: Program[]; toplam: number } { const db = getDb(); const tur = PUAN_TURLERI[turKey]; const onlisans = turKey === "tyt" ? 1 : 0; - const limitPerBucket = opts.limitPerBucket ?? 12; + const limit = opts.limit ?? 12; + const offset = opts.offset ?? 0; // il (tekil, geriye uyumlu) veya iller (çoklu) — ikisi de verilirse birleşir const illerListe = [ @@ -99,55 +128,64 @@ export function searchByRank( ? `AND il IN (${illerListe.map(() => "?").join(",")})` : ""; const unitur = uniturFiltreSql(opts.uniturGrubu); - const ilArgs = [...illerListe, ...unitur.args]; + + const { alt, ust } = dilimAraligi(sira, dilim); + if (ust != null && ust < alt) return { programlar: [], toplam: 0 }; + const siraKosulu = + ust != null ? `${EFEKTIF_SIRA} BETWEEN ? AND ?` : `${EFEKTIF_SIRA} >= ?`; + const siraArgs = ust != null ? [alt, ust] : [alt]; + const args = [tur, onlisans, ...illerListe, ...unitur.args, ...siraArgs]; const base = `FROM programs WHERE tur = ? AND onlisans = ? ${ilFiltre} ${unitur.sql} AND ${EFEKTIF_SIRA} IS NOT NULL - AND ${EFEKTIF_SIRA} BETWEEN ? AND ?`; + AND ${siraKosulu}`; + // hayal: sınıra en yakın (en büyük taban) önce; diğerleri en yakından uzağa + const yon = dilim === "hayal" ? "DESC" : "ASC"; - // hayal: kullanıcıdan daha iyi taban sıralaması (sınıra en yakın olanlar önce) - const hayal = db + const programlar = db .prepare( - `SELECT ${SELECT_COLS} ${base} ORDER BY ${EFEKTIF_SIRA} DESC LIMIT ?` + `SELECT ${SELECT_COLS} ${base} ORDER BY ${EFEKTIF_SIRA} ${yon} LIMIT ? OFFSET ?` ) - .all( - tur, - onlisans, - ...ilArgs, - Math.round(sira * 0.5), - sira - 1, - limitPerBucket - ); + .all(...args, limit, offset) as Program[]; + const toplam = ( + db.prepare(`SELECT COUNT(*) AS adet ${base}`).get(...args) as { + adet: number; + } + ).adet; - // dengeli: tabanı kullanıcının sıralaması civarında - const dengeli = db - .prepare(`SELECT ${SELECT_COLS} ${base} ORDER BY ${EFEKTIF_SIRA} ASC LIMIT ?`) - .all( - tur, - onlisans, - ...ilArgs, - sira, - Math.round(sira * 1.4), - limitPerBucket - ); + return { programlar, toplam }; +} - // garanti: tabanı belirgin şekilde altında - const garanti = db - .prepare(`SELECT ${SELECT_COLS} ${base} ORDER BY ${EFEKTIF_SIRA} ASC LIMIT ?`) - .all( - tur, - onlisans, - ...ilArgs, - Math.round(sira * 1.4) + 1, - Math.round(sira * 3), - limitPerBucket - ); +export function searchByRank( + sira: number, + turKey: PuanTuruKey, + opts: { + il?: string; + iller?: string[]; + uniturGrubu?: UniturGrubu; + limitPerBucket?: number; + } = {} +): RankResults { + const ortak = { + il: opts.il, + iller: opts.iller, + uniturGrubu: opts.uniturGrubu, + limit: opts.limitPerBucket ?? 12, + }; + const hayal = dilimAra(sira, turKey, "hayal", ortak); + const dengeli = dilimAra(sira, turKey, "dengeli", ortak); + const garanti = dilimAra(sira, turKey, "garanti", ortak); return { - hayal: hayal as Program[], - dengeli: dengeli as Program[], - garanti: garanti as Program[], + hayal: hayal.programlar, + dengeli: dengeli.programlar, + garanti: garanti.programlar, + toplam: { + hayal: hayal.toplam, + dengeli: dengeli.toplam, + garanti: garanti.toplam, + }, }; } @@ -155,39 +193,79 @@ export type SihirbazFacetleri = { kategoriler: { ad: string; adet: number }[]; iller: { il: string; adet: number }[]; uniturler: { grup: UniturGrubu; adet: number }[]; + /** Penceredeki (filtre uygulanmamış) toplam program sayısı */ + toplam: number; }; -// Sihirbaz bubble'ları için erişilebilir program penceresi: hayal alt sınırından -// (sira*0.5) garanti üst sınırına (sira*3) kadar. Böylece 500B sıradaki aday Tıp -// bubble'ı görmez; 5B sıradaki görür. +// Sihirbaz bubble'ları için erişilebilir program penceresi: hayal için +// gerçekçi alt sınırdan (sira*0.5) itibaren AÇIK uçlu — garanti tarafı artık +// sınırsız olduğundan üst kesim yok. Böylece 500B sıradaki aday Tıp bubble'ı +// görmez; 5B sıradaki görür. +// +// Kademeli (cascade) filtre: adımlar birbirini süzer. Kategoriler yalnızca +// pencereden; iller seçili kategorilerden; üniversite tipi kategori+il'den +// hesaplanır. Böylece "Mühendislik + İzmir" seçen aday 3. adımda yalnızca +// İzmir'deki mühendislik programlarının devlet/vakıf dağılımını görür. export function rankWindowFacets( sira: number, - turKey: PuanTuruKey + turKey: PuanTuruKey, + secim: { kategoriler?: string[]; iller?: string[] } = {} ): SihirbazFacetleri { const db = getDb(); const tur = PUAN_TURLERI[turKey]; const onlisans = turKey === "tyt" ? 1 : 0; const altSinir = Math.round(sira * 0.5); - const ustSinir = Math.round(sira * 3); - const base = `FROM programs - WHERE tur = ? AND onlisans = ? AND ${EFEKTIF_SIRA} IS NOT NULL - AND ${EFEKTIF_SIRA} BETWEEN ? AND ?`; - - // isim bazında say → JS'te kategoriye çevir (bir isim çok kategoriye girebilir) - const isimSayilari = db - .prepare(`SELECT isim, COUNT(*) AS adet ${base} GROUP BY isim`) - .all(tur, onlisans, altSinir, ustSinir) as { + const satirlar = db + .prepare( + `SELECT isim, il, unitur FROM programs + WHERE tur = ? AND onlisans = ? AND ${EFEKTIF_SIRA} IS NOT NULL + AND ${EFEKTIF_SIRA} >= ?` + ) + .all(tur, onlisans, altSinir) as { isim: string; - adet: number; + il: string | null; + unitur: string | null; }[]; - const kategoriSay = new Map(); - for (const { isim, adet } of isimSayilari) { - for (const k of kategoriBul(isim)) { - kategoriSay.set(k, (kategoriSay.get(k) ?? 0) + adet); + // isim → kategori eşlemesi pahalı (12 regex); tekrar eden isimler için önbellek + const kategoriCache = new Map(); + const kategorileriGetir = (isim: string): string[] => { + let k = kategoriCache.get(isim); + if (!k) { + k = kategoriBul(isim); + kategoriCache.set(isim, k); } + return k; + }; + + const seciliKategoriler = secim.kategoriler ?? []; + const kategoriUyar = (isim: string) => + seciliKategoriler.length === 0 || + kategorileriGetir(isim).some((k) => seciliKategoriler.includes(k)); + const seciliIller = new Set(secim.iller ?? []); + const ilUyar = (il: string | null) => + seciliIller.size === 0 || (il != null && seciliIller.has(il)); + + const kategoriSay = new Map(); + const ilSay = new Map(); + let devlet = 0; + let vakif = 0; + + for (const { isim, il, unitur } of satirlar) { + // 1. adım: kategoriler yalnızca pencereye bağlı (filtre uygulanmaz) + for (const k of kategorileriGetir(isim)) { + kategoriSay.set(k, (kategoriSay.get(k) ?? 0) + 1); + } + if (!kategoriUyar(isim)) continue; + // 2. adım: iller seçili kategorilerle süzülür + if (il) ilSay.set(il, (ilSay.get(il) ?? 0) + 1); + if (!ilUyar(il)) continue; + // 3. adım: üniversite tipi kategori + il ile süzülür + if (unitur === "DEVLET") devlet += 1; + else if (unitur) vakif += 1; } + const kategoriler = KATEGORILER.map((ad) => ({ ad, adet: kategoriSay.get(ad) ?? 0, @@ -195,33 +273,14 @@ export function rankWindowFacets( .filter((k) => k.adet >= 3) // gürültüyü ele .sort((a, b) => b.adet - a.adet); - const iller = ( - db - .prepare( - `SELECT il, COUNT(*) AS adet ${base} AND il IS NOT NULL AND il <> '' - GROUP BY il ORDER BY adet DESC LIMIT 15` - ) - .all(tur, onlisans, altSinir, ustSinir) as { - il: string; - adet: number; - }[] - ).filter((r) => r.adet > 0); + const iller = [...ilSay.entries()] + .map(([il, adet]) => ({ il, adet })) + .sort((a, b) => b.adet - a.adet) + .slice(0, 15); - const uniturSatirlari = db - .prepare(`SELECT unitur, COUNT(*) AS adet ${base} GROUP BY unitur`) - .all(tur, onlisans, altSinir, ustSinir) as { - unitur: string | null; - adet: number; - }[]; - let devlet = 0; - let vakif = 0; - for (const { unitur, adet } of uniturSatirlari) { - if (unitur === "DEVLET") devlet += adet; - else if (unitur) vakif += adet; - } const uniturler: { grup: UniturGrubu; adet: number }[] = []; if (devlet > 0) uniturler.push({ grup: "devlet", adet: devlet }); if (vakif > 0) uniturler.push({ grup: "vakif", adet: vakif }); - return { kategoriler, iller, uniturler }; + return { kategoriler, iller, uniturler, toplam: satirlar.length }; } diff --git a/src/lib/katalog.ts b/src/lib/katalog.ts new file mode 100644 index 0000000..77b7855 --- /dev/null +++ b/src/lib/katalog.ts @@ -0,0 +1,384 @@ +import { + getDb, + SELECT_COLS, + EFEKTIF_SIRA, + type Program, +} from "./db"; +import { kategoriBul, type Kategori } from "./kategoriler"; +import { uniAdiNormalize } from "./harita"; +import { bolumBazAdi, turkishSlugify, trBaslikDuzeni } from "./slug"; + +/** + * Programatik SEO sayfalarının veri katmanı (/bolum, /universite, hub'lar). + * + * Slug haritaları modül-scope'ta lazy kurulur: DB readonly açıldığı için + * slugs tablosu yazılamaz; SELECT DISTINCT (1.5K satır) süreç başına bir kez + * <10ms sürer. Harita değerleri HAM isim/universite dizeleridir — sorgular + * `WHERE isim IN (?, ...)` ile birebir eşleşip index'e vurur (WHERE içinde + * TRIM/fonksiyon kullanmak index'i öldürür). + */ + +// ---------- Bölüm tarafı ---------- + +export type BolumOzet = { + slug: string; + ad: string; + programSayisi: number; + kategoriler: Kategori[]; + lisans: boolean; + onlisans: boolean; + /** MIN(COALESCE(sira2025, sira2024)) — en iyi (en küçük) taban sıralaması */ + enIyiSira: number | null; +}; + +export type BolumStats = { + toplam: number; + devlet: number; + vakif: number; + /** unitur boş/NULL olan satırlar — vakıf SAYILMAZ, ayrı gösterilir */ + bilinmeyenTur: number; + minSira: number | null; + maxSira: number | null; + minPuan: number | null; + maxPuan: number | null; + ilSayisi: number; +}; + +export type BolumDetay = BolumOzet & { + lisansProgramlari: Program[]; + onlisansProgramlari: Program[]; + stats: BolumStats; +}; + +type BolumKayit = { slug: string; ad: string; hamIsimler: string[] }; + +const globalKatalog = globalThis as unknown as { + bolumMap?: Map; + bolumOzetler?: BolumOzet[]; + uniMap?: Map; + uniOzetler?: UniOzet[]; +}; + +function bolumMapGetir(): Map { + if (!globalKatalog.bolumMap) { + const rows = getDb() + .prepare("SELECT DISTINCT isim FROM programs") + .all() as { isim: string }[]; + const map = new Map(); + for (const { isim } of rows) { + const baz = bolumBazAdi(isim); + if (!baz) continue; + const slug = turkishSlugify(baz); + if (!slug) continue; + const kayit = map.get(slug); + if (kayit) kayit.hamIsimler.push(isim); + else map.set(slug, { slug, ad: baz, hamIsimler: [isim] }); + } + if (map.size === 0) { + // generateStaticParams boş dizi dönerse build hatası — boş DB'yi erken yakala + throw new Error("katalog: programs tablosu boş görünüyor"); + } + globalKatalog.bolumMap = map; + } + return globalKatalog.bolumMap; +} + +export function getAllBolumler(): BolumOzet[] { + if (!globalKatalog.bolumOzetler) { + const map = bolumMapGetir(); + // Tek taramada tüm bölümlerin özeti: 23K satır, süreç başına bir kez + const rows = getDb() + .prepare( + `SELECT isim, onlisans, ${EFEKTIF_SIRA} AS efektif FROM programs`, + ) + .all() as { isim: string; onlisans: number; efektif: number | null }[]; + + const ozet = new Map(); + const slugByIsim = new Map(); + for (const kayit of map.values()) { + for (const ham of kayit.hamIsimler) slugByIsim.set(ham, kayit.slug); + ozet.set(kayit.slug, { + slug: kayit.slug, + ad: kayit.ad, + programSayisi: 0, + kategoriler: kategoriBul(kayit.ad), + lisans: false, + onlisans: false, + enIyiSira: null, + }); + } + for (const row of rows) { + const slug = slugByIsim.get(row.isim); + if (!slug) continue; + const b = ozet.get(slug)!; + b.programSayisi += 1; + if (row.onlisans === 1) b.onlisans = true; + else b.lisans = true; + if (row.efektif != null && (b.enIyiSira == null || row.efektif < b.enIyiSira)) { + b.enIyiSira = row.efektif; + } + } + globalKatalog.bolumOzetler = [...ozet.values()].sort((a, b) => + a.ad.localeCompare(b.ad, "tr-TR"), + ); + } + return globalKatalog.bolumOzetler; +} + +export function getAllBolumSlugs(): string[] { + return [...bolumMapGetir().keys()]; +} + +export function getBolumBySlug(slug: string): BolumDetay | null { + const kayit = bolumMapGetir().get(slug); + if (!kayit) return null; + + const placeholders = kayit.hamIsimler.map(() => "?").join(","); + const programlar = getDb() + .prepare( + `SELECT ${SELECT_COLS} FROM programs + WHERE isim IN (${placeholders}) + ORDER BY (${EFEKTIF_SIRA} IS NULL), ${EFEKTIF_SIRA} ASC`, + ) + .all(...kayit.hamIsimler) as (Program & { onlisans?: number })[]; + + // onlisans SELECT_COLS içinde yok; tur üzerinden ayır (TYT = önlisans) + const lisansProgramlari = programlar.filter((p) => p.tur !== "TYT"); + const onlisansProgramlari = programlar.filter((p) => p.tur === "TYT"); + + const iller = new Set(); + let devlet = 0; + let vakif = 0; + let bilinmeyenTur = 0; + let minSira: number | null = null; + let maxSira: number | null = null; + let minPuan: number | null = null; + let maxPuan: number | null = null; + for (const p of programlar) { + if (p.il) iller.add(p.il); + if (p.unitur === "DEVLET") devlet += 1; + else if (p.unitur) vakif += 1; + else bilinmeyenTur += 1; + const efektif = p.sira2025 ?? p.sira2024; + if (efektif != null) { + if (minSira == null || efektif < minSira) minSira = efektif; + if (maxSira == null || efektif > maxSira) maxSira = efektif; + } + if (p.puan2025 != null) { + if (minPuan == null || p.puan2025 < minPuan) minPuan = p.puan2025; + if (maxPuan == null || p.puan2025 > maxPuan) maxPuan = p.puan2025; + } + } + + const ozet = getAllBolumler().find((b) => b.slug === slug)!; + return { + ...ozet, + lisansProgramlari, + onlisansProgramlari, + stats: { + toplam: programlar.length, + devlet, + vakif, + bilinmeyenTur, + minSira, + maxSira, + minPuan, + maxPuan, + ilSayisi: iller.size, + }, + }; +} + +/** Aynı kategorideki diğer bölümler, program sayısına göre (kendisi hariç). */ +export function ilgiliBolumler(slug: string, limit = 8): BolumOzet[] { + const hepsi = getAllBolumler(); + const kendi = hepsi.find((b) => b.slug === slug); + if (!kendi) return []; + const kendiKategoriler = new Set(kendi.kategoriler); + return hepsi + .filter( + (b) => + b.slug !== slug && + (kendiKategoriler.size === 0 || + b.kategoriler.some((k) => kendiKategoriler.has(k))), + ) + .sort((a, b) => b.programSayisi - a.programSayisi) + .slice(0, limit); +} + +// ---------- Üniversite tarafı ---------- + +export type UniOzet = { + slug: string; + /** tr-TR başlık düzeninde görünen ad (İstanbul Teknik Üniversitesi) */ + ad: string; + il: string | null; + unitur: string | null; + programSayisi: number; + fakulteSayisi: number; +}; + +export type UniDetay = UniOzet & { + fakulteler: { fakulte: string; programlar: Program[] }[]; + stats: { + minSira: number | null; + toplamKontenjan: number; + devletMi: boolean; + }; +}; + +type UniKayit = { slug: string; ad: string; hamAdlar: string[] }; + +function uniMapGetir(): Map { + if (!globalKatalog.uniMap) { + const rows = getDb() + .prepare("SELECT DISTINCT universite FROM programs") + .all() as { universite: string }[]; + const map = new Map(); + for (const { universite } of rows) { + const normal = uniAdiNormalize(universite); + if (!normal) continue; + const slug = turkishSlugify(normal); + if (!slug) continue; + const kayit = map.get(slug); + if (kayit) kayit.hamAdlar.push(universite); + else + map.set(slug, { + slug, + ad: trBaslikDuzeni(normal), + hamAdlar: [universite], + }); + } + if (map.size === 0) { + throw new Error("katalog: programs tablosunda üniversite yok"); + } + globalKatalog.uniMap = map; + } + return globalKatalog.uniMap; +} + +export function getAllUniversiteler(): UniOzet[] { + if (!globalKatalog.uniOzetler) { + const map = uniMapGetir(); + const rows = getDb() + .prepare( + `SELECT universite, MAX(il) AS il, MAX(unitur) AS unitur, + COUNT(*) AS adet + FROM programs GROUP BY universite`, + ) + .all() as { + universite: string; + il: string | null; + unitur: string | null; + adet: number; + }[]; + // Fakülte sayısı: aynı üniversitenin iki yazımı ("X ÜNİV." / "X ÜNİV. (İL)") + // birleştiği için GROUP BY universite üzerinden saymak çift sayardı; + // (slug, fakulte) çifti üzerinden kesin sayılır. + const fakulteRows = getDb() + .prepare( + "SELECT DISTINCT universite, fakulte FROM programs WHERE fakulte IS NOT NULL", + ) + .all() as { universite: string; fakulte: string }[]; + + const bySlug = new Map(); + const slugByHam = new Map(); + for (const kayit of map.values()) { + for (const ham of kayit.hamAdlar) slugByHam.set(ham, kayit.slug); + bySlug.set(kayit.slug, { + slug: kayit.slug, + ad: kayit.ad, + il: null, + unitur: null, + programSayisi: 0, + fakulteSayisi: 0, + }); + } + for (const row of rows) { + const slug = slugByHam.get(row.universite); + if (!slug) continue; + const u = bySlug.get(slug)!; + u.programSayisi += row.adet; + if (!u.il && row.il) u.il = row.il; + if (!u.unitur && row.unitur) u.unitur = row.unitur; + } + const fakulteSetleri = new Map>(); + for (const row of fakulteRows) { + const slug = slugByHam.get(row.universite); + if (!slug) continue; + let set = fakulteSetleri.get(slug); + if (!set) { + set = new Set(); + fakulteSetleri.set(slug, set); + } + set.add(row.fakulte); + } + for (const [slug, set] of fakulteSetleri) { + bySlug.get(slug)!.fakulteSayisi = set.size; + } + globalKatalog.uniOzetler = [...bySlug.values()].sort((a, b) => + a.ad.localeCompare(b.ad, "tr-TR"), + ); + } + return globalKatalog.uniOzetler; +} + +export function getAllUniversiteSlugs(): string[] { + return [...uniMapGetir().keys()]; +} + +export function getUniversiteBySlug(slug: string): UniDetay | null { + const kayit = uniMapGetir().get(slug); + if (!kayit) return null; + + const placeholders = kayit.hamAdlar.map(() => "?").join(","); + const programlar = getDb() + .prepare( + `SELECT ${SELECT_COLS} FROM programs + WHERE universite IN (${placeholders}) + ORDER BY fakulte, (${EFEKTIF_SIRA} IS NULL), ${EFEKTIF_SIRA} ASC`, + ) + .all(...kayit.hamAdlar) as Program[]; + + const gruplar = new Map(); + let minSira: number | null = null; + let toplamKontenjan = 0; + for (const p of programlar) { + const anahtar = p.fakulte ?? "Diğer"; + const liste = gruplar.get(anahtar); + if (liste) liste.push(p); + else gruplar.set(anahtar, [p]); + const efektif = p.sira2025 ?? p.sira2024; + if (efektif != null && (minSira == null || efektif < minSira)) { + minSira = efektif; + } + toplamKontenjan += p.kontenjan2025 ?? 0; + } + + const ozet = getAllUniversiteler().find((u) => u.slug === slug)!; + return { + ...ozet, + fakulteler: [...gruplar.entries()] + .map(([fakulte, programlar]) => ({ fakulte, programlar })) + .sort((a, b) => a.fakulte.localeCompare(b.fakulte, "tr-TR")), + stats: { + minSira, + toplamKontenjan, + devletMi: ozet.unitur === "DEVLET", + }, + }; +} + +// ---------- Yardımcılar ---------- + +/** Ham program isminden /bolum sayfası slug'ı (tablolarda çapraz link için). */ +export function bolumSlugFromIsim(isim: string): string | null { + const slug = turkishSlugify(bolumBazAdi(isim)); + return bolumMapGetir().has(slug) ? slug : null; +} + +/** Ham üniversite adından /universite sayfası slug'ı. */ +export function uniSlugFromAd(universite: string): string | null { + const slug = turkishSlugify(uniAdiNormalize(universite)); + return uniMapGetir().has(slug) ? slug : null; +} diff --git a/src/lib/rehber.ts b/src/lib/rehber.ts new file mode 100644 index 0000000..67eff53 --- /dev/null +++ b/src/lib/rehber.ts @@ -0,0 +1,90 @@ +import fs from "node:fs"; +import path from "node:path"; +import { marked } from "marked"; + +/** + * Rehber makaleleri: content/rehber/*.md dosyaları build sırasında okunur ve + * statik HTML'e gömülür (sayfalar generateStaticParams + dynamicParams=false + * ile tamamen prerender edilir; runtime'da fs erişimi olmaz). + * + * Frontmatter elle parse edilir (yalnızca düz `anahtar: değer` satırları) — + * 10 makale için gray-matter bağımlılığına gerek yok. + */ + +export type RehberOzet = { + slug: string; + baslik: string; + aciklama: string; + /** ISO tarih — Article JSON-LD datePublished */ + tarih: string; +}; + +export type RehberYazi = RehberOzet & { html: string }; + +const REHBER_DIZIN = path.join(process.cwd(), "content", "rehber"); + +function parseFrontmatter(raw: string): { + meta: Record; + body: string; +} { + const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/); + if (!match) return { meta: {}, body: raw }; + const meta: Record = {}; + for (const satir of match[1].split(/\r?\n/)) { + const ayrac = satir.indexOf(":"); + if (ayrac === -1) continue; + const anahtar = satir.slice(0, ayrac).trim(); + const deger = satir + .slice(ayrac + 1) + .trim() + .replace(/^["']|["']$/g, ""); + if (anahtar) meta[anahtar] = deger; + } + return { meta, body: raw.slice(match[0].length) }; +} + +function oku(slug: string): RehberYazi | null { + const dosya = path.join(REHBER_DIZIN, `${slug}.md`); + if (!fs.existsSync(dosya)) return null; + const { meta, body } = parseFrontmatter(fs.readFileSync(dosya, "utf8")); + if (!meta.baslik || !meta.aciklama || !meta.tarih) { + throw new Error( + `rehber: ${slug}.md frontmatter eksik (baslik/aciklama/tarih zorunlu)`, + ); + } + return { + slug, + baslik: meta.baslik, + aciklama: meta.aciklama, + tarih: meta.tarih, + html: marked.parse(body, { gfm: true, async: false }), + }; +} + +export function getAllRehberSlugs(): string[] { + if (!fs.existsSync(REHBER_DIZIN)) return []; + return fs + .readdirSync(REHBER_DIZIN) + .filter((f) => f.endsWith(".md")) + .map((f) => f.replace(/\.md$/, "")) + .sort(); +} + +export function getRehber(slug: string): RehberYazi | null { + // path traversal koruması: slug yalnızca dosya adı olabilir + if (!/^[a-z0-9-]+$/.test(slug)) return null; + return oku(slug); +} + +export function getAllRehberler(): RehberOzet[] { + return getAllRehberSlugs() + .map((slug) => oku(slug)) + .filter((y): y is RehberYazi => y !== null) + .map(({ slug, baslik, aciklama, tarih }) => ({ + slug, + baslik, + aciklama, + tarih, + })) + .sort((a, b) => b.tarih.localeCompare(a.tarih)); +} diff --git a/src/lib/risk.ts b/src/lib/risk.ts index ed219df..54121a8 100644 --- a/src/lib/risk.ts +++ b/src/lib/risk.ts @@ -15,7 +15,7 @@ export const RISK_ETIKET: Record = { /** * Deterministik risk: programın efektif taban sıralaması (COALESCE 2025→2024) * adayın sıralamasıyla kıyaslanır. Eşikler db.ts'teki dilim aralıklarıyla - * birebir aynı (dengeli: [sira, 1.4×sira], garanti: (1.4×sira, 3×sira]). + * birebir aynı (dengeli: [sira, 1.4×sira], garanti: (1.4×sira, ∞)). */ export function riskHesapla( efektifSira: number | null | undefined, diff --git a/src/lib/seo.tsx b/src/lib/seo.tsx new file mode 100644 index 0000000..28de4cd --- /dev/null +++ b/src/lib/seo.tsx @@ -0,0 +1,124 @@ +import { URUNLER } from "./credits"; + +/** + * Kanonik site adresi. NEXT_PUBLIC_APP_URL bilinçli olarak KULLANILMAZ — + * o değişken ödeme callback akışına ait ve .env.local'de localhost'a işaret + * ediyor. .dockerignore .env* dosyalarını dışladığı için prod build burada + * deterministik olarak kolaytercih.com'a düşer. + */ +export const SITE_URL = + process.env.NEXT_PUBLIC_SITE_URL ?? + (process.env.NODE_ENV === "production" + ? "https://kolaytercih.com" + : "http://localhost:3000"); + +export const SITE_NAME = "KolayTercih"; + +type JsonLdData = Record; + +export function organizationJsonLd(): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "Organization", + name: SITE_NAME, + url: SITE_URL, + logo: `${SITE_URL}/kolay-tercih-mark.svg`, + contactPoint: { + "@type": "ContactPoint", + email: "destek@kolaytercih.com", + contactType: "customer support", + availableLanguage: "Turkish", + }, + }; +} + +export function webSiteJsonLd(): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "WebSite", + name: SITE_NAME, + url: SITE_URL, + inLanguage: "tr", + }; +} + +export function softwareApplicationJsonLd(): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "SoftwareApplication", + name: SITE_NAME, + applicationCategory: "EducationalApplication", + operatingSystem: "Web", + url: SITE_URL, + inLanguage: "tr", + offers: { + "@type": "Offer", + price: (URUNLER.paket.amountKurus / 100).toFixed(0), + priceCurrency: "TRY", + description: URUNLER.paket.label, + }, + }; +} + +export function faqPageJsonLd( + faqs: readonly { question: string; answer: string }[], +): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "FAQPage", + mainEntity: faqs.map((f) => ({ + "@type": "Question", + name: f.question, + acceptedAnswer: { "@type": "Answer", text: f.answer }, + })), + }; +} + +export function breadcrumbJsonLd( + items: readonly { name: string; path: string }[], +): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "BreadcrumbList", + itemListElement: items.map((item, i) => ({ + "@type": "ListItem", + position: i + 1, + name: item.name, + item: `${SITE_URL}${item.path}`, + })), + }; +} + +export function articleJsonLd(opts: { + title: string; + description: string; + path: string; + datePublished: string; +}): JsonLdData { + return { + "@context": "https://schema.org", + "@type": "Article", + headline: opts.title, + description: opts.description, + url: `${SITE_URL}${opts.path}`, + datePublished: opts.datePublished, + inLanguage: "tr", + publisher: { + "@type": "Organization", + name: SITE_NAME, + url: SITE_URL, + }, + }; +} + +/** JSON-LD'yi güvenli gömer: `<` kaçışı script-injection'ı engeller. */ +export function JsonLd({ data }: { data: JsonLdData }) { + return ( +