Files
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

116 lines
4.0 KiB
TypeScript
Raw Permalink 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.
"use client";
import { useActionState } from "react";
import { submitContact, type ContactFormState } from "@/app/actions";
import {
Search,
ArrowRight,
CheckCircle2,
AlertCircle,
Loader2,
} from "lucide-react";
const initial: ContactFormState = { ok: false, message: "" };
export function AuditForm() {
const [state, action, pending] = useActionState(submitContact, initial);
return (
<form action={action} className="space-y-4">
<input type="hidden" name="source" value="quick-site-audit" />
<input type="hidden" name="subject" value="Ücretsiz site analizi talebi" />
<div>
<label className="text-sm font-medium text-[var(--navy)]">
Web sitenizin adresi <span className="text-red-500">*</span>
</label>
<input
name="message"
required
placeholder="https://siteminizin-adresi.com"
className="mt-1.5 w-full rounded-xl border border-[var(--border)] bg-white px-4 py-3 text-sm outline-none transition placeholder:text-[var(--muted)]/60 focus:border-[var(--sky)] focus:ring-2 focus:ring-[var(--sky)]/20"
/>
</div>
<div className="grid gap-4 sm:grid-cols-2">
<div>
<label className="text-sm font-medium text-[var(--navy)]">
Adınız <span className="text-red-500">*</span>
</label>
<input
name="name"
required
placeholder="Adınız Soyadınız"
className="mt-1.5 w-full rounded-xl border border-[var(--border)] bg-white px-4 py-3 text-sm outline-none transition placeholder:text-[var(--muted)]/60 focus:border-[var(--sky)] focus:ring-2 focus:ring-[var(--sky)]/20"
/>
</div>
<div>
<label className="text-sm font-medium text-[var(--navy)]">
E-posta <span className="text-red-500">*</span>
</label>
<input
name="email"
type="email"
required
placeholder="ornek@firma.com"
className="mt-1.5 w-full rounded-xl border border-[var(--border)] bg-white px-4 py-3 text-sm outline-none transition placeholder:text-[var(--muted)]/60 focus:border-[var(--sky)] focus:ring-2 focus:ring-[var(--sky)]/20"
/>
</div>
</div>
<div>
<label className="text-sm font-medium text-[var(--navy)]">
Telefon (opsiyonel)
</label>
<input
name="phone"
type="tel"
inputMode="tel"
placeholder="+90 5xx xxx xx xx"
className="mt-1.5 w-full rounded-xl border border-[var(--border)] bg-white px-4 py-3 text-sm outline-none transition placeholder:text-[var(--muted)]/60 focus:border-[var(--sky)] focus:ring-2 focus:ring-[var(--sky)]/20"
/>
</div>
<button
type="submit"
disabled={pending}
className="inline-flex w-full items-center justify-center gap-2 rounded-xl bg-[var(--navy)] px-5 py-3 text-sm font-semibold text-white transition hover:bg-[var(--navy-700)] disabled:opacity-60"
>
{pending ? (
<>
<Loader2 className="size-4 animate-spin" />
Talep gönderiliyor
</>
) : (
<>
<Search className="size-4" />
Ücretsiz analiz raporumu istiyorum
<ArrowRight className="size-4" />
</>
)}
</button>
<p className="text-center text-[11px] text-[var(--muted)]">
Raporunuz 24 saat içinde e-posta adresinize gönderilir. Bilgileriniz gizli tutulur.
</p>
{state.message && (
<div
className={`flex items-start gap-2 rounded-xl border p-3 text-xs ${
state.ok
? "border-green-200 bg-green-50 text-green-800"
: "border-red-200 bg-red-50 text-red-800"
}`}
>
{state.ok ? (
<CheckCircle2 className="mt-0.5 size-4 shrink-0" />
) : (
<AlertCircle className="mt-0.5 size-4 shrink-0" />
)}
<span>{state.message}</span>
</div>
)}
</form>
);
}