import type { Metadata } from "next"; import Link from "next/link"; import { Building2, ChevronRight, Landmark, LayoutList, MapPin, } from "lucide-react"; import { getAllUniversiteler, type UniOzet } from "../katalog-queries"; import { CtaSiraForm } from "@/features/sihirbaz/components/cta-sira-form"; import { PagePixelDivider } from "@/components/pixel-decor"; import { OzetKart } from "@/components/ozet-kart"; import { Skeleton } from "@/components/ui/skeleton"; import { JsonLd, breadcrumbJsonLd, sayfaMetadata, ustSegmentOgGorseli, } from "@/lib/seo"; import { ilSayfaHref, trBaslikDuzeni, turkishSlugify } from "@/lib/slug"; import { TUR_SAYFALARI, type TurSlug } from "@/lib/unitur"; import { BASLIK_YILI, SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; import { NavBaslik } from "./nav-baslik"; import { TurkiyePikselHaritasi } from "./sehir-piksel-haritasi"; import { SehirYuzeyi } from "./sehir-yuzeyi"; import { UniSatirlari } from "./uni-satirlari"; const sayi = (n: number) => n.toLocaleString("tr-TR"); function turUnileri(tur: TurSlug): UniOzet[] { const set = new Set(TUR_SAYFALARI[tur].uniturler); return getAllUniversiteler().filter((u) => u.unitur && set.has(u.unitur)); } export function turSayfaMetadata(tur: TurSlug): Metadata { const t = TUR_SAYFALARI[tur]; const uniler = turUnileri(tur); const program = uniler.reduce((a, u) => a + u.programSayisi, 0); return sayfaMetadata({ title: `${t.ad} Taban Puanları ve Sıralamaları ${BASLIK_YILI}`, description: `Türkiye'deki ${uniler.length} ${t.tekil}nin ${SON_YIL} YKS yerleştirme verileri: ${sayi(program)} programın taban puanları, başarı sıralamaları ve kontenjanları, şehir şehir. ${TERCIH_YILI} tercih rehberi.`, path: `/universiteler/${t.slug}`, openGraph: { images: ustSegmentOgGorseli( "/universiteler", "Üniversitelerin taban puanları ve sıralamaları — KolayTercih", ), }, }); } /** * /universiteler/devlet ve /universiteler/vakif (DESIGN.md §4.18). Şehir * sayfasıyla aynı iskelet; kreatif fark: başlık yüzeyindeki dot-matrix * Türkiye'de bu türden üniversitesi olan **her il** turuncu yanar, yakınlaşma * yok — "devlet üniversiteleri Türkiye'nin neresinde" tek bakışta. Altında * üç özet kartı, şehir çipleri (bu türün il başına sayısı) ve şehir şehir * §4.15 liste satırları. */ export function TurIcerik({ tur }: { tur: TurSlug }) { const t = TUR_SAYFALARI[tur]; const uniler = turUnileri(tur); const program = uniler.reduce((a, u) => a + u.programSayisi, 0); // Şehir öbekleri: üniversitenin ana ili (UniOzet.il); ili boş olan sona. const ilOzet = new Map(); const ilsiz: UniOzet[] = []; for (const u of uniler) { if (!u.il) { ilsiz.push(u); continue; } let k = ilOzet.get(u.il); if (!k) { k = { il: u.il, ad: trBaslikDuzeni(u.il), uniler: [] }; ilOzet.set(u.il, k); } k.uniler.push(u); } const sehirler = [...ilOzet.values()].sort((a, b) => a.ad.localeCompare(b.ad, "tr-TR"), ); const cipSehirler = [...sehirler].sort( (a, b) => b.uniler.length - a.uniler.length || a.ad.localeCompare(b.ad, "tr-TR"), ); const Ikon = tur === "devlet" ? Landmark : Building2; const DigerIkon = tur === "devlet" ? Building2 : Landmark; const ctaBaslik = `Sıralaman ${t.tekil} tabanlarının neresinde?`; const digerTur = tur === "devlet" ? TUR_SAYFALARI.vakif : TUR_SAYFALARI.devlet; return (
s.il)} etiket={`${t.ad} Türkiye haritasında: ${sehirler.length} il`} doldur /> } metin={

{t.ad} Taban Puanları {BASLIK_YILI}

{/* Kimlik hapları (§4.12): tür + öteki türe geçiş */}

{tur === "devlet" ? "Devlet" : "Vakıf"} {digerTur.ad}

Türkiye'de {SON_YIL} YKS yerleştirmesinde öğrenci alan{" "} {sayi(uniler.length)} {t.tekil} , {sayi(sehirler.length)} şehirde toplam{" "} {sayi(program)} program açtı. Haritada turuncu yanan her ilde en az bir {t.tekil} var. Üniversiteye tıklayınca programlarının taban puanlarını, başarı sıralamalarını ve kontenjanlarını fakülte fakülte görürsün; {TERCIH_YILI} tercihleri için rehber niteliğindedir.

} />

Şehre göre {sayi(sehirler.length)} şehir

{sehirler.map((s) => (

{s.ad} {sayi(s.uniler.length)}

))} {ilsiz.length > 0 ? (

Diğer

) : null}
); } export function TurIcerikSkeleton() { return (
); }