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:
@@ -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ğı" },
|
||||||
|
|||||||
@@ -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.",
|
||||||
|
|||||||
@@ -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ı" },
|
||||||
|
|||||||
@@ -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. */
|
||||||
|
|||||||
@@ -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
6
src/lib/veri-kapsami.ts
Normal 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;
|
||||||
Reference in New Issue
Block a user