fix(metin): olasılık dili + 5 yıl

Ürün yerleşme olasılığı üretmiyor; tek yılın tabanına göre risk dilimi
etiketi veriyor (src/lib/risk.ts). Metinler buna eşitlendi:
- "yerleşme olasılığı ve risk analizi" → "yerleşme riski ve trend analizi"
  (ana sayfa fiyat kutusu + /paket özellik listesi)
- riskNotuUret'in dört "ihtimal" cümlesi yeni riskNotuMetni()'ne taşındı;
  cümleler geçmiş taban verisine bağlanıyor, "yerleşirsin/ihtimalle" yok.
  Risk eşikleri, 5/13/6 şeması ve prompt değişmedi (yalnız cümle)
- "son 4 yıl" → VERI_YIL_SAYISI (= 5; DB sira2021–sira2025) — yeni
  src/lib/veri-kapsami.ts tek kaynağından
- arama funnel kartı: "Yerleşme ihtimalini" → "Yerleşme riskini"

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-21 04:47:47 +03:00
parent 56925e1309
commit 16c450827b
6 changed files with 41 additions and 20 deletions

View File

@@ -30,6 +30,7 @@ import {
SectionEyebrow, SectionEyebrow,
} from "@/components/pixel-decor"; } from "@/components/pixel-decor";
import { MAX_REVIZYON, URUNLER } from "@/lib/credits"; import { MAX_REVIZYON, URUNLER } from "@/lib/credits";
import { VERI_YIL_SAYISI } from "@/lib/veri-kapsami";
import { import {
Accordion, Accordion,
AccordionContent, AccordionContent,
@@ -103,8 +104,7 @@ const steps = [
icon: BarChart3, icon: BarChart3,
step: "2", step: "2",
title: "Yapay zekâ veriyi tarasın", title: "Yapay zekâ veriyi tarasın",
description: description: `Son ${VERI_YIL_SAYISI} yılın YÖK Atlas verisi — taban sıralaması trendleri, kontenjan değişimleri, doluluk oranları — senin için analiz edilsin.`,
"Son 4 yılın YÖK Atlas verisi — taban sıralaması trendleri, kontenjan değişimleri, doluluk oranları — senin için analiz edilsin.",
}, },
{ {
icon: ShieldCheck, icon: ShieldCheck,
@@ -118,8 +118,7 @@ const steps = [
const faqs = [ const faqs = [
{ {
question: "KolayTercih'in önerileri neye dayanıyor?", question: "KolayTercih'in önerileri neye dayanıyor?",
answer: answer: `Tüm öneriler YÖK Atlas'ın resmî verisine dayanır: son ${VERI_YIL_SAYISI} yılın taban başarı sıralamaları, kontenjanlar, yerleşme istatistikleri ve doluluk oranları. Yapay zekâ bu veriyi yorumlar; veri olmadan tahmin yürütmez.`,
"Tüm öneriler YÖK Atlas'ın resmî verisine dayanır: son 4 yılın taban başarı sıralamaları, kontenjanlar, yerleşme istatistikleri ve doluluk oranları. Yapay zekâ bu veriyi yorumlar; veri olmadan tahmin yürütmez.",
}, },
{ {
question: "Ücretsiz tercih robotlarından farkı ne?", question: "Ücretsiz tercih robotlarından farkı ne?",
@@ -145,7 +144,7 @@ const comparison = [
tercihai: true, tercihai: true,
}, },
{ {
feature: "Son 4 yılın trend analizi", feature: `Son ${VERI_YIL_SAYISI} yılın trend analizi`,
robot: false, robot: false,
danisman: true, danisman: true,
tercihai: true, tercihai: true,
@@ -177,7 +176,7 @@ const paketOzellikleri = [
}, },
{ {
icon: ShieldCheck, icon: ShieldCheck,
text: "Her tercih için yerleşme olasılığı ve risk analizi (son 4 yıl)", text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
}, },
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" }, { icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
{ icon: RefreshCcw, text: `${MAX_REVIZYON} liste revizyon hakkı` }, { icon: RefreshCcw, text: `${MAX_REVIZYON} liste revizyon hakkı` },
@@ -362,7 +361,7 @@ export default function Home() {
{[ {[
{ value: "23.000+", label: "Taranan lisans programı" }, { value: "23.000+", label: "Taranan lisans programı" },
{ {
value: "4 yıl", value: `${VERI_YIL_SAYISI} yıl`,
label: "Taban sıralaması trend verisi", label: "Taban sıralaması trend verisi",
}, },
{ value: "%100", label: "Resmî YÖK Atlas kaynağı" }, { value: "%100", label: "Resmî YÖK Atlas kaynağı" },

View File

@@ -35,7 +35,7 @@ const FUNNEL_METINLERI = [
"Sıralaman ne söylüyor? Birlikte bakalım.", "Sıralaman ne söylüyor? Birlikte bakalım.",
"Her satırı senin için hesaplıyoruz.", "Her satırı senin için hesaplıyoruz.",
"Akıllı tercih, içi rahat bir bekleyiş.", "Akıllı tercih, içi rahat bir bekleyiş.",
"Yerleşme ihtimalini görerek seç.", "Yerleşme riskini görerek seç.",
"Sana özel liste birkaç dakikada hazır.", "Sana özel liste birkaç dakikada hazır.",
"İlgi alanların ve şehrin, tek listede.", "İlgi alanların ve şehrin, tek listede.",
"Boş kalan tercih, kaçan fırsattır.", "Boş kalan tercih, kaçan fırsattır.",

View File

@@ -12,6 +12,7 @@ import {
} from "lucide-react"; } from "lucide-react";
import { getCurrentUser } from "@/lib/session"; import { getCurrentUser } from "@/lib/session";
import { URUNLER, DENEME_KREDISI } from "@/lib/credits"; import { URUNLER, DENEME_KREDISI } from "@/lib/credits";
import { VERI_YIL_SAYISI } from "@/lib/veri-kapsami";
import { Button } from "@/components/ui/button"; import { Button } from "@/components/ui/button";
import { Parallax } from "@/components/parallax"; import { Parallax } from "@/components/parallax";
import { Skeleton } from "@/components/ui/skeleton"; import { Skeleton } from "@/components/ui/skeleton";
@@ -28,7 +29,7 @@ const OZELLIKLER = [
}, },
{ {
icon: ShieldCheck, icon: ShieldCheck,
text: "Her tercih için yerleşme olasılığı ve risk analizi (son 4 yıl trend)", text: `Her tercih için yerleşme riski ve trend analizi (son ${VERI_YIL_SAYISI} yıl)`,
}, },
{ icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" }, { icon: FileText, text: "Veliyle paylaşılabilir PDF rapor" },
{ icon: RefreshCcw, text: "2 liste revizyon hakkı" }, { icon: RefreshCcw, text: "2 liste revizyon hakkı" },

View File

@@ -18,7 +18,12 @@ import {
type AdayProgram, type AdayProgram,
} from "../rapor-havuzu"; } from "../rapor-havuzu";
import { secimOzeti } from "@/features/sihirbaz/sihirbaz-sabitler"; import { secimOzeti } from "@/features/sihirbaz/sihirbaz-sabitler";
import { RISK_ETIKET, dilimdenRisk, riskHesapla } from "../risk"; import {
RISK_ETIKET,
dilimdenRisk,
riskHesapla,
riskNotuMetni,
} from "../risk";
// Yapay zekâdan istenen küçük şema (kullanıcı kararı, 6 Ağu 2026): riskNotu // Yapay zekâdan istenen küçük şema (kullanıcı kararı, 6 Ağu 2026): riskNotu
// ve trendOzeti gerçek sıra geçmişinden deterministik üretilir; dilim iskeleti // ve trendOzeti gerçek sıra geçmişinden deterministik üretilir; dilim iskeleti
@@ -161,16 +166,7 @@ function trendOzetiUret(p: AdayProgram): string {
} }
function riskNotuUret(p: AdayProgram, adaySira: number): string { function riskNotuUret(p: AdayProgram, adaySira: number): string {
switch (riskHesapla(p.sira2025 ?? p.sira2024, adaySira)) { return riskNotuMetni(riskHesapla(p.sira2025 ?? p.sira2024, adaySira));
case "guvenli":
return "Taban sıralaması senin sıranın belirgin altında; yüksek ihtimalle yerleşirsin.";
case "az-riskli":
return "Taban sıralaması sırana yakın; orta ihtimalle yerleşilebilir.";
case "riskli":
return "Taban sıralaması senin sıranın üstünde kapandı; yerleşme ihtimali düşük.";
default:
return "Güncel taban sıralaması verisi yok; ihtimal öngörülemez, temkinli yaklaş.";
}
} }
/** Havuz programını render için gereken bilgiye indirger. */ /** Havuz programını render için gereken bilgiye indirger. */

View File

@@ -42,3 +42,22 @@ export function dilimdenRisk(dilim: Dilim | string): RiskSeviyesi {
if (dilim === "dengeli") return "az-riskli"; if (dilim === "dengeli") return "az-riskli";
return "riskli"; return "riskli";
} }
/**
* Risk seviyesinin tek cümlelik açıklaması (rapor satırları + tadımlık).
* Ürün yerleşme olasılığı HESAPLAMAZ; yalnızca son taban sıralamasını adayın
* sırasıyla kıyaslar. Bu yüzden metin olasılık/ihtimal/"yerleşirsin" demez.
* "Geçen yıl" da denmez: efektif sıra 2025 yoksa 2024'e düşüyor.
*/
export function riskNotuMetni(risk: RiskSeviyesi | null): string {
switch (risk) {
case "guvenli":
return "Son taban sıralaması senin sıranın belirgin altında; geçmiş veriye göre güvenli aralıkta.";
case "az-riskli":
return "Son taban sıralaması sırana yakın; küçük bir kayma sonucu değiştirebilir.";
case "riskli":
return "Son taban sıralaması senin sıranın üstünde kapandı; hayal tercihi olarak düşün.";
default:
return "Güncel taban verisi yok; bu satırı temkinli değerlendir.";
}
}

6
src/lib/veri-kapsami.ts Normal file
View File

@@ -0,0 +1,6 @@
/**
* Taban sıralaması geçmişinin kapsadığı yıl sayısı. Veritabanında
* sira2021–sira2025 kolonları var (5 yıl); "son N yıl" diyen tüm metinler bu
* sabitten okur. Yeni veri yılı eklenince (ör. sira2026) burayı güncelle.
*/
export const VERI_YIL_SAYISI = 5;