Files
kovakyazilim/components/footer.tsx
T
Ege Can Komur cf46e30a7e feat: TR rakip analizi → satış blokerleri düzeltildi
Rakip analizi (kocaelidijital.com, promedyanet.com, lf.com.tr) sonrası
satış blokerleri tespit edildi ve aşağıdaki bölümler eklendi:

1. ANASAYFADA SSS (8 hazır soru, admin'den düzenlenebilir)
   - Fiyat, süre, ödeme, garanti, hosting, SEO, mevcut site yenileme,
     sadece tasarım hizmeti gibi en sık sorulan sorular
   - HomepageFaq component (sticky sol + accordion sağ)
   - site_settings.homepage_faq[] (JSON {q,a})

2. RISK REVERSAL bölümü (Guarantee component)
   - 'İlk taslak ücretsiz, memnun değilseniz devam etmiyoruz'
   - 4 garanti maddesi checklist
   - site_settings.guarantee_title/description/items

3. PROJE METRİKLERİ (vaka çalışması güçlendirme)
   - projects.metrics[] (JSON {value,label})
   - Detay sayfada büyük metric kartları
   - Admin formda 'değer | etiket' satır formatı

4. HERO COPY GÜNCELLEMESİ (admin'den düzenlenebilir)
   - 'Kocaeli'de 2-3 hafta içinde yayında olan, satan kurumsal web siteleri'
   - 'İlk tasarım taslakı ücretsiz' vurgusu
   - Trust band: 30 dk yanıt + ücretsiz taslak + 4.9 memnuniyet

5. /SITE-ANALIZI LEAD MAGNET SAYFASI
   - URL + ad + email + telefon formu
   - 6 analiz başlığı (CWV, mobil, SEO, güvenlik, içerik, rakip)
   - contact_messages'a source=quick-site-audit ile yazılır
   - 'subject' alanı ile inbox'ta ayırt edilebilir

6. EKİP BÖLÜMÜ (Hakkımızda sayfasında)
   - Yeni team_members tablosu (name, role, bio, photo, linkedin)
   - /admin/ekip CRUD sayfası
   - TeamGrid component

7. SEKTÖR LANDING SAYFALARI (/sektor/[slug])
   - Yeni industries tablosu (slug, title, content, features, faq, SEO)
   - /admin/sektorler CRUD sayfası
   - SEO + ad-targeted landing template
   - Hero + trust + features + content + garanti + projeler + hizmetler + FAQ + JSON-LD

Admin /admin/site formuna yeni bölümler:
- 'Risk reversal / Garanti' (title + description + items)
- 'Anasayfa SSS' (---' bloklarla)

App sidebar'a 'Sektörler' ve 'Ekip' linkleri eklendi.
Footer'a 'Ücretsiz Site Analizi' linki eklendi.

36 route üretiliyor (önceki 31'den +5: /site-analizi, /sektor/[slug],
/admin/ekip + alt, /admin/sektorler + alt).
2026-05-20 04:03:21 +03:00

131 lines
4.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import Image from "next/image";
import Link from "next/link";
import { Mail, MapPin, Phone } from "lucide-react";
import { LinkedinIcon, InstagramIcon, TwitterIcon } from "@/components/social-icons";
import { getSiteSettings, listServices } from "@/lib/data";
import { siteConfig } from "@/lib/site-config";
export async function Footer() {
const [settings, services] = await Promise.all([
getSiteSettings(),
listServices(),
]);
const tagline = settings?.footer_tagline ?? siteConfig.tagline;
const address = settings?.contact_address ?? siteConfig.contact.address;
const phone = settings?.contact_phone ?? siteConfig.contact.phone;
const phoneRaw = settings?.contact_phone_raw ?? siteConfig.contact.phoneRaw;
const email = settings?.contact_email ?? siteConfig.contact.email;
const socials = [
{ url: settings?.social_linkedin, label: "LinkedIn", Icon: LinkedinIcon },
{ url: settings?.social_instagram, label: "Instagram", Icon: InstagramIcon },
{ url: settings?.social_twitter, label: "Twitter / X", Icon: TwitterIcon },
].filter((s) => s.url);
const footerServices =
services.length > 0
? services.slice(0, 5)
: siteConfig.fallbackServices.slice(0, 5);
return (
<footer className="border-t border-[var(--border)] bg-[var(--navy)] text-white">
<div className="mx-auto grid max-w-7xl gap-10 px-6 py-14 md:grid-cols-4">
<div>
<div className="flex items-center gap-3">
<Image
src="/logo.png"
alt={siteConfig.name}
width={48}
height={48}
className="brightness-0 invert"
/>
<span className="text-lg font-semibold">{siteConfig.name}</span>
</div>
<p className="mt-4 text-sm leading-relaxed text-white/70">{tagline}</p>
</div>
<div>
<h3 className="text-sm font-semibold uppercase tracking-wider text-white/80">
Hizmetler
</h3>
<ul className="mt-4 space-y-2 text-sm text-white/70">
{footerServices.map((s) => (
<li key={s.slug}>
<Link href={`/hizmetler/${s.slug}`} className="hover:text-white">
{s.title}
</Link>
</li>
))}
</ul>
</div>
<div>
<h3 className="text-sm font-semibold uppercase tracking-wider text-white/80">
İletişim
</h3>
<ul className="mt-4 space-y-3 text-sm text-white/70">
<li className="flex items-start gap-2">
<MapPin className="mt-0.5 size-4 shrink-0" />
<span>{address}</span>
</li>
<li className="flex items-center gap-2">
<Phone className="size-4 shrink-0" />
<a href={`tel:${phoneRaw}`} className="hover:text-white">
{phone}
</a>
</li>
<li className="flex items-center gap-2">
<Mail className="size-4 shrink-0" />
<a href={`mailto:${email}`} className="hover:text-white">
{email}
</a>
</li>
</ul>
</div>
{socials.length > 0 && (
<div>
<h3 className="text-sm font-semibold uppercase tracking-wider text-white/80">
Sosyal Medya
</h3>
<div className="mt-4 flex gap-3">
{socials.map(({ url, label, Icon }) => (
<a
key={label}
href={url as string}
target="_blank"
rel="noopener noreferrer"
aria-label={label}
className="flex size-9 items-center justify-center rounded-full bg-white/10 transition hover:bg-white/20"
>
<Icon className="size-4" />
</a>
))}
</div>
</div>
)}
</div>
<div className="border-t border-white/10">
<div className="mx-auto flex max-w-7xl flex-col items-center justify-between gap-2 px-6 py-5 text-xs text-white/60 md:flex-row">
<p>
© {new Date().getFullYear()} {siteConfig.name}. Tüm hakları saklıdır.
</p>
<div className="flex flex-wrap items-center gap-3">
<Link href="/site-analizi" className="hover:text-white">
Ücretsiz Site Analizi
</Link>
<span></span>
<Link href="/cerez-politikasi" className="hover:text-white">
Çerez Politikası
</Link>
<span></span>
<p>Kocaeli, Türkiye</p>
</div>
</div>
</div>
</footer>
);
}