import { KEYS_17, dynamicKeys } from "@/lib/keys";
import { Button, Input, Separator } from "@sase/ui";
import { Link, createFileRoute, useNavigate } from "@tanstack/react-router";
import {
ArrowRight,
Car,
CheckCircle2,
ChevronRight,
Database,
FolderTree,
Gift,
Hash,
Loader2,
Menu,
MessageCircle,
Moon,
MousePointerClick,
Puzzle,
Search,
ShieldCheck,
ShoppingCart,
Sun,
Tag,
Wrench,
X,
Zap,
} from "lucide-react";
import { Suspense, lazy, useEffect, useRef, useState } from "react";
// Remotion — lazy loaded to keep initial bundle lean
const RemotionSchemaPlayer = lazy(() =>
Promise.all([import("@remotion/player"), import("@/remotion/SchemaDemo")]).then(
([{ Player }, { SchemaDemo }]) => ({
default: ({ isDark }: { isDark: boolean }) => (
),
}),
),
);
const RemotionDashboardPlayer = lazy(() =>
Promise.all([import("@remotion/player"), import("@/remotion/DashboardDemo")]).then(
([{ Player }, { DashboardDemo }]) => ({
default: ({ isDark }: { isDark: boolean }) => (
),
}),
),
);
const RemotionEcommercePlayer = lazy(() =>
Promise.all([import("@remotion/player"), import("@/remotion/EcommerceDemo")]).then(
([{ Player }, { EcommerceDemo }]) => ({
default: ({ isDark }: { isDark: boolean }) => (
),
}),
),
);
import { useAuth } from "@/hooks/use-auth";
import { usePageMeta } from "@/hooks/use-page-meta";
import { ApiError, api } from "@/lib/api-client";
import { capture } from "@/lib/posthog";
import { toast } from "@/lib/toast";
import { getUserSettings, setUserSetting } from "@/lib/user-settings";
import { useAuthStore } from "@/stores/auth.store";
// ─── DATA ────────────────────────────────────────────────────────────────────
const BRANDS = [
"BMW",
"Mercedes-Benz",
"Audi",
"VW",
"Fiat",
"Renault",
"Peugeot",
"Citroen",
"Toyota",
"Honda",
"Hyundai",
"Kia",
"Ford",
"Opel",
"Skoda",
"Seat",
"Volvo",
"Nissan",
"Mazda",
"Porsche",
"Land Rover",
"Jaguar",
"Mini",
"Dacia",
"Subaru",
"Suzuki",
"Mitsubishi",
];
const FEATURES = [
{
icon: Search,
title: "Şase Çözme",
description:
"Müşteri araç bilgisini tam bilmiyor mu? Şase numarasını girin — marka, model, motor, donanım saniyeler içinde karşınızda.",
bullets: [
"Marka, model ve yıl tespiti",
"Motor ve şanzıman detayları",
"Donanım paketi bilgileri",
],
mockupTitle: "Şase Çözme — Araç Bilgileri",
mockupContent: (
WVWZZZ1JZ3W597935
{[
["Marka", "Volkswagen"],
["Model", "Golf"],
["Yıl", "2003"],
["Motor", "1.6 FSI"],
["Kasa", "Hatchback"],
].map(([k, v]) => (
{k}
{v}
))}
),
},
{
icon: MousePointerClick,
title: "İnteraktif Şema",
description:
"Parça kataloglarında kaybolmak yerine, tıklanabilir diyagramlarda parçayı görsel olarak bulun.",
bullets: ["Tıklanabilir parça diyagramları", "Zoom & pan navigasyon", "Alt kategori derinliği"],
mockupTitle: "İnteraktif Şema — Motor Bölgesi",
mockupContent: (isDark: boolean) => (
Yükleniyor…
}
>
),
},
{
icon: Database,
title: "OEM Parça Numaraları",
description:
"Birden fazla katalogda çapraz sorgulama yaparak her zaman en güncel ve doğru OEM kodlarını sunar — yanlış parça, iade derdi tarih olur.",
bullets: [
"Çoklu katalog çapraz sorgulama",
"Her zaman güncel OEM kodları",
"Fiyat karşılaştırma",
],
mockupTitle: "OEM Katalog — Parça Listesi",
mockupContent: (
{[
{ code: "1J0 820 803F", name: "Klima Kompresörü", qty: 1 },
{ code: "1J0 819 031A", name: "Kalorifer Motoru", qty: 1 },
{ code: "1J0 698 151G", name: "Ön Fren Balatası", qty: 4 },
].map((p) => (
{p.code}
{p.name}
×{p.qty}
))}
),
},
];
const USE_CASES = [
{
icon: Search,
title: "Yedek Parça Arama",
description: "Şase numarası ile araç modelinize uygun orijinal parçaları anında bulun.",
},
{
icon: Tag,
title: "Orijinal Parça Numarası",
description: "OEM parça kodlarına erişerek doğru parçayı ilk seferde sipariş edin.",
},
{
icon: Car,
title: "Araç Tanımlama",
description: "Şase çözme ile aracın tüm teknik detaylarını ve donanım bilgilerini öğrenin.",
},
{
icon: ShieldCheck,
title: "Çıkma Parça Doğrulama",
description: "OEM kodlarıyla çıkma parçaların orijinalliğini ve uyumluluğunu kontrol edin.",
},
{
icon: Wrench,
title: "Servis & Bakım",
description: "Bakım planlarına uygun parça listeleriyle servis süreçlerini hızlandırın.",
},
];
const BENTO_ITEMS = [
{
icon: Search,
title: "Şase Girin",
description: "17 haneli şase numarasını girin, araç anında tanımlansın.",
stat: "<2sn",
wide: true,
},
{
icon: Car,
title: "27+ Marka",
description: "Avrupa, Asya ve Amerikan markaları tek çatı altında.",
stat: null,
wide: false,
},
{
icon: FolderTree,
title: "Kategorileri Seçin",
description: "Motor, şasi, elektrik... İstediğiniz parça kategorisine dalın.",
stat: null,
wide: false,
},
{
icon: MousePointerClick,
title: "Şema İnceleyin",
description: "İnteraktif teknik diyagramlarda parça konumlarını görsel olarak keşfedin.",
stat: null,
wide: true,
},
{
icon: Hash,
title: "OEM Kod Alın",
description: "Orijinal üretici parça numarasını kopyalayın, siparişe hazır olun.",
stat: null,
wide: true,
},
{
icon: ShoppingCart,
title: "Sipariş Verin",
description: "Doğru parça numarasıyla tedarikçilere hızlıca sipariş oluşturun.",
stat: null,
wide: false,
},
];
const STATS = [
{ value: "1.2sn", label: "Ortalama sorgu süresi" },
{ value: "27", label: "Desteklenen marka" },
{ value: "243K+", label: "OEM parça numarası" },
{ value: "%99.9", label: "Platform erişilebilirlik" },
];
const COMPARISON = [
{ label: "Parça arama süresi", manual: "~15 dakika", sase: "30 saniye" },
{ label: "Yanlış parça riski", manual: "Yüksek", sase: "Sıfıra yakın" },
{
label: "OEM kodu bulma",
manual: "Tek katalog, güncel olmayabilir",
sase: "Çoklu katalog çapraz sorgu",
},
{ label: "Fiyat karşılaştırma", manual: "İmkansız", sase: "Tek ekranda" },
{ label: "Aylık zaman tasarrufu", manual: "—", sase: "~40 saat" },
];
const TESTIMONIALS = [
{
name: "Ahmet Y.",
role: "Yedek Parça Mağazası Sahibi",
initials: "AY",
text: "Eskiden bir parça aramak için 3-4 katalog açıyordum. Sase.tr ile şase numarasını giriyorum, 30 saniyede doğru OEM kodunu buluyorum. İade oranımız %80 düştü.",
rating: 5,
},
{
name: "Mehmet K.",
role: "Oto Servis İşletmecisi",
initials: "MK",
text: "Sase.tr'ye geçtiğimizden beri yanlış parça siparişlerimiz neredeyse sıfıra indi. Aylık 40 saatin üzerinde zaman tasarrufu sağlıyoruz.",
rating: 5,
},
{
name: "Özge D.",
role: "E-Ticaret Yöneticisi",
initials: "ÖD",
text: "Online mağazamıza VIN entegrasyonu ekledik. Müşteriler şase numarasını giriyor, sadece uyumlu parçalar listeleniyor. İade oranımız %42 düştü.",
rating: 5,
},
{
name: "Burak T.",
role: "Filo Yöneticisi",
initials: "BT",
text: "200+ araçlık filomuz için parça yönetimi çok kolay hale geldi. Özellikle interaktif şema özelliği montaj sürecini çok hızlandırıyor.",
rating: 5,
},
];
// ─── HELPERS ─────────────────────────────────────────────────────────────────
function SectionBadge({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
function BrowserFrame({
title,
children,
}: {
title: string;
children: React.ReactNode;
}) {
return (
);
}
// ─── ROUTE ───────────────────────────────────────────────────────────────────
export const Route = createFileRoute("/")({
component: HomePage,
});
export function HomePage() {
usePageMeta({
title: "Şase Numarası Sorgulama & OEM Parça Kataloğu | Sase.tr",
description:
"Araç şase numarasını (VIN) girin, saniyeler içinde OEM parça kodlarına ulaşın. 27+ marka, 243.000+ parça. Yanlış sipariş yapmadan doğru parçayı bulun.",
canonical: "https://sase.tr",
});
useEffect(() => {
const schemas = [
{
"@context": "https://schema.org",
"@type": "Organization",
name: "Sase.tr",
url: "https://sase.tr",
email: "info@sase.tr",
description:
"Türkiye'nin VIN/şase numarası sorgulama ve OEM yedek parça kataloğu platformu.",
},
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
name: "Sase.tr",
applicationCategory: "BusinessApplication",
operatingSystem: "Web",
offers: {
"@type": "Offer",
price: "200",
priceCurrency: "TRY",
},
description: "Araç şase numarası ile OEM yedek parça sorgulama platformu.",
},
];
const scripts = schemas.map((schema) => {
const el = document.createElement("script");
el.type = "application/ld+json";
el.textContent = JSON.stringify(schema);
el.dataset.seoSchema = "true";
document.head.appendChild(el);
return el;
});
return () => {
for (const el of scripts) el.remove();
};
}, []);
const navigate = useNavigate();
const { isAuthenticated } = useAuth();
const [vin, setVin] = useState("");
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
const [isDark, setIsDark] = useState(() => {
const theme = getUserSettings().theme ?? "dark";
if (theme === "system") {
return window.matchMedia("(prefers-color-scheme: dark)").matches;
}
return theme === "dark";
});
const [vinPreview, setVinPreview] = useState<{
make: string;
model: string;
year: string;
engine: string;
} | null>(null);
const [vinLoading, setVinLoading] = useState(false);
const [vinError, setVinError] = useState(false);
const [decodeLoading, setDecodeLoading] = useState(false);
const toggleTheme = () => {
const next = isDark ? "light" : "dark";
document.documentElement.classList.toggle("dark", next === "dark");
setUserSetting("theme", next);
setIsDark(next === "dark");
};
// VIN preview via backend (pl24 + emex)
useEffect(() => {
if (vin.length !== 17) {
setVinPreview(null);
setVinError(false);
return;
}
const controller = new AbortController();
setVinLoading(true);
setVinError(false);
fetch(`/api/vehicles/preview/${vin}`, { signal: controller.signal })
.then((res) => {
if (!res.ok) throw new Error("Bulunamadı");
return res.json();
})
.then((data) => {
const r = data.data !== undefined ? data.data : data;
if (r?.brandName) {
setVinPreview({
make: r.brandName,
model: r.model || "—",
year: r.year ? String(r.year) : "—",
engine: r.engine || "—",
});
} else {
setVinError(true);
}
setVinLoading(false);
})
.catch((err) => {
if (err.name !== "AbortError") {
setVinError(true);
setVinLoading(false);
}
});
return () => controller.abort();
}, [vin]);
const handleVinSearch = async () => {
const trimmed = vin.trim();
if (!trimmed) return;
// Read latest auth state directly from store (avoids stale closure)
const { user, isLoading } = useAuthStore.getState();
// If session still loading, wait for it to resolve
if (isLoading) {
setDecodeLoading(true);
await new Promise((resolve) => {
const unsub = useAuthStore.subscribe((state) => {
if (!state.isLoading) {
unsub();
resolve();
}
});
});
}
const loggedIn = !!useAuthStore.getState().user;
if (!loggedIn) {
setDecodeLoading(false);
navigate({ to: "/register", search: { vin: trimmed } });
return;
}
setDecodeLoading(true);
try {
const vehicle = await api.post<{ id: string }>("/vehicles/decode", { vin: trimmed });
capture("vin_decode_success", { vin: trimmed, source: "landing", vehicle_id: vehicle.id });
navigate({ to: "/dashboard/vehicles/$id", params: { id: vehicle.id } });
} catch (err) {
const message =
err instanceof ApiError ? err.message : "Bir hata oluştu. Lütfen tekrar deneyin.";
capture("vin_decode_error", { vin: trimmed, source: "landing", error: message });
if (err instanceof ApiError) {
if (err.status === 403) {
toast.error(message);
navigate({ to: "/dashboard/subscription" });
} else if (err.status === 400) {
toast.error(message);
} else {
toast.error(message);
}
} else {
toast.error(message);
}
} finally {
setDecodeLoading(false);
}
};
const fillExampleVin = () => {
setVin("WVWZZZ1JZ3W597935");
};
// ─── Social proof impression tracking ────────────────────────────────────
const heroBadgeRef = useRef(null);
const testimonialStripRef = useRef(null);
const testimonialsRef = useRef(null);
const heroBadgeFiredRef = useRef(false);
const testimonialStripFiredRef = useRef(false);
const testimonialsFiredRef = useRef(false);
useEffect(() => {
const el = heroBadgeRef.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting && !heroBadgeFiredRef.current) {
heroBadgeFiredRef.current = true;
capture("social_proof_impression", { page: "landing", section: "hero_badge" });
}
},
{ threshold: 0.5 },
);
observer.observe(el);
return () => observer.disconnect();
}, []);
useEffect(() => {
const el = testimonialStripRef.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting && !testimonialStripFiredRef.current) {
testimonialStripFiredRef.current = true;
capture("social_proof_impression", { page: "landing", section: "testimonial_strip" });
}
},
{ threshold: 0.5 },
);
observer.observe(el);
return () => observer.disconnect();
}, []);
useEffect(() => {
const el = testimonialsRef.current;
if (!el) return;
const observer = new IntersectionObserver(
([entry]) => {
if (entry.isIntersecting && !testimonialsFiredRef.current) {
testimonialsFiredRef.current = true;
capture("social_proof_impression", { page: "landing", section: "testimonials" });
}
},
{ threshold: 0.5 },
);
observer.observe(el);
return () => observer.disconnect();
}, []);
function handleSocialProofEngaged(section: string) {
capture("social_proof_engaged", { page: "landing", section });
}
return (
{/* ─── 1. STICKY HEADER ─────────────────────────────────────────── */}
SASE
{/* Desktop nav */}
{isAuthenticated ? (
) : (
<>
>
)}
{/* Mobile toggle */}
{/* Mobile menu */}
{mobileMenuOpen && (
)}
{/* ─── 2. HERO SECTION ──────────────────────────────────────────── */}
{/* Decorative glow */}
{/* Pill badge — loss framing */}
Her yanlış parça siparişi ortalama 450 TL'ye mal olur
{/* Social proof badge */}
handleSocialProofEngaged("hero_badge")}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleSocialProofEngaged("hero_badge");
}
}}
className="mt-3 inline-flex cursor-pointer items-center gap-3 rounded-full border border-border bg-muted px-4 py-1.5 text-xs text-muted-foreground"
>
{["AY", "MK", "ÖD", "BT"].map((initials) => (
{initials}
))}
⭐ 4.9/5
500+ İşletme Güveniyor
Doğru Parçayı Anında Bulun
Birden fazla katalogda çapraz sorgulama ile her zaman en güncel OEM kodları. Şase
numarasını girin, doğru parçayı ilk seferde gönderin.
{/* VIN Input */}
{/* VIN Progress Bar */}
{KEYS_17.map((k, i) => (
))}
{/* VIN Preview Card */}
{vinLoading && (
Araç bilgileri alınıyor...
)}
{vinPreview && !vinLoading && (
{vinPreview.make} {vinPreview.model}
{vinPreview.year}
{vinPreview.engine !== "—" && (
{vinPreview.engine}
)}
)}
{vinError && !vinLoading && (
Şase bilgisi bulunamadı. Lütfen kontrol edip tekrar deneyin.
)}
{/* Example VIN invite */}
Şase numaranız yok mu?{" "}
{/* Metric badges */}
{[
{ icon: Zap, label: "Ortalama 1.2sn Sonuç" },
{ icon: Car, label: "27 Marka Desteği" },
{ icon: Database, label: "243.000+ OEM Parça" },
].map(({ icon: Icon, label }) => (
{label}
))}
{/* ─── 3. MARKA CAROUSEL ────────────────────────────────────────── */}
Desteklenen 27+ Otomobil Markası
{/* Gradient overlays */}
{[...BRANDS.map((b) => `${b}::a`), ...BRANDS.map((b) => `${b}::b`)].map((id) => (
{id.split("::")[0]}
))}
{/* ─── 3.5. TESTIMONIAL STRIP ────────────────────────────────── */}
Kullanıcılarımız ne diyor?
{[
{
text: "Sase.tr ile yanlış parça siparişlerimiz %80 azaldı. Artık gönül rahatlığıyla sipariş veriyoruz.",
name: "Ahmet Y.",
role: "Yedek Parça Mağazası",
},
{
text: "Ayda 40 saatten fazla zaman kazanıyoruz. Şase numarasını girip anında doğru koda ulaşmak inanılmaz.",
name: "Mehmet K.",
role: "Oto Servis İşletmecisi",
},
{
text: "Online mağazamıza entegre ettik, iade oranımız yarıya düştü. Müşteri memnuniyeti gözle görülür arttı.",
name: "Özge D.",
role: "E-Ticaret Yöneticisi",
},
].map((t) => (
handleSocialProofEngaged("testimonial_strip")}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleSocialProofEngaged("testimonial_strip");
}
}}
className="cursor-pointer rounded-2xl border border-border bg-surface px-6 py-5 transition-all duration-300 hover:-translate-y-0.5 hover:border-foreground/10"
>
{dynamicKeys(5).map((k) => (
))}
“{t.text}”
{t.name} — {t.role}
))}
{/* ─── 4. ÇÖZÜMLER / ÖZELLİKLER ────────────────────────────────── */}
Çözümlerimiz
Şase Çözme & Parça Kataloğu
Araç tanımlamadan parça siparişine kadar tüm süreç tek platformda.
{FEATURES.map((feature, idx) => {
const reversed = idx === 1;
const Icon = feature.icon;
return (
{/* Text */}
{feature.title}
{feature.description}
{feature.bullets.map((b) => (
-
{b}
))}
{/* Browser mockup */}
{typeof feature.mockupContent === "function"
? feature.mockupContent(isDark)
: feature.mockupContent}
);
})}
{/* ─── 5. KARŞILAŞTIRMA TABLOSU (YENİ) ─────────────────────────── */}
Karşılaştırma
Manuel Yöntem vs Sase.tr
{/* Desktop: table */}
|
Manuel
|
Sase.tr
|
{COMPARISON.map((row, idx) => (
| {row.label} |
{row.manual}
|
{row.sase}
|
))}
{/* Mobile: cards */}
{COMPARISON.map((row) => (
))}
{/* ─── 6. BENTO GRID — NASIL ÇALIŞIR ────────────────────────────── */}
Nasıl Çalışır
3 Adımda Orijinal Parçaya Ulaşın
{BENTO_ITEMS.map((item) => {
const Icon = item.icon;
const wide = item.wide;
return (
{item.title}
{item.description}
{item.stat && (
{item.stat}
)}
);
})}
{/* ─── 7. KULLANIM ALANLARI ─────────────────────────────────────── */}
Kullanım Alanları
Kimler İçin?
{USE_CASES.map((uc, idx) => {
const Icon = uc.icon;
return (
{uc.title}
{uc.description}
);
})}
{/* CTA card */}
Farklı bir ihtiyacınız mı var?
Özel entegrasyon veya toplu sorgulama ihtiyacınız varsa bize ulaşın.
{/* ─── 8. RAKAMLARLA SASE.TR ────────────────────────────────────── */}
{/* Ambient grid pattern — breaks digital flatness */}
{/* Brand accent glow */}
Platform
Rakamlarla
Sase.tr
{STATS.map((stat) => (
{stat.value}
{stat.label}
))}
{/* ─── 9. DASHBOARD SHOWCASE ────────────────────────────────────── */}
{/* Decorative circles */}
Tüm Veriler, Tek Platform
Şase çözme, parça kataloğu ve interaktif şemalar tek bir arayüzde.
Yükleniyor…
}
>
{/* Floating labels */}
Şase Arama
İnteraktif Şema
OEM Kodları
{/* ─── 9.5. E-TİCARET ENTEGRASYONU ────────────────────────────── */}
E-Ticaret Entegrasyonu
Kendi Sitenize Şase Çözme Gücü Katın
Müşterileriniz yanlış parça sipariş edip iade mi açıyor? Sase.tr entegrasyonu ile
VIN bazlı filtreleme ekleyin — iadeler düşsün, dönüşüm artsın.
{/* Left — Video */}
Yükleniyor…
}
>
{/* Right — Text + Bullets + CTA */}
Birkaç Satır Kod, Büyük Fark
E-ticaret sitenize Sase.tr'nin VIN çözme motorunu entegre edin. Müşterileriniz
şase numarasını girsin — sadece araçlarına uygun parçalar listelensin.
{[
"API & Widget — Birkaç satır kodla sitenize entegre edin",
"VIN Bazlı Filtreleme — Sadece uyumlu parçalar görünsün",
"İade Oranını Düşürün — Doğru parça, ilk seferde",
"White-Label — Widget sitenizin tasarımına uyum sağlar",
].map((b) => (
-
{b}
))}
{/* Stats grid */}
{[
{ value: "%42", label: "Daha Az İade" },
{ value: "%35", label: "Daha Yüksek Dönüşüm" },
{ value: "<30dk", label: "Entegrasyon Süresi" },
].map((stat) => (
{stat.value}
{stat.label}
))}
{/* ─── 9.6. TESTIMONIALS ────────────────────────────────────── */}
Müşteri Yorumları
İşletme Sahipleri Ne Diyor?
{TESTIMONIALS.map((t) => (
handleSocialProofEngaged("testimonials")}
onKeyDown={(e) => {
if (e.key === "Enter" || e.key === " ") {
e.preventDefault();
handleSocialProofEngaged("testimonials");
}
}}
className="group cursor-pointer rounded-2xl border border-border bg-surface p-6 transition-all duration-300 hover:-translate-y-1 hover:border-foreground/20 hover:shadow-[var(--shadow-md)]"
>
{dynamicKeys(t.rating).map((k) => (
))}
“{t.text}”
))}
{/* ─── 10. PRICING ─────────────────────────────────────────────── */}
Fiyatlandırma
Günde 7 TL'den
başlayan fiyatlar.
Tek bir yanlış parça iadesinin maliyetinden daha az. Tüm planlarda 30 gün ücretsiz
deneme var, kart bilgisi gerekmez.
{/* Tier tiles — horizontal row, compact, breaks 4-tower symmetry */}
{[
{
name: "1 Marka",
description: "Tek marka için erişim",
price: "200",
yearly: "2.000",
features: [
"1 marka seçimi",
"Sınırsız VIN arama",
"Parça kataloğu",
"Şema görüntüleyici",
],
},
{
name: "2 Marka",
description: "İki farklı marka",
price: "350",
yearly: "3.500",
features: [
"2 marka seçimi",
"Sınırsız VIN arama",
"Parça kataloğu",
"Öncelikli destek",
],
},
{
name: "3 Marka",
description: "Üç marka kapsamlı",
price: "500",
yearly: "5.000",
features: [
"3 marka seçimi",
"Sınırsız VIN arama",
"Parça kataloğu",
"Öncelikli destek",
],
},
].map((plan, idx) => (
{plan.name}
/ay
{plan.description}
{plan.price}
TL
yıllık {plan.yearly} TL
{plan.features.map((f) => (
-
{f}
))}
))}
{/* Hero plan — Full Paket, asymmetric horizontal card with brand emphasis */}
{/* Brand accent glow */}
{/* Left: pitch + price */}
En çok tercih edilen
Full Paket
Tüm markalara sınırsız erişim. Tek bir aboneliğe sığdırdık.
999
TL/ay
yıllık 9.990 TL — ayda 832 TL'ye denk gelir
Kart bilgisi gerekmez. İstediğin zaman iptal et.
{/* Right: feature list, two columns */}
Pakete dahil
{[
"Tüm 27+ markaya erişim",
"Sınırsız VIN arama",
"OEM parça kataloğu",
"İnteraktif şema görüntüleyici",
"Geçmiş sorgular & favoriler",
"Öncelikli e-posta desteği",
"API erişimi (talep üzerine)",
"Toplu sorgu özelliği",
].map((f) => (
-
{f}
))}
Detaylı karşılaştırmayı gör
{/* ─── 11. REFERRAL BANNER (YENİ) ───────────────────────────────── */}
Arkadaşını Davet Et
3 davet = +7 gün ücretsiz, 5 davet = +1 ay ücretsiz
{/* ─── 12. SON CTA ──────────────────────────────────────────────── */}
{/* SVG grid pattern */}
{/* Blur glow */}
Her Yanlış Parça Size 200-500 TL'ye Mal Oluyor
İade kargosu, müşteri kaybı, zaman kaybı. Şase çözme ile ilk seferde doğru parçayı
bulun.
{/* ─── 13. FOOTER ───────────────────────────────────────────────── */}
);
}