From aa2b7280b6c92f29deaff9f89c1082a196b744f8 Mon Sep 17 00:00:00 2001 From: Ege Can Komur Date: Wed, 20 May 2026 03:08:05 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20TR=20reklam=20trafi=C4=9Fi=20i=C3=A7in?= =?UTF-8?q?=20anasayfa=20CRO=20optimizasyonu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Yeni bölümler ve component'ler: - WhatsAppFloat: sağ altta her sayfada görünen 'pulse' animasyonlu WhatsApp butonu - MobileCtaBar: mobilde alt sabit bar — Ara / WhatsApp / Teklif Al üç buton - TrustBand: hero altı 4 trust kartı (Google ★, proje sayısı, dönüş süresi, garanti) + Google rating + yorum sayısı satırı - LogoCloud: müşteri logoları grayscale strip - QuickLeadForm: ad + telefon iki alanlı inline mini form (anasayfada) - app/actions submitContact 'source' alanını destekliyor (quick lead → message zorunlu değil) - WhyUs: 4 USP kartı (Hızlı teslim, Yerel destek, Modern tech, Satış sonrası) - ProcessSteps: 4 adımlı 'nasıl çalışıyoruz' süreç akışı (numaralı timeline) Schema (JSON-LD): - OrganizationLd: LocalBusiness + Address + AggregateRating (Google review puanı/sayısı) - ServiceLd: hizmet detay sayfaları için - FaqLd: hizmet FAQ'leri için - BreadcrumbLd, ArticleLd: hazır Anasayfaya OrganizationLd ekli — Google Ads quality score + organic rich results. Performans: - REST GET çağrıları cache:'no-store' yerine next.revalidate=60 (ISR) - Public sayfalar artık static rendering — LCP düşer - Mutations ve session GET'ler hâlâ no-store site_settings yeni alanları (panelden yönetilebilir): - whatsapp_message (default WhatsApp opener) - client_logos[] (logo URL listesi) - trust_items[] (JSON: icon|value|label) - why_us[] (JSON: icon, title, description) - process_steps[] (JSON: title, description) - lead_form_title, lead_form_description - google_rating, google_review_count, google_review_url Admin /admin/site formuna yeni 'Conversion / reklam optimizasyonu', 'Neden Biz?' ve 'Süreç adımları' bölümleri eklendi. Mevcut anasayfa yapısı (üstten alta): 1. Hero 2. TrustBand (mini güven sinyalleri) 3. LogoCloud (varsa müşteri logoları) 4. Hızlı iletişim + QuickLeadForm (2 sütun: tel/WA CTA + mini form) 5. Hizmetler 6. WhyUs (Neden Biz?) 7. ProcessSteps (Nasıl çalışıyoruz?) 8. Projeler 9. Testimonials 10. CTA (Final + WhatsApp) --- app/(site)/layout.tsx | 20 +++- app/(site)/page.tsx | 103 +++++++++++++++-- app/actions.ts | 29 +++-- app/admin/(protected)/site/page.tsx | 165 +++++++++++++++++++++++++++- components/icon.tsx | 26 +++++ components/json-ld.tsx | 157 ++++++++++++++++++++++++++ components/logo-cloud.tsx | 37 +++++++ components/mobile-cta-bar.tsx | 45 ++++++++ components/process-steps.tsx | 82 ++++++++++++++ components/quick-lead-form.tsx | 84 ++++++++++++++ components/trust-band.tsx | 81 ++++++++++++++ components/whatsapp-float.tsx | 28 +++++ components/why-us.tsx | 83 ++++++++++++++ lib/admin-actions.ts | 62 +++++++++++ lib/appwrite-rest.ts | 17 ++- lib/types.ts | 28 +++++ 16 files changed, 1024 insertions(+), 23 deletions(-) create mode 100644 components/json-ld.tsx create mode 100644 components/logo-cloud.tsx create mode 100644 components/mobile-cta-bar.tsx create mode 100644 components/process-steps.tsx create mode 100644 components/quick-lead-form.tsx create mode 100644 components/trust-band.tsx create mode 100644 components/whatsapp-float.tsx create mode 100644 components/why-us.tsx diff --git a/app/(site)/layout.tsx b/app/(site)/layout.tsx index 1d42f3a..9aa8dc8 100644 --- a/app/(site)/layout.tsx +++ b/app/(site)/layout.tsx @@ -1,16 +1,32 @@ import { Header } from "@/components/header"; import { Footer } from "@/components/footer"; +import { WhatsAppFloat } from "@/components/whatsapp-float"; +import { MobileCtaBar } from "@/components/mobile-cta-bar"; +import { getSiteSettings } from "@/lib/data"; +import { siteConfig } from "@/lib/site-config"; -export default function SiteLayout({ +export default async function SiteLayout({ children, }: { children: React.ReactNode; }) { + const settings = await getSiteSettings(); + const phoneRaw = settings?.contact_phone_raw ?? siteConfig.contact.phoneRaw; + return ( <>
-
{children}
+
{children}