import Link from "next/link"; import type { Metadata } from "next"; import { ArrowLeft } from "lucide-react"; import { eq } from "drizzle-orm"; import { PUAN_TURLERI, rankWindowFacets, searchByRank, type PuanTuruKey, } from "@/lib/db"; import { getSession, getCurrentUser } from "@/lib/session"; import { appDb, schema } from "@/lib/appdb"; import type { RaporSonuc } from "@/lib/ai/rapor"; import type { RaporParams } from "@/lib/rapor-havuzu"; import { raporMaskele } from "@/lib/rapor-maske"; import { SihirbazBolumu } from "./sihirbaz-cagri-karti"; import { FunnelBanner } from "./funnel-banner"; 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 { PagePixelDivider } from "@/components/pixel-decor"; export const metadata: Metadata = { title: "Tercih Listeni Kur — KolayTercih", }; const TUR_LABELS: Record = { say: "Sayısal", ea: "Eşit Ağırlık", soz: "Sözel", dil: "Dil", tyt: "TYT (Önlisans)", }; export default async function SonucPage({ searchParams, }: { searchParams: Promise<{ sira?: string; tur?: string; sihirbaz?: string; acildi?: string; hazir?: string; }>; }) { const params = await searchParams; const sira = Number.parseInt(params.sira ?? "", 10); const turKey: PuanTuruKey = params.tur && params.tur in PUAN_TURLERI ? (params.tur as PuanTuruKey) : "say"; if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) { return (

Geçerli bir sıralama gerekli

Listeni kurabilmek için ana sayfadan YKS başarı sıralamanı gir.

); } // Sihirbaz için: kullanıcı durumu, kayıtlı rapor ve dinamik facet'ler const session = await getSession(); const user = session ? await getCurrentUser() : null; const raporSatiri = user ? await appDb.query.reports.findFirst({ where: eq(schema.reports.userId, user.id), }) : null; const facetler = rankWindowFacets(sira, turKey); // AI'sız ham liste: yalnızca sıralamayla ulaşılabilen programlar (dilimli) const hamSonuclar = searchByRank(sira, turKey, { limitPerBucket: 20 }); // Paketsize giden rapor sunucuda maskelenir: blur yalnızca CSS olduğundan // kilitli satırların gerçek içeriği client'a hiç inmez. const hasPaket = Boolean(user?.hasPaket); const mevcutRapor: MevcutRapor | null = raporSatiri?.result ? { rapor: hasPaket ? (raporSatiri.result as RaporSonuc) : raporMaskele(raporSatiri.result as RaporSonuc), params: raporSatiri.params as RaporParams, revisionCount: raporSatiri.revisionCount, } : null; return (
{sira.toLocaleString("tr-TR")}. sıra · {TUR_LABELS[turKey]}

{sira.toLocaleString("tr-TR")}. sıradaki bir aday için tercih planı

Birkaç adımda ilgi alanlarını ve şehir tercihini seç; yapay zekâ gerçek YÖK Atlas verisiyle 24 tercihlik dengeli listeni kursun. Her satır yerleşme riskine göre renklenir:{" "} yeşil güvenli,{" "} sarı az riskli,{" "} kırmızı riskli.

{/* 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 */}

Veriler resmî YÖK Atlas kaynağından derlenmiştir. KolayTercih bir karar destek aracıdır; yerleşme garantisi vermez, tercih sorumluluğu adaya aittir.

); }