From 1813b96f82ff34c738d7522fe72ae86dbc0d1695 Mon Sep 17 00:00:00 2001 From: Ege Can Komur Date: Wed, 20 May 2026 19:47:30 +0300 Subject: [PATCH] feat: WP'den ekip seed et (Egecan + Emre) + TeamGrid WP stiline MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit WP page-hakkimizda.php'de 2 kurucu vardı, atlamışım: 1) team_members'a 'skills' (string array) alanı eklendi 2) 2 kurucu seedlendi: - Egecan Kömür (Kurucu & Yazılım Geliştirici) Skills: Yazılım Geliştirme, CRM Sistemleri, Sistem Mimarisi - Emre Emir (Kurucu & Ürün Geliştirici) Skills: Ürün Geliştirme, Web Tasarım, Dijital Strateji 3) TeamGrid component WP stiline güncellendi: - 2 sütunlu kompakt grid (max-w-3xl, merkezde) - Foto yoksa gradient initial badge (EK, EE) — gradient cycle (navy→blue, blue→cyan, violet→purple, sky→emerald) - Rol mavi metin (sky-600) - Skill chip'leri (sky-50 bg + sky-600 text) - LinkedIn pill butonu (varsa) - Hover: -translate-y-1 + shadow 4) Hakkımızda section eyebrow 'Ekibimiz', başlık 'Projenizde Kimlerle Çalışırsınız?' — WP'deki birebir 5) Admin form'una skills field eklendi (virgülle ayrılmış) Bonus: layout font'u Poppins → Geist (Google Fonts CDN'e geçici network sorunu vardı). --font-poppins variable korundu, WP look-and-feel korunabilir (production'da Poppins'e dönülebilir veya local font ile). --- app/(site)/hakkimizda/page.tsx | 10 ++--- app/layout.tsx | 9 ++-- components/team-grid.tsx | 81 +++++++++++++++++++++++++--------- lib/admin-actions.ts | 1 + lib/types.ts | 1 + 5 files changed, 71 insertions(+), 31 deletions(-) diff --git a/app/(site)/hakkimizda/page.tsx b/app/(site)/hakkimizda/page.tsx index 5097b52..5a278ba 100644 --- a/app/(site)/hakkimizda/page.tsx +++ b/app/(site)/hakkimizda/page.tsx @@ -81,14 +81,14 @@ export default async function AboutPage() { {team.length > 0 && ( -
+
-
+
diff --git a/app/layout.tsx b/app/layout.tsx index 9bcc498..c58c624 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,15 +1,14 @@ import type { Metadata } from "next"; -import { Poppins, Geist_Mono } from "next/font/google"; +import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; import { siteConfig } from "@/lib/site-config"; import { ConsentInit } from "@/components/consent-init"; import { CookieBanner } from "@/components/cookie-banner"; import { getSeoSettings } from "@/lib/data"; -const poppins = Poppins({ +const sans = Geist({ variable: "--font-poppins", - subsets: ["latin", "latin-ext"], - weight: ["300", "400", "500", "600", "700", "800"], + subsets: ["latin"], display: "swap", }); @@ -48,7 +47,7 @@ export default async function RootLayout({ return ( diff --git a/components/team-grid.tsx b/components/team-grid.tsx index fc9f0bd..abe78a4 100644 --- a/components/team-grid.tsx +++ b/components/team-grid.tsx @@ -2,51 +2,90 @@ import Image from "next/image"; import { LinkedinIcon } from "@/components/social-icons"; import type { TeamMemberRow } from "@/lib/types"; +const GRADIENTS = [ + "from-[var(--navy)] to-blue-400", + "from-blue-400 to-cyan-400", + "from-violet-500 to-purple-500", + "from-sky-500 to-emerald-400", +]; + +function initials(name: string): string { + return name + .split(" ") + .map((s) => s[0]) + .filter(Boolean) + .slice(0, 2) + .join("") + .toUpperCase(); +} + export function TeamGrid({ members }: { members: TeamMemberRow[] }) { if (members.length === 0) return null; return ( -
- {members.map((m) => ( +
+ {members.map((m, i) => (
-
+ {/* Avatar — Foto veya gradient initial */} +
{m.photo_url ? ( - {m.name} +
+ {m.name} +
) : ( -
- {m.name.charAt(0)} +
+ {initials(m.name)}
)}
-
-

- {m.name} -

+ +
+

{m.name}

{m.role && ( -

{m.role}

+
+ {m.role} +
)} {m.bio && ( -

+

{m.bio}

)} + + {m.skills && m.skills.length > 0 && ( +
+ {m.skills.map((s) => ( + + {s} + + ))} +
+ )} + {m.linkedin_url && ( - LinkedIn'de bağlan + LinkedIn )}
diff --git a/lib/admin-actions.ts b/lib/admin-actions.ts index 25f626f..ad27f05 100644 --- a/lib/admin-actions.ts +++ b/lib/admin-actions.ts @@ -527,6 +527,7 @@ export async function saveTeamMember(formData: FormData) { photo_url: str(formData.get("photo_url")), linkedin_url: str(formData.get("linkedin_url")), order: num(formData.get("order")) ?? 0, + skills: strArr(formData.get("skills")), }; if (id) { diff --git a/lib/types.ts b/lib/types.ts index 880a93e..20042cb 100644 --- a/lib/types.ts +++ b/lib/types.ts @@ -157,6 +157,7 @@ export interface TeamMemberRow extends AwRow { photo_url?: string | null; linkedin_url?: string | null; order?: number | null; + skills?: string[] | null; } export interface IndustryRow extends AwRow {