UX/CRO denetimi uygulandı: değer-önce funnel, güven sayfaları, dev paneli

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>
This commit is contained in:
bilalgursen
2026-07-26 15:10:57 +03:00
parent d93cf742ff
commit 7288c926d0
40 changed files with 1666 additions and 162 deletions

View File

@@ -0,0 +1,45 @@
"use client";
import { Children, type ReactNode } from "react";
import {
AnimatePresence,
motion,
type Transition,
type Variants,
} from "motion/react";
type TransitionPanelProps = {
activeIndex: number;
children: ReactNode;
variants: Variants;
transition?: Transition;
custom?: number;
};
export function TransitionPanel({
activeIndex,
children,
variants,
transition,
custom,
}: TransitionPanelProps) {
const paneller = Children.toArray(children);
return (
<div className="relative overflow-hidden">
<AnimatePresence initial={false} custom={custom}>
<motion.div
key={activeIndex}
custom={custom}
variants={variants}
initial="enter"
animate="center"
exit="exit"
transition={transition}
>
{paneller[activeIndex]}
</motion.div>
</AnimatePresence>
</div>
);
}