From f88b76546c1f5fabd1b6444d6078700b65144385 Mon Sep 17 00:00:00 2001 From: Ege Can Komur Date: Wed, 20 May 2026 19:07:26 +0300 Subject: [PATCH] =?UTF-8?q?fix:=20blog=20empty=20state=20+=20proje=20detay?= =?UTF-8?q?=20yar=C4=B1=20bo=C5=9F=20meta=20tablosu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Claude vision ile localhost'ta yapılan tarama sonrası 2 sorun: 1) Blog sayfası — henüz yazı yoksa empty state küçük bir kart olup altında ~1000px beyaz alan kalıyordu, footer çok aşağıdaydı. Çözüm: Empty state için zengin bir layout: - Gradient hero ('Blog yazılarımızı hazırlıyoruz' + 3 CTA: keşif görüşmesi / WhatsApp / Telefon) - 'Bu arada hizmetlerimize göz atın' başlıkla 6 hizmet grid - 'Site analiz raporu' lead magnet kartı Yazı geldiğinde otomatik normal grid'e döner. 2) Proje detay sayfası — sağ üstte 2 sütunlu meta card sadece 'Yıl: 2025' gösteriyordu (client_name/industry/duration boş), yarı boş görünüyor + sağ tarafta büyük boşluk. Çözüm: - meta.length >= 2 → eski 2x2 grid card - meta.length === 1 → inline pill strip altta - meta yok → grid tek sütuna döner (lg:grid-cols-[1.4fr_1fr] conditional) Claude vision ile 10 sayfa screenshot alındı (/tmp/kovak-screenshots). Diğer sayfalar (anasayfa, hizmet detay, sektör, iletişim, vs) tasarım açısından temiz görünüyor. --- app/(site)/blog/page.tsx | 262 ++++++++++++++++++++++------ app/(site)/projeler/[slug]/page.tsx | 25 ++- 2 files changed, 228 insertions(+), 59 deletions(-) diff --git a/app/(site)/blog/page.tsx b/app/(site)/blog/page.tsx index da82b3f..4629c3d 100644 --- a/app/(site)/blog/page.tsx +++ b/app/(site)/blog/page.tsx @@ -1,21 +1,179 @@ import Image from "next/image"; import Link from "next/link"; import type { Metadata } from "next"; -import { ArrowRight, Calendar } from "lucide-react"; +import { + ArrowRight, + Calendar, + Sparkles, + MessageCircle, + Phone, + FileText, +} from "lucide-react"; import { SectionTitle } from "@/components/section-title"; -import { listPublishedPosts } from "@/lib/data"; +import { Icon } from "@/components/icon"; +import { + getSiteSettings, + listPublishedPosts, + listServices, +} from "@/lib/data"; import { buildMetadata } from "@/lib/seo"; +import { siteConfig } from "@/lib/site-config"; export async function generateMetadata(): Promise { return buildMetadata("/blog", { title: "Blog", - description: "Yazılım, web tasarım, SEO ve dijital pazarlama üzerine yazılar.", + description: + "Yazılım, web tasarım, SEO ve dijital pazarlama üzerine yazılar.", }); } export default async function BlogIndex() { - const posts = await listPublishedPosts(); + const [posts, services, settings] = await Promise.all([ + listPublishedPosts(), + listServices(), + getSiteSettings(), + ]); + const phoneRaw = settings?.contact_phone_raw ?? siteConfig.contact.phoneRaw; + const phone = settings?.contact_phone ?? siteConfig.contact.phone; + const wa = phoneRaw.replace(/[^\d]/g, ""); + const waMessage = settings?.whatsapp_message ?? ""; + const waHref = `https://wa.me/${wa}${ + waMessage ? `?text=${encodeURIComponent(waMessage)}` : "" + }`; + + // Empty state — site daha yeni, içerik yok + if (posts.length === 0) { + return ( +
+ + + {/* Coming soon hero */} +
+
+
+ + + Yakında + +

+ Blog yazılarımızı hazırlıyoruz +

+

+ Sektörden vaka çalışmaları, teknik rehberler ve sahada öğrendiklerimizi + kısa sürede burada paylaşmaya başlayacağız. +

+ +
+ + Ücretsiz keşif görüşmesi + + + + + WhatsApp + + + + {phone} + +
+
+
+ + {/* Bu arada → Hizmetler grid */} + {services.length > 0 && ( +
+
+ + + Tümünü gör → + +
+ +
+ {services.slice(0, 6).map((s) => ( + +
+ +
+

+ {s.title} +

+

+ {s.description} +

+ + ))} +
+
+ )} + + {/* Lead magnet CTA */} +
+
+
+

+ + Ücretsiz Rapor +

+

+ Site analiz raporunuzu alın +

+

+ Mevcut sitenizin SEO, hız, mobil ve dönüşüm performansını ücretsiz + değerlendirelim. 24 saat içinde detaylı rapor e-postanızda. +

+
+ + Ücretsiz raporumu istiyorum + + +
+
+
+ ); + } + + // Normal grid — yazı varsa return (
-
- {posts.length === 0 ? ( -
-

- Henüz yayınlanmış yazı yok. -

-
- ) : ( -
- {posts.map((p) => ( -
- -
- {p.cover_image ? ( - {p.title} - ) : ( -
- {p.title.charAt(0)} -
- )} +
+ {posts.map((p) => ( +
+ +
+ {p.cover_image ? ( + {p.title} + ) : ( +
+ {p.title.charAt(0)}
-
-

- - {p.published_at - ? new Date(p.published_at).toLocaleDateString("tr-TR") - : "—"} -

-

- {p.title} -

- {p.excerpt && ( -

- {p.excerpt} -

- )} - - Devamını oku - -
- -
- ))} -
- )} + )} +
+
+

+ + {p.published_at + ? new Date(p.published_at).toLocaleDateString("tr-TR") + : "—"} +

+

+ {p.title} +

+ {p.excerpt && ( +

+ {p.excerpt} +

+ )} + + Devamını oku + +
+ +
+ ))}
); diff --git a/app/(site)/projeler/[slug]/page.tsx b/app/(site)/projeler/[slug]/page.tsx index 2cde4bb..9059f5b 100644 --- a/app/(site)/projeler/[slug]/page.tsx +++ b/app/(site)/projeler/[slug]/page.tsx @@ -83,7 +83,11 @@ export default async function ProjectDetailPage({ Tüm projeler -
+
= 2 ? "lg:grid-cols-[1.4fr_1fr]" : "" + }`} + >
{project.category && ( @@ -128,7 +132,8 @@ export default async function ProjectDetailPage({ )}
- {meta.length > 0 && ( + {/* Meta tablo sadece 2+ alan dolu ise gösterilir — yarı boş card görünmesin */} + {meta.length >= 2 && (
{meta.map((m) => (
@@ -145,6 +150,22 @@ export default async function ProjectDetailPage({ )}
+ {/* Tek-iki meta varsa daha kompakt inline strip olarak gösterilir */} + {meta.length > 0 && meta.length < 2 && ( +
+ {meta.map((m) => ( + + {m.icon} + {m.label}:{" "} + {m.value} + + ))} +
+ )} + {project.image_url && (