Refactor UI components for consistency and clarity across the application
All checks were successful
Deploy / deploy (push) Successful in 18m31s

- Updated AGENTS.md with new guidelines for UI consistency, including badge and modal styles.
- Refactored layout.tsx to improve the placement of the progressive blur effect.
- Enhanced NotFound component text for better user guidance.
- Replaced HeroFocusButton with HeroBaslik and KapanisCta in the Home component for improved clarity.
- Added SiteFooter to multiple pages for consistent footer display.
- Removed ListemSekmeleri component and adjusted ListemPage to streamline functionality.
- Updated various components to ensure consistent styling and user experience.
This commit is contained in:
bilalgursen
2026-08-02 04:28:27 +03:00
parent 6bd210075f
commit b4effc8545
48 changed files with 2173 additions and 1529 deletions

View File

@@ -1,6 +1,4 @@
import Link from "next/link";
import type { Metadata } from "next";
import { ArrowLeft } from "lucide-react";
import { eq } from "drizzle-orm";
import {
PUAN_TURLERI,
@@ -14,13 +12,11 @@ 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 { ManuelHarita } from "@/components/manuel-liste/manuel-harita";
import { PagePixelDivider } from "@/components/pixel-decor";
import { SiteFooter } from "@/components/site-footer";
import { SiraGerekli } from "./sira-gerekli";
export const metadata: Metadata = {
title: "Tercih Listeni Kur",
@@ -30,14 +26,6 @@ export const metadata: Metadata = {
robots: { index: false, follow: true },
};
const TUR_LABELS: Record<PuanTuruKey, string> = {
say: "Sayısal",
ea: "Eşit Ağırlık",
soz: "Sözel",
dil: "Dil",
tyt: "TYT (Önlisans)",
};
export default async function SonucPage({
searchParams,
}: {
@@ -58,21 +46,10 @@ export default async function SonucPage({
if (!Number.isFinite(sira) || sira < 1 || sira > 4_000_000) {
return (
<main className="mx-auto flex max-w-2xl flex-col items-center px-4 py-24 text-center">
<h1 className="font-heading text-2xl font-bold">
Geçerli bir sıralama gerekli
</h1>
<p className="mt-3 text-slate-600">
Listeni kurabilmek için ana sayfadan YKS başarı sıralamanı gir.
</p>
<PagePixelDivider seed={59} className="mx-auto mt-6" />
<Button asChild className="mt-6 cursor-pointer">
<Link href="/">
<ArrowLeft className="size-4" aria-hidden />
Ana sayfaya dön
</Link>
</Button>
</main>
<>
<SiraGerekli />
<SiteFooter />
</>
);
}
@@ -108,51 +85,15 @@ export default async function SonucPage({
return (
<div className="min-h-screen bg-slate-50 text-slate-900">
<main className="mx-auto max-w-4xl px-4 py-12">
<div className="flex items-center justify-between gap-3">
<Badge variant="secondary" className="bg-primary/10 text-primary">
{sira.toLocaleString("tr-TR")}. sıra · {TUR_LABELS[turKey]}
</Badge>
<Button
asChild
size="sm"
variant="outline"
className="cursor-pointer rounded-full"
>
<Link href="/">
<ArrowLeft className="size-4" aria-hidden />
Yeni arama
</Link>
</Button>
</div>
<h1 className="mt-4 font-heading text-3xl font-bold sm:text-4xl">
{sira.toLocaleString("tr-TR")}. sıradaki bir aday için tercih planı
</h1>
<p className="mt-2 max-w-2xl text-slate-600">
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:{" "}
<span className="font-semibold text-emerald-600">yeşil güvenli</span>,{" "}
<span className="font-semibold text-amber-600">sarı az riskli</span>,{" "}
<span className="font-semibold text-red-600">kırmızı riskli</span>.
</p>
<PagePixelDivider seed={61} className="mt-7" />
{/* Sayfa hiyerarşisi: önce Türkiye haritası, sonra liste. Manuel
liste store'una abone olduğundan tablodan "+" ile eklenenler
buraya canlı yansır. */}
<div className="mt-8">
<ManuelHarita />
</div>
<ManuelHarita />
{/* AI'dan bağımsız ham tablo — haritanın hemen altında, sayfanın ana
gövdesi; puan türü seçici de listenin başında yaşar */}
gövdesi; puan türü navbar'daki sıralama rozetinden değiştirilir */}
<ProgramTablosu sonuclar={hamSonuclar} adaySira={sira} tur={turKey} />
{/* 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 ? <FunnelBanner hedefListem={Boolean(mevcutRapor)} /> : null}
{/* Sihirbaz akışı (CTA + modal + AI listesi) — blurlu AI paneli
sayfanın en altında yaşar */}
<SihirbazBolumu
@@ -174,6 +115,7 @@ export default async function SonucPage({
aittir.
</p>
</main>
<SiteFooter />
</div>
);
}