Kritik (K1-K6) sonrası kalan tüm maddeler: - Değer önce: girişsiz kullanıcı sihirbaz bitince /giris yerine /sonuc'taki ücretsiz tabloya gider (?hazir=1); AI CTA'sı "5 deneme kredinle listeni kur — giriş yap" paneli + sabit alt karttan verilir, girişte otomatik üretim - Ö1-Ö10: paywall kopyası, aranabilir il seçimi, "Seçtiklerim" adlandırması, gizlilik/koşullar/iletişim sayfaları, danışman özeti + uyarılar, revizyon kutusu, dilim özeti + tek şehir uyarısı, eksik veri rozetleri, magic link yeniden gönder, mobil sohbet kısayolu - G1-G5: binlik ayraçlı input + inline hata, adım göstergesi, route-level loading/error/not-found, dürüst konumlandırma kartı, dürüst buton etiketleri - Seçtiklerim butonu liste boşken gizli; ilk eklemede belirir - Dev süperadmin paneli (yalnızca development): hızlı giriş, kredi/paket/rapor senaryoları, sahte ödeme dönüşü Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { Outfit, Work_Sans, Geist_Mono } from "next/font/google";
|
||
import { Toaster } from "@/components/ui/sonner";
|
||
import { SiteHeader } from "@/components/site-header";
|
||
import { ListeCekmecesi } from "@/components/manuel-liste/liste-cekmecesi";
|
||
import { HeaderGate } from "@/components/header-gate";
|
||
import { ProgressiveBlur } from "@/components/ui/skiper-ui/skiper41";
|
||
import { DevPanel } from "@/components/dev/dev-panel";
|
||
import "./globals.css";
|
||
|
||
const outfit = Outfit({
|
||
variable: "--font-outfit",
|
||
subsets: ["latin", "latin-ext"],
|
||
});
|
||
|
||
const workSans = Work_Sans({
|
||
variable: "--font-work-sans",
|
||
subsets: ["latin", "latin-ext"],
|
||
});
|
||
|
||
const geistMono = Geist_Mono({
|
||
variable: "--font-geist-mono",
|
||
subsets: ["latin"],
|
||
});
|
||
|
||
export const metadata: Metadata = {
|
||
title: "KolayTercih — Tercih Danışmanı",
|
||
description:
|
||
"YKS sıralamana göre gerçek YÖK Atlas verisiyle dengeli 24 tercihlik liste. İnsan danışmanın onda bir fiyatına, yapay zekâ destekli tercih danışmanlığı.",
|
||
};
|
||
|
||
export default function RootLayout({
|
||
children,
|
||
}: Readonly<{
|
||
children: React.ReactNode;
|
||
}>) {
|
||
return (
|
||
<html
|
||
lang="tr"
|
||
className={`${outfit.variable} ${workSans.variable} ${geistMono.variable} h-full antialiased`}
|
||
>
|
||
<body className="min-h-full flex flex-col bg-slate-50">
|
||
{/* Site geneli progressive blur — üst ve alt */}
|
||
<div className="pointer-events-none fixed inset-x-0 top-0 z-40 h-28">
|
||
<ProgressiveBlur
|
||
position="top"
|
||
backgroundColor="#f8fafc"
|
||
height="112px"
|
||
blurAmount="6px"
|
||
/>
|
||
</div>
|
||
<div className="pointer-events-none fixed inset-x-0 bottom-0 z-40 h-28">
|
||
<ProgressiveBlur
|
||
position="bottom"
|
||
backgroundColor="#f8fafc"
|
||
height="112px"
|
||
blurAmount="6px"
|
||
/>
|
||
</div>
|
||
<HeaderGate>
|
||
<SiteHeader />
|
||
</HeaderGate>
|
||
{children}
|
||
{/* Manuel 24'lük liste çekmecesi + "+" uçuş katmanı (navbar'dan açılır) */}
|
||
<ListeCekmecesi />
|
||
<Toaster position="top-center" />
|
||
{/* Dev süperadmin paneli — prod build'de hiç render edilmez */}
|
||
{process.env.NODE_ENV !== "production" ? <DevPanel /> : null}
|
||
</body>
|
||
</html>
|
||
);
|
||
}
|