import {
ArrowRight,
ArrowUpRight,
Coins,
FileText,
ListChecks,
MessageCircleQuestion,
RefreshCcw,
ShieldCheck,
} from "lucide-react";
import Link from "next/link";
import { Suspense } from "react";
import { AdimAkisi } from "@/features/pazarlama/components/adim-akisi";
import { BolumGecisi } from "@/features/pazarlama/components/bolum-gecisi";
import { ComparisonCell } from "@/features/pazarlama/components/landing-parcalari";
import { HeroBaslik } from "@/features/pazarlama/components/hero-baslik";
import { KapanisCta } from "@/features/pazarlama/components/hero-focus-button";
import { HeroForm } from "@/features/sihirbaz/components/hero-form";
import { Parallax } from "@/components/parallax";
import { Reveal } from "@/features/pazarlama/components/reveal";
import { SayanSayi } from "@/features/pazarlama/components/sayan-sayi";
import { SorunSahnesi } from "@/features/pazarlama/components/sorun-sahneleri";
import { SosyalKanitBandi } from "@/features/pazarlama/components/sosyal-kanit";
import { TurkeyPixelMap } from "@/features/pazarlama/components/turkey-pixel-map";
import { SuzulenHaplar } from "@/features/pazarlama/components/suzulen-haplar";
import { VeriAkisi } from "@/features/pazarlama/components/veri-akisi";
import { katalogHaplari } from "@/features/pazarlama/landing-verisi";
import { SectionEyebrow } from "@/components/pixel-decor";
import { PikselCtaYuzeyi } from "@/components/piksel-cta-yuzeyi";
import { URUNLER } from "@/lib/credits";
import {
PROGRAM_SAYISI_CUMLE,
PROGRAM_SAYISI_METNI,
VERI_YIL_SAYISI,
} from "@/lib/veri-kapsami";
import {
Accordion,
AccordionContent,
AccordionItem,
AccordionTrigger,
} from "@/components/ui/accordion";
import { Button } from "@/components/ui/button";
import {
Table,
TableBody,
TableCell,
TableHead,
TableHeader,
TableRow,
} from "@/components/ui/table";
import type { Metadata } from "next";
import {
JsonLd,
faqPageJsonLd,
softwareApplicationJsonLd,
} from "@/lib/seo";
import { SiteFooter } from "@/components/site-footer";
export const metadata: Metadata = {
alternates: { canonical: "/" },
};
const PAKET_FIYATI = (URUNLER.paket.amountKurus / 100).toLocaleString("tr-TR", {
maximumFractionDigits: 0,
});
const TOPUP_FIYATI = (URUNLER.topup.amountKurus / 100).toLocaleString("tr-TR", {
maximumFractionDigits: 0,
});
// Bölüm ritmi (DESIGN.md §5.1; Bilal, 11 Eki 2026: "section'lar arası es yok,
// her şey çok sıkışık"). Bölümler arasında piksel şeridi durur (§4.38) ve
// çevresinde boşluk ister: şerit üst bölümün içeriğinden uzak, alt bölümün
// rozetine yakındır — bir bölümü bitirip sıradakine iner. Alt boşluk bu yüzden
// üsttekinden bir kademe büyük. Şerit geçiş çizgisinin iki yanına telefonda
// 56, sm'den itibaren 75 px taşar; kalan nefes telefonda 56/40, sm'de 85/53,
// lg'de 101/69 px (üst bölüme/alt bölüme).
const BOLUM_BOSLUGU = "pt-24 pb-28 sm:pt-32 sm:pb-40 lg:pt-36 lg:pb-44";
// Sorun kartlarının piksel sahneleri (DESIGN.md §4.31, §4.38): hero haritasıyla
// aynı ızgara dili. Her biri kartın söylediğini hareketle çizer: binlerce
// programın içinde ısınıp sönen tam 24 seçim; her yıl bir sola kayan, sağdan
// başka boyda gelen çubuklar; basamak basamak tırmanan fiyat. Izgaralar
// `sorun-sahneleri.tsx`te.
const problems = [
{
sahne: "ihtimal",
title: "24 tercih, binlerce ihtimal",
description: `${PROGRAM_SAYISI_CUMLE} lisans ve önlisans programı arasından sana uyan 24 tanesini doğru sırayla dizmek, tablolarla boğuşarak günler alıyor.`,
},
{
sahne: "yillar",
title: "Geçen yılın puanı yetmiyor",
description:
"Taban sıralamaları her yıl kayıyor; tek yıla bakmak riski gizler.",
},
{
sahne: "fiyat",
title: "Danışman lüks haline geldi",
description:
"Armut'ta tercih danışmanlığı ilanları ortalama 1.000–3.000 TL (Eylül 2026). Ücretsiz robotların çoğu ise yalnızca liste filtreliyor; listeyi kurup gerekçesini yazmıyor.",
},
] as const;
const steps = [
{
no: 1,
baslik: "Sıralamanı ve hedeflerini anlat",
aciklama:
"YKS başarı sıralamanı gir; sıralamana uygun ilgi alanı, şehir ve üniversite tercihlerini birkaç adımda işaretle.",
},
{
no: 2,
baslik: `Son ${VERI_YIL_SAYISI} yılın resmî verisi taransın`,
aciklama:
"YÖK Atlas'ın taban sıralaması trendleri, kontenjan değişimleri ve doluluk oranları sıralamana göre elensin; yapay zekâ yalnızca bu havuzdan seçer, dışına çıkamaz.",
},
{
no: 3,
baslik: "Dengeli 24'lük listeni al",
aciklama:
"Hayal, dengeli ve güvenli dilimlerine dağıtılmış, her satırı gerekçeli tercih listeni indir; aklına takılanı listen üzerinden yapay zekâya sor.",
},
] as const;
// "Nasıl çalışır"da akışın yanında duran üç sayı (DESIGN.md §4.28).
const veriSayilari = [
{ value: PROGRAM_SAYISI_METNI, label: "Taranan lisans ve önlisans programı" },
{
value: String(VERI_YIL_SAYISI),
birim: "yıl",
label: "Taban sıralaması trend verisi",
},
{ value: "%100", label: "Resmî YÖK Atlas kaynağı" },
];
const faqs = [
{
question: "KolayTercih'in önerileri neye dayanıyor?",
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.`,
},
{
question: "Ücretsiz tercih robotlarından farkı ne?",
answer:
"Ücretsiz robotların çoğu puan aralığına göre bölüm listeler ve gerisini sana bırakır; bazıları yapay zekâ sohbeti de sunar. KolayTercih listenin kendisini kurar: hangi tercihi kaçıncı sıraya, neden koyduğunu açıklar, riskini geçmiş taban verisinden hesaplar ve sorularını cevaplar. Yapay zekâ yalnızca sıralamanla açılan gerçek programlardan seçer; bu havuzun dışına çıkamaz.",
},
{
question: "Yerleşme garantisi veriyor musunuz?",
answer:
"Hayır — ve verdiğini iddia eden herkesten uzak dur. Taban sıralamaları her yıl adayların davranışına göre değişir; kimse garanti veremez. Biz riski şeffaf gösterir, listeyi hayal/dengeli/güvenli dilimleriyle kurarak boşta kalma riskini satır satır görünür kılarız. Tercih listenin son hali ve ÖSYM başvurusu her zaman senin sorumluluğundadır.",
},
{
question: "KolayTercih ücretsiz mi?",
answer:
"Katalog ücretsiz: bölüm, üniversite ve il sayfalarındaki taban puanları, sıralamalar ve kontenjanlar herkese açık, üye olmadan da bakılır. Sıralamana göre programları görmek de ücretsiz. Ücretli olan tek şey yapay zekâ destekli 24'lük liste, gerekçeleri ve soru hakkı paketi.",
},
{
question: "KolayTercih güvenilir mi, ÖSYM ya da YÖK ile bağlantısı var mı?",
answer:
"KolayTercih bağımsız bir üründür; ÖSYM ya da YÖK ile hiçbir bağlantısı yoktur. Veri kaynağı herkese açık YÖK Atlas yerleştirme sonuçlarıdır ve her katalog sayfasında kaynak ile son güncelleme tarihi yazılır. Yerleşme garantisi vermez, riski satır satır gösterir. Resmî bilgi için tek kaynak ÖSYM kılavuzu ve duyurularıdır.",
},
{
question: "Fiyatlandırma nasıl çalışıyor?",
answer: `Abonelik yok. Tercih dönemi boyunca geçerli tek seferlik ${PAKET_FIYATI} TL'lik paket alırsın: yapay zekâ destekli kişisel 24'lük liste, risk analizi, liste revizyonları ve ${URUNLER.paket.credits} soru hakkı dahil. Soru hakların biterse ${TOPUP_FIYATI} TL'ye +${URUNLER.topup.credits} soru ekleyebilirsin. Temel program arama ise herkes için ücretsiz.`,
},
];
const comparison = [
{
feature: "Sıralamana uygun program listesi",
robot: true,
danisman: true,
tercihai: true,
},
// Rakip hücreleri genelleme yapmaz: bazı ücretsiz robotlar artık yapay zekâ
// sohbeti/dengeli liste de sunuyor, bazı danışmanlar 7/24 yazışıyor. Emin
// olmadığımız yerde ✗ yerine metin ("Bazılarında" vb.) kullanılır.
{
feature: `Son ${VERI_YIL_SAYISI} yılın taban trendi, her tercihte`,
robot: "Bazılarında",
danisman: true,
tercihai: true,
},
{
feature: "Gerekçeli, dengeli 24'lük liste",
robot: "Bazılarında",
danisman: true,
tercihai: true,
},
{
feature: "Her öneri resmî YÖK Atlas kaydına dayanır (uydurma bölüm yok)",
robot: "Sohbet botlarında belirsiz",
danisman: true,
tercihai: true,
},
{
feature: "Nasıl çalıştığı herkese açık yazılı",
robot: "Genelde yok",
danisman: "Danışmana göre",
tercihai: true,
},
{
feature: "7/24 soru-cevap",
robot: "Bazılarında",
danisman: "Danışmana göre",
tercihai: true,
},
{
feature: "Fiyat",
robot: "Ücretsiz",
danisman: "1.000–3.000 TL*",
tercihai: `${PAKET_FIYATI} TL · tek seferlik`,
},
];
const paketOzellikleri = [
{
icon: ListChecks,
text: "Sıralamana özel, gerekçeli 24 tercihlik dengeli liste",
},
{
icon: ShieldCheck,
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: RefreshCcw, text: "Liste revizyonu sayısı sınırsız (sohbetten; her istek 1 sohbet kredisi)" },
{
icon: MessageCircleQuestion,
text: `${URUNLER.paket.credits} yapay zekâ danışman sorusu`,
},
] as const;
export default function Home() {
// Katalog hapları gerçek veriden (landing-verisi.ts); veri okunamazsa
// bölüm çizilmez.
const haplar = katalogHaplari();
return (
{/* Hero */}
{/* Arka katman: harita scroll'un gerisinde kalır, derinlik verir */}
{/* Harita orta ekranlarda nefes payı bırakır, ekranla birlikte
ölçeklenir ve çok geniş ekranda 1665px tavanına oturur;
telefonda ekranın 1,7 katı (kenarlardan taşar, kırpılır). */}
{/* Hero → Problem geçişi: border ya da ayraç yerine piksel şeridi.
Haritanın serpintisinden başlar, kaydırdıkça turuncuya ısınarak
bölümden bölüme iner (DESIGN.md §4.38). */}
{/* Problem */}
{/* Başlık gövdeden hafif hızlı akar — katman derinliği */}
Sorun
Tercih dönemi neden bu kadar stresli?
Her yıl iki milyondan fazla aday aynı üç duvara çarpıyor.
{/* Sahne kartı (DESIGN.md §4.31): üstte hero'nun piksel diliyle
kartın söylediğini çizen sahne, altında başlık ve metin.
Sahneler sırayla oynar; karta gelince o sahne hemen oynar
(`data-sahne-karti`, sorun-sahneleri.tsx). */}
{problems.map((p, i) => (
{p.title}
{p.description}
))}
{/* Problem → Nasıl çalışır geçişi */}
{/* How it works */}
Nasıl çalışır?
{/* Kuralların şeffaf anlatımına köprü: /meraklisina */}
Meraklısına
Üç adımda listen hazır
Sıralamandan dengeli 24'lük listeye giden yol üç adım
sürer.
{/* Adımlar kartsız (DESIGN.md §4.32): numara hero'nun piksel
diliyle iri rakam; her rakam sırayla adımının biçimine dönüşüp
geri toplanır, md'den itibaren aradaki düz çizgi dolar. */}
{/* Veri akışı + veriye dayalı güven + dürüstlük notu (DESIGN.md
§4.28). Üçü de kartsız, sayfa zemininde açıkta durur: geniş
ekranda solda dürüstlük notu (sola yaslı), ortada animasyon,
sağda (YÖK Atlas girdilerinin yanında) üç sayı (sağa yaslı).
lg altında hepsi ortalı; sıra: animasyon → sayılar → not. */}
{veriSayilari.map((stat) => (
// Sayı kahramandır (DESIGN.md §1.1): iri sayı üstte, etiket
// altında; dt anlam için DOM'da önce, görsel sıra order ile.
{stat.label}
{stat.birim ? (
{stat.birim}
) : null}
))}
Dürüstlük notu
Yerleşme garantisi vermiyoruz —{" "}
çünkü kimse veremez.
Taban sıralamaları her yıl değişir. Biz sonuç vaadi satmak
yerine riski satır satır gösterir, daha güvenli bir liste
kurmana yardımcı oluruz.
{/* Nasıl çalışır → Karşılaştırma geçişi */}
{/* Comparison */}
Karşılaştır
Robot mu, danışman mı, KolayTercih mi?
Kim ne yapıyor, neyle, kaça — yan yana bak.
{/* Tablo yatay kaydırmaz (DESIGN.md §5.1): lg altında her özellik
kendi satırında, üç cevap altında üç sütun; sütun adları
üstte yapışık durur (site başlığının hemen altında: telefonda 96 px,
sm'den itibaren 128 px — ölçüldü).
lg'de klasik dört sütunlu tablo. */}
Robotlar ve botlarİnsan danışman
KolayTercih
{comparison.map((row, i) => (
{row.feature}
Robotlar ve botlar
İnsan danışman
KolayTercih
))}
Özellik
Robotlar ve sohbet botları
İnsan danışman
KolayTercih
{comparison.map((row, i) => (
{row.feature}
))}
* Danışman fiyat aralığı: Armut ortalama fiyatı, Eylül 2026.
{/* Karşılaştırma → Fiyat geçişi */}
{/* Fiyat */}
Tek seferlik · Abonelik yok
Ne kadar? Ne dahil?
İnsan danışmanın 1.000–3.000 TL aldığı işi tek seferlik{" "}
{PAKET_FIYATI} TL'ye alırsın. Abonelik yok, gizli ücret
yok.
Danışman fiyat aralığı: Armut ortalama fiyatı, Eylül 2026.
{URUNLER.paket.label}
{PAKET_FIYATI} TL
{paketOzellikleri.map((o) => (
{o.text}
))}
{/* Boşluk sarmalayıcıda: sosyal kanıt eşik altında kalıp hiç
çizilmediğinde buton yine listeden mt-8 uzakta durur. */}
{/* Karar butonun başında veriliyor; kanıt da orada dursun.
İstek anında okunuyor, o yüzden Suspense içinde. */}
Temel program arama herkes için ücretsiz · iyzico güvenli
ödeme
Kredi bitti mi?
+{URUNLER.topup.credits} soru hakkı, {TOPUP_FIYATI} TL. Pakete
ek olarak, istediğin zaman.
{/* Final CTA — tam genişlik bant yerine yüzen, köşeleri yumuşak panel */}
{/* Kapanış yüzeyi (DESIGN.md §10.8): koyu kart + 24'lük
listenin interaktif kreatifi. Bilal'in kararı (24 Eyl 2026):
bu yüzey yalnız burada; diğer CTA'lar mavi CtaBandi. */}