feat: kimlik doğrulama, ödeme, kredi ve AI rapor sihirbazı ekle

- better-auth ile giriş/oturum yönetimi (src/lib/auth, giris sayfası)
- iyzico ödeme entegrasyonu ve paket satın alma akışı
- kredi sistemi ve uygulama veritabanı şeması (drizzle)
- AI destekli rapor üretimi ve tercih sihirbazı
- rapor yazdırma sayfası ve site header/kullanıcı menüsü

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
bilalgursen
2026-07-22 02:13:39 +03:00
parent 7c3f17b9b5
commit cee6200237
64 changed files with 7966 additions and 89 deletions

View File

@@ -5,7 +5,6 @@ import {
ListChecks,
MessageCircleQuestion,
ShieldCheck,
Sparkles,
TrendingUp,
Wallet,
X,
@@ -61,7 +60,7 @@ const steps = [
step: "1",
title: "Sıralamanı ve hedeflerini anlat",
description:
"YKS başarı sıralamanı gir; şehir, bölüm ve kariyer tercihlerini sohbet ederek netleştirelim.",
"YKS başarı sıralamanı gir; sıralamana uygun ilgi alanı, şehir ve üniversite tercihlerini birkaç adımda işaretle.",
},
{
icon: BarChart3,
@@ -75,20 +74,20 @@ const steps = [
step: "3",
title: "Dengeli 24'lük listeni al",
description:
"Hayal, dengeli ve garanti dilimlerine dağıtılmış, her satırı gerekçeli tercih listeni indir; aklına takılanı danışmanına sor.",
"Hayal, dengeli ve garanti dilimlerine dağıtılmış, her satırı gerekçeli tercih listeni indir; aklına takılanı listen üzerinden yapay zekâya sor.",
},
];
const faqs = [
{
question: "TercihAI'nin önerileri neye dayanıyor?",
question: "KolayTercih'in önerileri neye dayanıyor?",
answer:
"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?",
answer:
"Ücretsiz robotlar puan aralığına göre bölüm listeler ve gerisini sana bırakır. TercihAI ise listenin kendisini kurar: hangi tercihi kaçıncı sıraya, neden koyduğunu açıklar, riskini söyler ve sorularını cevaplar. Yani filtre değil, danışmandır.",
"Ücretsiz robotlar puan aralığına göre bölüm listeler ve gerisini sana bırakır. KolayTercih ise listenin kendisini kurar: hangi tercihi kaçıncı sıraya, neden koyduğunu açıklar, riskini söyler ve sorularını cevaplar. Yani filtre değil, danışmandır.",
},
{
question: "Yerleşme garantisi veriyor musunuz?",
@@ -98,7 +97,7 @@ const faqs = [
{
question: "Fiyatlandırma nasıl çalışıyor?",
answer:
"Abonelik yok. Tercih dönemi boyunca geçerli tek seferlik paket alırsın: yapay zekâ danışman sohbeti, kişisel 24'lük liste, risk analizi ve liste revizyonları dahil. Temel program arama ise herkes için ücretsiz.",
"Abonelik yok. Tercih dönemi boyunca geçerli tek seferlik paket alırsın: yapay zekâ destekli kişisel 24'lük liste, risk analizi, liste revizyonları ve listen hakkında soru hakkı dahil. Temel program arama ise herkes için ücretsiz.",
},
];
@@ -149,30 +148,6 @@ function ComparisonCell({ value }: { value: boolean | string }) {
export default function Home() {
return (
<div className="flex min-h-screen flex-col bg-slate-50 text-slate-900">
{/* Navbar */}
<header className="sticky top-4 z-50 mx-4">
<div className="mx-auto flex h-14 max-w-6xl items-center justify-between rounded-2xl border border-slate-200 bg-white/80 px-5 shadow-sm backdrop-blur">
<a href="#" className="flex items-center gap-2 font-heading text-lg font-bold">
<Sparkles className="size-5 text-primary" aria-hidden />
TercihAI
</a>
<nav className="hidden items-center gap-6 text-sm font-medium text-slate-600 sm:flex">
<a href="#nasil-calisir" className="transition-colors duration-200 hover:text-slate-900">
Nasıl çalışır?
</a>
<a href="#karsilastirma" className="transition-colors duration-200 hover:text-slate-900">
Karşılaştır
</a>
<a href="#sss" className="transition-colors duration-200 hover:text-slate-900">
SSS
</a>
</nav>
<Button asChild size="sm" className="cursor-pointer">
<a href="#hero-form">Hemen başla</a>
</Button>
</div>
</header>
<main className="flex-1">
{/* Hero */}
<section className="mx-auto flex max-w-6xl flex-col items-center px-4 pb-20 pt-16 text-center sm:pt-24">
@@ -184,7 +159,7 @@ export default function Home() {
<span className="text-primary">48 saatlik panikle</span> seçme
</h1>
<p className="mt-6 max-w-2xl text-lg leading-relaxed text-slate-600">
TercihAI, gerçek YÖK Atlas verisiyle çalışan yapay zekâ tercih
KolayTercih, gerçek YÖK Atlas verisiyle çalışan yapay zekâ tercih
danışmanın. İnsan danışmanın binlerce lira aldığı işi dengeli
liste, risk analizi, soru-cevap onda bir fiyatına yapar.
</p>
@@ -276,7 +251,7 @@ export default function Home() {
>
<div className="mx-auto max-w-4xl px-4">
<h2 className="text-center font-heading text-3xl font-bold sm:text-4xl">
Robot mu, danışman mı, TercihAI mı?
Robot mu, danışman mı, KolayTercih mi?
</h2>
<div className="mt-12 overflow-x-auto rounded-2xl border border-slate-200 bg-white">
<Table>
@@ -290,7 +265,7 @@ export default function Home() {
İnsan danışman
</TableHead>
<TableHead className="text-center font-heading font-bold text-primary">
TercihAI
KolayTercih
</TableHead>
</TableRow>
</TableHeader>
@@ -363,11 +338,11 @@ export default function Home() {
<footer className="border-t border-slate-200 bg-white py-10">
<div className="mx-auto max-w-6xl px-4 text-center text-sm leading-relaxed text-slate-500">
<p>
© 2026 TercihAI. Veriler resmî YÖK Atlas kaynağından derlenir;
TercihAI, ÖSYM veya YÖK ile bağlantılı değildir.
© 2026 KolayTercih. Veriler resmî YÖK Atlas kaynağından derlenir;
KolayTercih, ÖSYM veya YÖK ile bağlantılı değildir.
</p>
<p className="mt-2">
TercihAI bir karar destek aracıdır, yerleşme garantisi vermez.
KolayTercih bir karar destek aracıdır, yerleşme garantisi vermez.
Tercih listenizin son hali ve başvuru sorumluluğu size aittir.
</p>
</div>