From 38e02e0ed98394aef30d181c6d9e585ae6bffdf1 Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Mon, 21 Sep 2026 16:35:24 +0300 Subject: [PATCH 1/9] =?UTF-8?q?feat(veri):=20y=C4=B1l=20kapsam=C4=B1=20tek?= =?UTF-8?q?=20kayna=C4=9F=C4=B1=20(veri-yillari.ts)=20=E2=80=94=202026=20y?= =?UTF-8?q?=C3=BCklemesi=20P-0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Fable 5.1 --- src/lib/veri-yillari.ts | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 src/lib/veri-yillari.ts diff --git a/src/lib/veri-yillari.ts b/src/lib/veri-yillari.ts new file mode 100644 index 0000000..2e0b014 --- /dev/null +++ b/src/lib/veri-yillari.ts @@ -0,0 +1,38 @@ +/** + * Yerleştirme verisinin yıl kapsamı — TEK KAYNAK. Saf ve import'suz: client, + * server ve `scripts/` aynı dosyayı okur. Yeni yıl verisi yüklenince yalnız + * `SON_YIL` değişir (+ `pnpm refresh -- --yil ` ile DB inşası). + */ + +/** Veri penceresinin ilk yılı. Kayıtlı rapor/tadımlık `siraGecmisi` dizileri + * bu yıla demirlidir; pencere kaydırılmaz, uzar. */ +export const ILK_YIL = 2021; + +/** En son yerleştirme yılı (DB'de `sira${SON_YIL}` kolonları dolu). */ +export const SON_YIL = 2026; + +export const ONCEKI_YIL = SON_YIL - 1; + +/** [2021, …, SON_YIL] — `siraGecmisi` dizileriyle indeks hizalı. */ +export const YILLAR: readonly number[] = Array.from( + { length: SON_YIL - ILK_YIL + 1 }, + (_, i) => ILK_YIL + i, +); + +/** Bu veriyle tercih yapacak öğrencilerin yılı. */ +export const TERCIH_YILI = SON_YIL + 1; + +/** Sayfa başlıklarında görünen yıl ("… Taban Puanları 2026"). */ +export const BASLIK_YILI = SON_YIL; + +export const VERI_YIL_SAYISI = YILLAR.length; + +/** "2021–2026" */ +export const VERI_ARALIGI = `${ILK_YIL}–${SON_YIL}`; + +/** + * Efektif sıra: son yılın sırası, yoksa bir önceki yılınki. İNDEKS SÖZLEŞMESİ — + * SQLite ifade indeksi metinsel eşleşmeyle çalışır; sorgular ve indeks + * betikleri bu dizgiyi birebir (virgülden sonra tek boşluk) kullanmalıdır. + */ +export const EFEKTIF_SIRA_SQL = `COALESCE(sira${SON_YIL}, sira${ONCEKI_YIL})`; From 3fa5cab9066fc4b042c0cadb6fa35fbfff88617e Mon Sep 17 00:00:00 2001 From: bilalgursen Date: Mon, 21 Sep 2026 16:53:42 +0300 Subject: [PATCH 2/9] =?UTF-8?q?feat(veri):=20katalog/OG/rapor=20metinleri?= =?UTF-8?q?=20y=C4=B1l=C4=B1=20veri-yillari.ts'ten=20okur=20=E2=80=94=2020?= =?UTF-8?q?26=20y=C3=BCklemesi=20P-C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - "2025 yerleştirme" → SON_YIL, "2026 tercihleri" → TERCIH_YILI, başlık yılı → BASLIK_YILI - yazdırılabilir rapor dipnotu: "2021–2025" → VERI_ARALIGI - meraklısına 1. bölüm: efektif sıra açıklaması yılsız - KATALOG_VERI_TARIHI: 2026-09-21 (2026 verisinin çekim tarihi) Co-Authored-By: Claude Fable 5.1 --- src/app/bolum/[slug]/opengraph-image.tsx | 3 ++- src/app/bolumler/opengraph-image.tsx | 6 +++--- src/app/bolumler/page.tsx | 11 +++++++---- src/app/universite/[slug]/opengraph-image.tsx | 3 ++- src/app/universiteler/opengraph-image.tsx | 6 +++--- src/app/universiteler/page.tsx | 11 +++++++---- src/features/katalog/components/bolum-listesi.tsx | 7 ++++--- .../katalog/components/universite-listesi.tsx | 7 ++++--- src/features/katalog/components/veri-kaynagi.tsx | 5 +++-- .../pazarlama/components/meraklisina-icerik.tsx | 4 ++-- src/features/rapor/components/rapor-yazdir.tsx | 3 ++- src/lib/seo.tsx | 2 +- 12 files changed, 40 insertions(+), 28 deletions(-) diff --git a/src/app/bolum/[slug]/opengraph-image.tsx b/src/app/bolum/[slug]/opengraph-image.tsx index 1703927..71f2945 100644 --- a/src/app/bolum/[slug]/opengraph-image.tsx +++ b/src/app/bolum/[slug]/opengraph-image.tsx @@ -4,6 +4,7 @@ import { OG_CONTENT_TYPE, OG_SIZE, } from "@/lib/og-sayfa"; +import { SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; export const alt = "Bölüm taban puanları ve sıralamaları — KolayTercih"; export const size = OG_SIZE; @@ -26,6 +27,6 @@ export default async function Image({ return createOgSayfaImage({ eyebrow: "Bölüm", title: `${ad} taban puanları`, - description: `${sayi}2025 yerleştirme verileri · 2026 tercih rehberi`, + description: `${sayi}${SON_YIL} yerleştirme verileri · ${TERCIH_YILI} tercih rehberi`, }); } diff --git a/src/app/bolumler/opengraph-image.tsx b/src/app/bolumler/opengraph-image.tsx index 9df4d77..0ae7dbb 100644 --- a/src/app/bolumler/opengraph-image.tsx +++ b/src/app/bolumler/opengraph-image.tsx @@ -3,9 +3,9 @@ import { OG_CONTENT_TYPE, OG_SIZE, } from "@/lib/og-sayfa"; +import { BASLIK_YILI, SON_YIL } from "@/lib/veri-yillari"; -export const alt = - "Tüm bölümlerin taban puanları ve sıralamaları 2026 — KolayTercih"; +export const alt = `Tüm bölümlerin taban puanları ve sıralamaları ${BASLIK_YILI} — KolayTercih`; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; @@ -13,6 +13,6 @@ export default async function Image() { return createOgSayfaImage({ eyebrow: "Katalog", title: "Tüm bölümlerin taban puanları ve sıralamaları", - description: "Lisans ve önlisans programları · 2025 yerleştirme verileri", + description: `Lisans ve önlisans programları · ${SON_YIL} yerleştirme verileri`, }); } diff --git a/src/app/bolumler/page.tsx b/src/app/bolumler/page.tsx index 9f4e660..16990c6 100644 --- a/src/app/bolumler/page.tsx +++ b/src/app/bolumler/page.tsx @@ -1,16 +1,19 @@ import { Suspense } from "react"; import type { Metadata } from "next"; import { JsonLd, breadcrumbJsonLd, sayfaMetadata } from "@/lib/seo"; +import { BASLIK_YILI, SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; import { SiteFooter } from "@/components/site-footer"; import { BolumKatalogu, BolumKataloguSkeleton, } from "@/features/katalog/components/bolum-listesi"; +// Başlıktaki yıl tek kaynaktan (veri-yillari.ts); metadata ve h1 aynı metni okur. +const BASLIK = `Tüm Bölümlerin Taban Puanları ve Sıralamaları ${BASLIK_YILI}`; + export const metadata: Metadata = sayfaMetadata({ - 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.", + title: BASLIK, + description: `Üniversite bölümlerinin ${SON_YIL} yerleştirme taban puanları ve başarı sıralamaları: lisans ve önlisans programları kategori kategori, ${TERCIH_YILI} tercihleri için.`, path: "/bolumler", }); @@ -26,7 +29,7 @@ export default function BolumlerPage() { />

- Tüm Bölümlerin Taban Puanları ve Sıralamaları 2026 + {BASLIK}

}> diff --git a/src/app/universite/[slug]/opengraph-image.tsx b/src/app/universite/[slug]/opengraph-image.tsx index 4772c5b..f756bad 100644 --- a/src/app/universite/[slug]/opengraph-image.tsx +++ b/src/app/universite/[slug]/opengraph-image.tsx @@ -8,6 +8,7 @@ import { OG_CONTENT_TYPE, OG_SIZE, } from "@/lib/og-sayfa"; +import { SON_YIL } from "@/lib/veri-yillari"; export const alt = "Üniversite taban puanları ve sıralamaları — KolayTercih"; export const size = OG_SIZE; @@ -26,7 +27,7 @@ export default async function Image({ if (uni?.programSayisi != null) { parcalar.push(`${uni.programSayisi.toLocaleString("tr-TR")} program`); } - parcalar.push("2025 yerleştirme verileri"); + parcalar.push(`${SON_YIL} yerleştirme verileri`); // Logo dosyası varsa OG kartına data URI olarak gömülür; okuma hatası // kartı düşürmesin diye sessizce logosuz karta düşülür. diff --git a/src/app/universiteler/opengraph-image.tsx b/src/app/universiteler/opengraph-image.tsx index 07fb32c..ba84552 100644 --- a/src/app/universiteler/opengraph-image.tsx +++ b/src/app/universiteler/opengraph-image.tsx @@ -3,9 +3,9 @@ import { OG_CONTENT_TYPE, OG_SIZE, } from "@/lib/og-sayfa"; +import { BASLIK_YILI, SON_YIL } from "@/lib/veri-yillari"; -export const alt = - "Üniversitelerin taban puanları ve sıralamaları 2026 — KolayTercih"; +export const alt = `Üniversitelerin taban puanları ve sıralamaları ${BASLIK_YILI} — KolayTercih`; export const size = OG_SIZE; export const contentType = OG_CONTENT_TYPE; @@ -13,6 +13,6 @@ export default async function Image() { return createOgSayfaImage({ eyebrow: "Katalog", title: "Üniversitelerin taban puanları ve sıralamaları", - description: "Devlet ve vakıf üniversiteleri · 2025 yerleştirme verileri", + description: `Devlet ve vakıf üniversiteleri · ${SON_YIL} yerleştirme verileri`, }); } diff --git a/src/app/universiteler/page.tsx b/src/app/universiteler/page.tsx index 5c07342..082f844 100644 --- a/src/app/universiteler/page.tsx +++ b/src/app/universiteler/page.tsx @@ -1,16 +1,19 @@ import { Suspense } from "react"; import type { Metadata } from "next"; import { JsonLd, breadcrumbJsonLd, sayfaMetadata } from "@/lib/seo"; +import { BASLIK_YILI, SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; import { SiteFooter } from "@/components/site-footer"; import { UniversiteKatalogu, UniversiteKataloguSkeleton, } from "@/features/katalog/components/universite-listesi"; +// Başlıktaki yıl tek kaynaktan (veri-yillari.ts); metadata ve h1 aynı metni okur. +const BASLIK = `Üniversitelerin Taban Puanları ve Sıralamaları ${BASLIK_YILI}`; + export const metadata: Metadata = sayfaMetadata({ - 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.", + title: BASLIK, + description: `Devlet ve vakıf üniversitelerinin ${SON_YIL} yerleştirme taban puanları, başarı sıralamaları ve kontenjanları — üniversite üniversite, ${TERCIH_YILI} tercihleri için.`, path: "/universiteler", }); @@ -26,7 +29,7 @@ export default function UniversitelerPage() { />

- Üniversitelerin Taban Puanları ve Sıralamaları 2026 + {BASLIK}

}> diff --git a/src/features/katalog/components/bolum-listesi.tsx b/src/features/katalog/components/bolum-listesi.tsx index 3a49747..bb6af6f 100644 --- a/src/features/katalog/components/bolum-listesi.tsx +++ b/src/features/katalog/components/bolum-listesi.tsx @@ -4,6 +4,7 @@ import { KATEGORILER } from "@/lib/kategoriler"; import { CtaSiraForm } from "@/features/sihirbaz/components/cta-sira-form"; import { PagePixelDivider } from "@/components/pixel-decor"; import { Skeleton } from "@/components/ui/skeleton"; +import { SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; const sayi = (n: number) => n.toLocaleString("tr-TR"); @@ -81,11 +82,11 @@ export function BolumKatalogu() { return ( <>

- {sayi(hepsi.length)} bölümün 2025 YKS yerleştirme verileri: taban + {sayi(hepsi.length)} bölümün {SON_YIL} 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. + Veriler YÖK Atlas {SON_YIL} yerleştirme sonuçlarına dayanır;{" "} + {TERCIH_YILI} tercihleri için rehber niteliğindedir.

diff --git a/src/features/katalog/components/universite-listesi.tsx b/src/features/katalog/components/universite-listesi.tsx index 1fd4459..13c521f 100644 --- a/src/features/katalog/components/universite-listesi.tsx +++ b/src/features/katalog/components/universite-listesi.tsx @@ -5,6 +5,7 @@ import { CtaSiraForm } from "@/features/sihirbaz/components/cta-sira-form"; import { PagePixelDivider } from "@/components/pixel-decor"; import { UniLogo } from "@/components/uni-logo"; import { Skeleton } from "@/components/ui/skeleton"; +import { SON_YIL, TERCIH_YILI } from "@/lib/veri-yillari"; const sayi = (n: number) => n.toLocaleString("tr-TR"); @@ -49,11 +50,11 @@ export function UniversiteKatalogu() { return ( <>

- {sayi(hepsi.length)} üniversitenin 2025 YKS yerleştirme verileri. + {sayi(hepsi.length)} üniversitenin {SON_YIL} 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. + Atlas {SON_YIL} yerleştirme sonuçlarına dayanır; {TERCIH_YILI} tercihleri + için rehber niteliğindedir.

diff --git a/src/features/katalog/components/veri-kaynagi.tsx b/src/features/katalog/components/veri-kaynagi.tsx index d1485e5..9407c23 100644 --- a/src/features/katalog/components/veri-kaynagi.tsx +++ b/src/features/katalog/components/veri-kaynagi.tsx @@ -1,7 +1,8 @@ import { KATALOG_VERI_TARIHI } from "@/lib/seo"; import { cn } from "@/lib/utils"; +import { SON_YIL } from "@/lib/veri-yillari"; -// Veri tarihinin görünür biçimi ("9 Ağustos 2026") — tek biçim kaynağı; ana +// Veri tarihinin görünür biçimi ("21 Eylül 2026") — tek biçim kaynağı; ana // sayfa hero'sundaki veri satırı da bunu kullanır. export const KATALOG_TARIH_METNI = new Date( `${KATALOG_VERI_TARIHI}T00:00:00Z`, @@ -24,7 +25,7 @@ export function VeriKaynagi({ return (

{children} - Kaynak: YÖK Atlas 2025 yerleştirme sonuçları. Son güncelleme:{" "} + Kaynak: YÖK Atlas {SON_YIL} yerleştirme sonuçları. Son güncelleme:{" "} .

); diff --git a/src/features/pazarlama/components/meraklisina-icerik.tsx b/src/features/pazarlama/components/meraklisina-icerik.tsx index 12815f5..d5c1c9c 100644 --- a/src/features/pazarlama/components/meraklisina-icerik.tsx +++ b/src/features/pazarlama/components/meraklisina-icerik.tsx @@ -47,8 +47,8 @@ export function MeraklisinaIcerik() { öğ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. + sıralaması kayıtlıdır; bir bölüm için en son yılın verisi henüz + oluşmamışsa bir önceki yılınki kullanılır.

diff --git a/src/features/rapor/components/rapor-yazdir.tsx b/src/features/rapor/components/rapor-yazdir.tsx index 20cf054..3618f6c 100644 --- a/src/features/rapor/components/rapor-yazdir.tsx +++ b/src/features/rapor/components/rapor-yazdir.tsx @@ -7,6 +7,7 @@ import { DILIM_ETIKET, RISK_ETIKET, dilimdenRisk } from "@/lib/risk"; import type { RaporParams, RaporSonuc } from "../types/rapor"; import { Skeleton } from "@/components/ui/skeleton"; import { YazdirButonu } from "./yazdir-butonu"; +import { VERI_ARALIGI } from "@/lib/veri-yillari"; // Dilim sütunu: dilim adı + varsayılan riski. Üçüncü dilimde ikisi aynı // kelime ("Güvenli") olduğu için parantez düşer — "Güvenli (Güvenli)" yazmaz. @@ -106,7 +107,7 @@ export async function RaporYazdir() {