Files
kovakyazilim/app/admin/(protected)/sektorler/form.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

141 lines
4.2 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 { Save } from "lucide-react";
import {
Checkbox,
Field,
FormActions,
FormShell,
GhostLink,
PageHeader,
PrimaryButton,
Textarea,
} from "@/components/admin/form";
import { saveIndustry } from "@/lib/admin-actions";
import type { FaqItem, IndustryRow } from "@/lib/types";
function faqToText(items?: string[] | null): string {
if (!items) return "";
const parsed: FaqItem[] = [];
for (const raw of items) {
try {
const obj = JSON.parse(raw) as Partial<FaqItem>;
if (obj.q && obj.a) parsed.push({ q: obj.q, a: obj.a });
} catch {
/* ignore */
}
}
return parsed.map((it) => `${it.q}\n${it.a}`).join("\n---\n");
}
export function IndustryForm({ row }: { row?: IndustryRow }) {
return (
<div>
<PageHeader
title={row ? "Sektörü düzenle" : "Yeni sektör"}
backHref="/admin/sektorler"
description="Örn: 'Avukat web tasarımı', 'Doktor web tasarımı', 'İnşaat firması web tasarımı'"
/>
<form action={saveIndustry}>
{row && <input type="hidden" name="id" value={row.$id} />}
<FormShell>
<div className="grid gap-5 md:grid-cols-2">
<Field
label="Başlık"
name="title"
required
defaultValue={row?.title}
placeholder="Avukat Web Tasarımı"
/>
<Field
label="Slug"
name="slug"
defaultValue={row?.slug}
placeholder="avukat-web-tasarimi"
/>
<Field
label="Hero görsel URL"
name="hero_image"
type="url"
defaultValue={row?.hero_image}
/>
<Field
label="Sıra"
name="order"
type="number"
defaultValue={row?.order ?? 0}
/>
</div>
<div className="mt-5 space-y-5">
<Textarea
label="Alt başlık / kısa açıklama"
name="subtitle"
rows={2}
defaultValue={row?.subtitle}
placeholder="Avukatlar için KVKK uyumlu, randevu sistemli, SEO odaklı modern web siteleri."
/>
<Textarea
label="İçerik (Markdown)"
name="content"
rows={10}
defaultValue={row?.content}
placeholder="## Sektör özellikleri\n\nAvukatlar için..."
/>
<Textarea
label="Özellikler"
name="features"
rows={3}
defaultValue={row?.features?.join(", ")}
placeholder="KVKK uyumlu form, Randevu sistemi, Blog modülü, Çoklu dil"
help="Virgülle ayırın."
/>
<Textarea
label="SSS"
name="faq"
rows={8}
defaultValue={faqToText(row?.faq)}
placeholder={"Avukatlar için web sitesi neden önemli?\nKVKK uyumu için..."}
help='Her blok "---" ile ayrılır. İlk satır soru, kalanı cevap.'
/>
</div>
<h3 className="mt-8 text-sm font-semibold uppercase tracking-wider text-[var(--muted)]">
SEO
</h3>
<div className="mt-3 space-y-5">
<Field
label="SEO başlığı"
name="seo_title"
defaultValue={row?.seo_title}
placeholder="Avukat Web Tasarımı | Kocaeli — KVKK Uyumlu Modern Site"
/>
<Textarea
label="SEO açıklaması"
name="seo_description"
rows={2}
defaultValue={row?.seo_description}
/>
</div>
<div className="mt-5">
<Checkbox
label="Öne çıkar"
name="featured"
defaultChecked={row?.featured ?? false}
/>
</div>
<FormActions>
<GhostLink href="/admin/sektorler">İptal</GhostLink>
<PrimaryButton>
<Save className="size-4" /> Kaydet
</PrimaryButton>
</FormActions>
</FormShell>
</form>
</div>
);
}