Refactor page components to include PagePixelDivider for improved visual separation across multiple pages. Updated layout in Home, Giris, Gizlilik, Iletisim, Kosullar, Listem, Odeme Sonuc, Paket, and Sonuc pages to enhance user experience and maintain consistency.
All checks were successful
Deploy / deploy (push) Successful in 2m47s
All checks were successful
Deploy / deploy (push) Successful in 2m47s
This commit is contained in:
@@ -27,7 +27,7 @@ export default async function GirisPage({
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex min-h-screen flex-col bg-slate-50 text-slate-900">
|
<div className="flex min-h-screen flex-col bg-slate-50 text-slate-900">
|
||||||
<main className="mx-auto flex w-full max-w-md flex-1 flex-col items-stretch justify-center px-4 py-16">
|
<main className="mx-auto flex w-full max-w-md flex-1 flex-col items-stretch justify-center px-5 py-16 sm:px-4">
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className="relative rounded-2xl border border-slate-200 bg-white p-8 shadow-sm">
|
<div className="relative rounded-2xl border border-slate-200 bg-white p-8 shadow-sm">
|
||||||
<GirisBaslik funnel={funnel} />
|
<GirisBaslik funnel={funnel} />
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Parallax } from "@/components/parallax";
|
import { Parallax } from "@/components/parallax";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Gizlilik ve KVKK — KolayTercih",
|
title: "Gizlilik ve KVKK — KolayTercih",
|
||||||
@@ -19,6 +20,8 @@ export default function GizlilikPage() {
|
|||||||
</p>
|
</p>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
|
|
||||||
|
<PagePixelDivider seed={43} className="mt-6" />
|
||||||
|
|
||||||
<Parallax
|
<Parallax
|
||||||
fromStart
|
fromStart
|
||||||
strength={4}
|
strength={4}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import { Mail } from "lucide-react";
|
import { Mail } from "lucide-react";
|
||||||
import { Parallax } from "@/components/parallax";
|
import { Parallax } from "@/components/parallax";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "İletişim — KolayTercih",
|
title: "İletişim — KolayTercih",
|
||||||
@@ -12,6 +13,7 @@ export default function IletisimPage() {
|
|||||||
<Parallax fromStart strength={10}>
|
<Parallax fromStart strength={10}>
|
||||||
<h1 className="font-heading text-3xl font-bold">İletişim</h1>
|
<h1 className="font-heading text-3xl font-bold">İletişim</h1>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
|
<PagePixelDivider seed={47} className="mt-6" />
|
||||||
<p className="mt-4 text-sm leading-7 text-slate-700">
|
<p className="mt-4 text-sm leading-7 text-slate-700">
|
||||||
Ödeme, iade, hesap silme ya da başka bir konuda yardıma mı ihtiyacın
|
Ödeme, iade, hesap silme ya da başka bir konuda yardıma mı ihtiyacın
|
||||||
var? Tercih döneminde mesajlara aynı gün dönmeye çalışıyoruz.
|
var? Tercih döneminde mesajlara aynı gün dönmeye çalışıyoruz.
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
import { Parallax } from "@/components/parallax";
|
import { Parallax } from "@/components/parallax";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Kullanım ve Satış Koşulları — KolayTercih",
|
title: "Kullanım ve Satış Koşulları — KolayTercih",
|
||||||
@@ -19,6 +20,8 @@ export default function KosullarPage() {
|
|||||||
</p>
|
</p>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
|
|
||||||
|
<PagePixelDivider seed={41} className="mt-6" />
|
||||||
|
|
||||||
<Parallax
|
<Parallax
|
||||||
fromStart
|
fromStart
|
||||||
strength={4}
|
strength={4}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import { Button } from "@/components/ui/button";
|
|||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { RaporListesi } from "@/components/rapor-listesi";
|
import { RaporListesi } from "@/components/rapor-listesi";
|
||||||
import { ViewportPortal } from "@/components/viewport-portal";
|
import { ViewportPortal } from "@/components/viewport-portal";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
import { raporMaskele, ACIK_SATIR } from "@/lib/rapor-maske";
|
import { raporMaskele, ACIK_SATIR } from "@/lib/rapor-maske";
|
||||||
import { SohbetClient } from "./sohbet-client";
|
import { SohbetClient } from "./sohbet-client";
|
||||||
import { RevizyonKutusu } from "./revizyon-kutusu";
|
import { RevizyonKutusu } from "./revizyon-kutusu";
|
||||||
@@ -66,6 +67,7 @@ export default async function ListemPage({
|
|||||||
Sıralamanı girip birkaç adımda 24 tercihlik risk analizli listeni kur;
|
Sıralamanı girip birkaç adımda 24 tercihlik risk analizli listeni kur;
|
||||||
sonra burada görüntüleyip AI danışmanla üzerinde konuşabilirsin.
|
sonra burada görüntüleyip AI danışmanla üzerinde konuşabilirsin.
|
||||||
</p>
|
</p>
|
||||||
|
<PagePixelDivider seed={67} className="mx-auto mt-6" />
|
||||||
<Button
|
<Button
|
||||||
asChild
|
asChild
|
||||||
size="lg"
|
size="lg"
|
||||||
@@ -148,6 +150,7 @@ export default async function ListemPage({
|
|||||||
</div>
|
</div>
|
||||||
) : null}
|
) : null}
|
||||||
</div>
|
</div>
|
||||||
|
<PagePixelDivider seed={71} className="mt-6" />
|
||||||
|
|
||||||
{/* AI'ın genel değerlendirmesi ve uyarıları: paketliye tam,
|
{/* AI'ın genel değerlendirmesi ve uyarıları: paketliye tam,
|
||||||
paketsize sunucuda kırpılmış önizleme + kilit notu */}
|
paketsize sunucuda kırpılmış önizleme + kilit notu */}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import { verifySession } from "@/lib/session";
|
|||||||
import { appDb, schema } from "@/lib/appdb";
|
import { appDb, schema } from "@/lib/appdb";
|
||||||
import { odemeyiSonuclandir } from "@/lib/odeme";
|
import { odemeyiSonuclandir } from "@/lib/odeme";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Ödeme Sonucu — KolayTercih",
|
title: "Ödeme Sonucu — KolayTercih",
|
||||||
@@ -69,6 +70,7 @@ export default async function OdemeSonucPage({
|
|||||||
? " ve Tercih Dönemi Paketi'n aktif — kişisel listen, risk raporun ve PDF çıktın hazır olduğunda burada."
|
? " ve Tercih Dönemi Paketi'n aktif — kişisel listen, risk raporun ve PDF çıktın hazır olduğunda burada."
|
||||||
: "."}
|
: "."}
|
||||||
</p>
|
</p>
|
||||||
|
<PagePixelDivider seed={79} className="mx-auto mt-5" />
|
||||||
<div className="mt-6 flex flex-col gap-2">
|
<div className="mt-6 flex flex-col gap-2">
|
||||||
<Button
|
<Button
|
||||||
asChild
|
asChild
|
||||||
@@ -108,6 +110,7 @@ export default async function OdemeSonucPage({
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</p>
|
</p>
|
||||||
|
<PagePixelDivider seed={83} className="mx-auto mt-5" />
|
||||||
<Button asChild variant="outline" className="mt-6 h-11 cursor-pointer">
|
<Button asChild variant="outline" className="mt-6 h-11 cursor-pointer">
|
||||||
<Link href="/paket">Tekrar dene</Link>
|
<Link href="/paket">Tekrar dene</Link>
|
||||||
</Button>
|
</Button>
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ export default function Home() {
|
|||||||
>
|
>
|
||||||
2026 YKS tercih dönemi açık
|
2026 YKS tercih dönemi açık
|
||||||
</Badge>
|
</Badge>
|
||||||
<h1 className="max-w-3xl font-heading text-7xl font-bold tracking-[0.015em] sm:text-6xl">
|
<h1 className="max-w-3xl font-heading text-5xl font-bold tracking-[0.015em] sm:text-6xl">
|
||||||
Dört yıllık geleceğini <br className="hidden sm:block" />
|
Dört yıllık geleceğini <br className="hidden sm:block" />
|
||||||
<span className="font-bricolage italic tracking-tighter font-bold text-primary">
|
<span className="font-bricolage italic tracking-tighter font-bold text-primary">
|
||||||
48 saatlik panikle
|
48 saatlik panikle
|
||||||
@@ -221,8 +221,8 @@ export default function Home() {
|
|||||||
<HeroForm />
|
<HeroForm />
|
||||||
</div>
|
</div>
|
||||||
<p className="mt-4 text-sm text-slate-500">
|
<p className="mt-4 text-sm text-slate-500">
|
||||||
Temel arama her zaman ücretsiz · Kredi kartı gerekmez · Tam
|
Temel arama her zaman ücretsiz · Kredi kartı gerekmez · Tam analiz
|
||||||
analiz paketi tek seferlik {PAKET_FIYATI} TL
|
paketi tek seferlik {PAKET_FIYATI} TL
|
||||||
</p>
|
</p>
|
||||||
<div className="mt-3 inline-flex items-center gap-2.5 rounded-lg border border-slate-200 bg-white px-3 py-2 text-left text-xs text-slate-700 shadow-xs">
|
<div className="mt-3 inline-flex items-center gap-2.5 rounded-lg border border-slate-200 bg-white px-3 py-2 text-left text-xs text-slate-700 shadow-xs">
|
||||||
<Image
|
<Image
|
||||||
@@ -265,10 +265,7 @@ export default function Home() {
|
|||||||
</p>
|
</p>
|
||||||
</Reveal>
|
</Reveal>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
<Parallax
|
<Parallax strength={7} className="mt-12 grid gap-6 md:grid-cols-3">
|
||||||
strength={7}
|
|
||||||
className="mt-12 grid gap-6 md:grid-cols-3"
|
|
||||||
>
|
|
||||||
{problems.map((p, i) => (
|
{problems.map((p, i) => (
|
||||||
<Reveal key={p.title} delay={i * 0.08}>
|
<Reveal key={p.title} delay={i * 0.08}>
|
||||||
<Card className="relative h-full overflow-hidden border-slate-200/70 shadow-sm transition-all duration-300 hover:-translate-y-1 hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5">
|
<Card className="relative h-full overflow-hidden border-slate-200/70 shadow-sm transition-all duration-300 hover:-translate-y-1 hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5">
|
||||||
@@ -313,10 +310,7 @@ export default function Home() {
|
|||||||
</p>
|
</p>
|
||||||
</Reveal>
|
</Reveal>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
<Parallax
|
<Parallax strength={7} className="mt-12 grid gap-6 md:grid-cols-3">
|
||||||
strength={7}
|
|
||||||
className="mt-12 grid gap-6 md:grid-cols-3"
|
|
||||||
>
|
|
||||||
{steps.map((s, i) => (
|
{steps.map((s, i) => (
|
||||||
<Reveal key={s.step} delay={i * 0.08} className="h-full">
|
<Reveal key={s.step} delay={i * 0.08} className="h-full">
|
||||||
<div className="relative h-full rounded-2xl border border-slate-200/70 bg-white p-8 shadow-sm transition-all duration-300 hover:-translate-y-1 hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5">
|
<div className="relative h-full rounded-2xl border border-slate-200/70 bg-white p-8 shadow-sm transition-all duration-300 hover:-translate-y-1 hover:border-primary/30 hover:shadow-lg hover:shadow-primary/5">
|
||||||
@@ -337,10 +331,7 @@ export default function Home() {
|
|||||||
</Parallax>
|
</Parallax>
|
||||||
|
|
||||||
{/* Veriye dayalı güven + garanti vaadine karşı dürüst konumlandırma */}
|
{/* Veriye dayalı güven + garanti vaadine karşı dürüst konumlandırma */}
|
||||||
<Parallax
|
<Parallax strength={10} className="mx-auto mt-12 w-full max-w-3xl">
|
||||||
strength={10}
|
|
||||||
className="mx-auto mt-12 w-full max-w-3xl"
|
|
||||||
>
|
|
||||||
<Reveal
|
<Reveal
|
||||||
delay={0.1}
|
delay={0.1}
|
||||||
className="overflow-hidden rounded-2xl border border-slate-200/70 bg-white shadow-sm"
|
className="overflow-hidden rounded-2xl border border-slate-200/70 bg-white shadow-sm"
|
||||||
@@ -375,9 +366,9 @@ export default function Home() {
|
|||||||
Yerleşme garantisi vermiyoruz — çünkü kimse veremez.
|
Yerleşme garantisi vermiyoruz — çünkü kimse veremez.
|
||||||
</p>
|
</p>
|
||||||
<p className="mt-1.5 text-sm leading-6 text-slate-600">
|
<p className="mt-1.5 text-sm leading-6 text-slate-600">
|
||||||
Taban sıralamaları her yıl değişir. Biz sonuç vaadi
|
Taban sıralamaları her yıl değişir. Biz sonuç vaadi satmak
|
||||||
satmak yerine riski satır satır gösterir, daha güvenli
|
yerine riski satır satır gösterir, daha güvenli bir liste
|
||||||
bir liste kurmana yardımcı oluruz.
|
kurmana yardımcı oluruz.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import { URUNLER, DENEME_KREDISI } from "@/lib/credits";
|
|||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { Parallax } from "@/components/parallax";
|
import { Parallax } from "@/components/parallax";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
import { SatinAlForm } from "./satin-al-form";
|
import { SatinAlForm } from "./satin-al-form";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
@@ -78,6 +79,8 @@ export default async function PaketPage({
|
|||||||
</p>
|
</p>
|
||||||
</Parallax>
|
</Parallax>
|
||||||
|
|
||||||
|
<PagePixelDivider seed={53} className="mx-auto mt-7" />
|
||||||
|
|
||||||
<Parallax
|
<Parallax
|
||||||
strength={6}
|
strength={6}
|
||||||
className="mt-10 grid gap-6 sm:grid-cols-[1fr_auto]"
|
className="mt-10 grid gap-6 sm:grid-cols-[1fr_auto]"
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import type { MevcutRapor } from "./liste-paneli";
|
|||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { ProgramTablosu } from "@/components/program-tablosu";
|
import { ProgramTablosu } from "@/components/program-tablosu";
|
||||||
|
import { PagePixelDivider } from "@/components/pixel-decor";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "Tercih Listeni Kur — KolayTercih",
|
title: "Tercih Listeni Kur — KolayTercih",
|
||||||
@@ -59,6 +60,7 @@ export default async function SonucPage({
|
|||||||
<p className="mt-3 text-slate-600">
|
<p className="mt-3 text-slate-600">
|
||||||
Listeni kurabilmek için ana sayfadan YKS başarı sıralamanı gir.
|
Listeni kurabilmek için ana sayfadan YKS başarı sıralamanı gir.
|
||||||
</p>
|
</p>
|
||||||
|
<PagePixelDivider seed={59} className="mx-auto mt-6" />
|
||||||
<Button asChild className="mt-6 cursor-pointer">
|
<Button asChild className="mt-6 cursor-pointer">
|
||||||
<Link href="/">
|
<Link href="/">
|
||||||
<ArrowLeft className="size-4" aria-hidden />
|
<ArrowLeft className="size-4" aria-hidden />
|
||||||
@@ -124,6 +126,7 @@ export default async function SonucPage({
|
|||||||
<span className="font-semibold text-amber-600">sarı az riskli</span>,{" "}
|
<span className="font-semibold text-amber-600">sarı az riskli</span>,{" "}
|
||||||
<span className="font-semibold text-red-600">kırmızı riskli</span>.
|
<span className="font-semibold text-red-600">kırmızı riskli</span>.
|
||||||
</p>
|
</p>
|
||||||
|
<PagePixelDivider seed={61} className="mt-7" />
|
||||||
|
|
||||||
{/* Satın alım funnel'ı: değişen cümlelerle adayı sihirbaza (rapor
|
{/* Satın alım funnel'ı: değişen cümlelerle adayı sihirbaza (rapor
|
||||||
varsa /listem paywall'ına) iten banner — paketli kullanıcıya
|
varsa /listem paywall'ına) iten banner — paketli kullanıcıya
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ export function SihirbazBolumu({
|
|||||||
</Button>
|
</Button>
|
||||||
</section>
|
</section>
|
||||||
) : girisBekliyor ? (
|
) : girisBekliyor ? (
|
||||||
<section className="mt-16 rounded-2xl bg-primary p-8 text-center text-white sm:p-12">
|
<section className="mt-16 min-w-0 rounded-2xl bg-primary px-5 py-8 text-center text-white sm:p-12">
|
||||||
<h2 className="font-heading text-2xl font-bold sm:text-3xl">
|
<h2 className="font-heading text-2xl font-bold sm:text-3xl">
|
||||||
Seçimlerin hazır — AI listen bir adım uzakta
|
Seçimlerin hazır — AI listen bir adım uzakta
|
||||||
</h2>
|
</h2>
|
||||||
@@ -411,7 +411,7 @@ export function SihirbazBolumu({
|
|||||||
<Button
|
<Button
|
||||||
asChild
|
asChild
|
||||||
size="lg"
|
size="lg"
|
||||||
className="mt-6 h-12 cursor-pointer bg-orange-500 px-8 text-white transition-colors duration-200 hover:bg-orange-600"
|
className="mt-6 h-auto min-h-12 w-full cursor-pointer whitespace-normal bg-orange-500 px-4 py-3 text-white transition-colors duration-200 hover:bg-orange-600 sm:w-auto sm:px-8"
|
||||||
>
|
>
|
||||||
<Link href={girisUrl}>
|
<Link href={girisUrl}>
|
||||||
<Sparkles className="size-4" aria-hidden />5 deneme kredinle
|
<Sparkles className="size-4" aria-hidden />5 deneme kredinle
|
||||||
@@ -423,7 +423,7 @@ export function SihirbazBolumu({
|
|||||||
</p>
|
</p>
|
||||||
</section>
|
</section>
|
||||||
) : (
|
) : (
|
||||||
<section className="mt-16 rounded-2xl bg-primary p-8 text-center text-white sm:p-12">
|
<section className="mt-16 min-w-0 rounded-2xl bg-primary px-5 py-8 text-center text-white sm:p-12">
|
||||||
<h2 className="font-heading text-2xl font-bold sm:text-3xl">
|
<h2 className="font-heading text-2xl font-bold sm:text-3xl">
|
||||||
Bu listeyi 24 tercihlik plana çevirelim mi?
|
Bu listeyi 24 tercihlik plana çevirelim mi?
|
||||||
</h2>
|
</h2>
|
||||||
@@ -435,7 +435,7 @@ export function SihirbazBolumu({
|
|||||||
<Button
|
<Button
|
||||||
size="lg"
|
size="lg"
|
||||||
onClick={() => acikDegisti(true)}
|
onClick={() => acikDegisti(true)}
|
||||||
className="mt-6 h-12 cursor-pointer bg-orange-500 px-8 text-white transition-colors duration-200 hover:bg-orange-600"
|
className="mt-6 h-auto min-h-12 w-full cursor-pointer whitespace-normal bg-orange-500 px-4 py-3 text-white transition-colors duration-200 hover:bg-orange-600 sm:w-auto sm:px-8"
|
||||||
>
|
>
|
||||||
<Sparkles className="size-4" aria-hidden />
|
<Sparkles className="size-4" aria-hidden />
|
||||||
Listemi oluştur
|
Listemi oluştur
|
||||||
|
|||||||
@@ -185,6 +185,21 @@ export function PixelDivider({
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Alt sayfa başlıklarını içerikten ayıran kompakt piksel imzası. */
|
||||||
|
export function PagePixelDivider({
|
||||||
|
seed = 5,
|
||||||
|
className,
|
||||||
|
}: {
|
||||||
|
seed?: number;
|
||||||
|
className?: string;
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<div aria-hidden="true" className={cn("w-40", className)}>
|
||||||
|
<PixelDivider seed={seed} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/** Küçük sabit süslerde (mark/korner) data-px öznitelikli rect. */
|
/** Küçük sabit süslerde (mark/korner) data-px öznitelikli rect. */
|
||||||
function fixedPixel(x: number, y: number, opacity: number) {
|
function fixedPixel(x: number, y: number, opacity: number) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user