diff --git a/app/[locale]/media-kit/page.tsx b/app/[locale]/media-kit/page.tsx
index b5a33b8..8a16c0d 100644
--- a/app/[locale]/media-kit/page.tsx
+++ b/app/[locale]/media-kit/page.tsx
@@ -2,6 +2,8 @@ import type { Metadata } from "next";
import { notFound } from "next/navigation";
import { MediaKitContent } from "@/components/media-kit-content";
import type { MediaKitLocale } from "@/data/media-kit";
+import { createPageMetadata } from "@/lib/seo";
+import { getYouTubeChannelStats } from "@/lib/youtube-channel-stats";
type MediaKitPageProps = {
params: Promise<{ locale: string }>;
@@ -13,25 +15,14 @@ export async function generateMetadata({
const { locale } = await params;
const isTurkish = locale === "tr";
- return {
+ return createPageMetadata({
+ locale: isTurkish ? "tr" : "en",
title: isTurkish ? "Medya Kiti" : "Media Kit",
description: isTurkish
? "Poyraz Avsever sponsorluk ve marka iş birlikleri medya kiti."
: "Poyraz Avsever media kit for sponsorships and brand partnerships.",
- robots: {
- index: false,
- follow: false,
- nocache: true,
- googleBot: {
- index: false,
- follow: false,
- noimageindex: true,
- },
- },
- alternates: {
- canonical: null,
- },
- };
+ path: "/media-kit",
+ });
}
export default async function MediaKitPage({ params }: MediaKitPageProps) {
@@ -41,5 +32,12 @@ export default async function MediaKitPage({ params }: MediaKitPageProps) {
notFound();
}
- return ;
+ const youtubeStats = await getYouTubeChannelStats();
+
+ return (
+
+ );
}
diff --git a/app/robots.ts b/app/robots.ts
index 31ff989..6825975 100644
--- a/app/robots.ts
+++ b/app/robots.ts
@@ -8,7 +8,7 @@ export default function robots(): MetadataRoute.Robots {
{
userAgent: "*",
allow: "/",
- disallow: ["/api/", "/_next/", "/media-kit", "/tr/media-kit", "/en/media-kit"],
+ disallow: ["/api/", "/_next/"],
},
],
sitemap: `${SITE_URL}/sitemap.xml`,
diff --git a/app/sitemap.ts b/app/sitemap.ts
index 60f8090..659940e 100644
--- a/app/sitemap.ts
+++ b/app/sitemap.ts
@@ -26,6 +26,7 @@ const STATIC_ROUTES = [
{ path: "/content", changeFrequency: "weekly", priority: 0.7 },
{ path: "/gallery", changeFrequency: "monthly", priority: 0.6 },
{ path: "/contact", changeFrequency: "yearly", priority: 0.5 },
+ { path: "/media-kit", changeFrequency: "monthly", priority: 0.6 },
{ path: "/links", changeFrequency: "monthly", priority: 0.4 },
{
path: "/animation-sources",
diff --git a/components/media-kit-content.tsx b/components/media-kit-content.tsx
index fc6f120..a14b848 100644
--- a/components/media-kit-content.tsx
+++ b/components/media-kit-content.tsx
@@ -8,158 +8,151 @@ import {
ButtonIcon,
ButtonLabel,
Card,
- PatternDots,
- Separator,
- StatisticCard,
- TextEffect,
Typography,
} from "poyraz-ui/atoms";
import { SPONSORS } from "@/data/sponsors";
import {
MEDIA_KIT_AGES,
- MEDIA_KIT_CONTENT_BREAKDOWN,
+ MEDIA_KIT_DEVICES,
MEDIA_KIT_GENDER,
+ MEDIA_KIT_LOCATIONS,
MEDIA_KIT_METRICS,
MEDIA_KIT_PERIOD,
MEDIA_KIT_TOPICS,
type MediaKitAudienceRow,
+ type MediaKitBreakdownRow,
type MediaKitLocale,
} from "@/data/media-kit";
+import type { YouTubeChannelStats } from "@/lib/youtube-channel-stats";
const COPY = {
tr: {
- eyebrow: "Medya Kiti · 2026",
+ eyebrow: "Medya kiti · 2026",
availability: "İş birliklerine açık",
- name: "Poyraz Avsever",
- title: "Teknolojiyi öğreniyor, üretiyor ve anlaşılır şekilde paylaşıyorum.",
+ title: "Teknolojiyi üretiyor, deneyimliyor ve anlaşılır şekilde paylaşıyorum.",
intro:
- "En büyük amacım öğrendiklerimi aktarırken bilgimi pekiştirmek ve başkalarının da üretmesine yardımcı olmak. Yazılım, teknoloji ve tasarımı gerçek projeler, dürüst deneyimler ve uygulanabilir anlatımlarla buluşturuyorum.",
- role: "İçerik üreticisi · Yazılım geliştirici",
- audienceTitle: "Kime ulaşıyorum?",
+ "Yazılım, teknoloji ve tasarımı gerçek projeler, dürüst deneyimler ve uygulanabilir anlatımlarla buluşturuyorum. Markalarla çalışırken ürünün doğal kullanımını ve izleyici güvenini merkeze alıyorum.",
+ emailCta: "İletişime geç",
+ youtubeCta: "YouTube kanalı",
+ topicsLabel: "İçerik alanları",
+ statsTitle: "Kanal görünümü",
+ liveData: "Canlı YouTube verisi",
+ liveDescription:
+ "Görüntüleme ve abone toplamı saatlik yenilenir; diğer değerler YouTube Studio raporundan gelir.",
+ snapshotDescription:
+ "Ömür boyu performans ve güncel kitle kırılımları YouTube Studio raporundan alınmıştır.",
+ publicTotal: "Herkese açık kanal toplamı",
+ audienceTitle: "Kitle profili",
audienceDescription:
- "Yazılım geliştiriciler, sistem yöneticileri, teknoloji meraklıları ve üretirken öğrenmeyi seven genç profesyoneller.",
- statsEyebrow: "YouTube performansı",
- statsTitle: "Takipçiden öte, aktif ve büyüyen bir kitle.",
- statsDescription:
- "Kanal performansının son 28 günlük görünümü. Gelir verileri medya kitine dahil edilmemiştir.",
- periodLabel: "Veri dönemi",
- audienceEyebrow: "Kitle profili",
- audienceHeadline: "İzleyicilerin %68’i 18–34 yaş aralığında.",
- audienceBody:
- "Teknik kararları etkileyen, yeni araçları deneyen ve teknoloji ürünlerine yüksek ilgi gösteren odaklı bir topluluk.",
+ "İzleyicilerin %69,1’i 18–34 yaş aralığında ve kitlenin %89,2’si Türkiye’den izliyor.",
ageTitle: "Yaş dağılımı",
genderTitle: "Cinsiyet dağılımı",
- formatTitle: "İçerik formatına göre izlenme",
- formatDescription:
- "Uzun video odağı, markaların ürün ve hikâyelerini detaylı ve bağlamı korunmuş biçimde anlatmaya alan açıyor.",
- reachTitle: "Son 28 günde içerik ritmi",
- reachItems: [
- { label: "Yeni izleyici", value: "6,8 B" },
- { label: "Düzenli izleyici", value: "801" },
- { label: "Yayınlanan içerik", value: "9" },
- ],
- reachNote: "5 uzun video · 4 Shorts",
- partnersEyebrow: "Seçili iş birlikleri",
- partnersTitle: "Daha önce birlikte ürettik.",
+ deviceTitle: "Cihaz türü",
+ locationsTitle: "En çok izleyen yerler",
+ activeTitle: "İzleyicilerin aktif olduğu saatler",
+ activeHours: "16:00–00:00",
+ activeDescription:
+ "Hafta boyunca en yoğun zaman aralığı. Hafta sonu hareketlilik öğleden sonra daha erken başlıyor.",
+ activePeriod: "Yerel saat · GMT +03:00 · Son 28 gün",
+ male: "Erkek",
+ female: "Kadın",
+ partnersTitle: "Birlikte çalıştığım markalar",
partnersDescription:
- "İçeriğin doğal akışını ve izleyici güvenini koruyan, ürünü gerçekten deneyimlemeye dayalı iş birlikleri.",
- collaborationTitle: "Uygun iş birliği formatları",
- collaborationItems: [
+ "Ürünü gerçekten deneyimlemeye ve içeriğin doğal akışını korumaya dayalı seçili iş birlikleri.",
+ formatsTitle: "İş birliği formatları",
+ formats: [
"Sponsorlu YouTube videosu veya doğal ürün entegrasyonu",
"Teknik ürün incelemesi ve kullanım senaryosu",
- "Kısa format video ve çoklu platform içerik paketi",
+ "Kısa video ve çoklu platform içerik paketi",
"Uzun dönem marka elçiliği ve içerik serisi",
],
- ctaEyebrow: "Birlikte üretelim",
ctaTitle: "Teknoloji kitlesine güvenilir bir hikâyeyle ulaşın.",
ctaDescription:
- "Markanızı, ürünü gerçekten anlayan ve izleyicisine açık bir dille anlatan içeriklerle buluşturalım.",
- emailCta: "E-posta gönder",
- youtubeCta: "YouTube kanalını aç",
- footer: "Poyraz Avsever · Medya Kiti",
- updated: "Son güncelleme: 1 Temmuz 2026",
- derivedNote:
- "Ortalama izlenme süresi, paylaşılan toplam izlenme saati ve görüntüleme değerlerinden yaklaşık olarak hesaplanmıştır.",
+ "Ürününüzü anlayan, deneyimleyen ve izleyicisine açık bir dille anlatan bir iş birliği kurgulayalım.",
+ dataNote:
+ "Performans, demografi, cihaz ve ülke kırılımları ömür boyudur. Aktif saatler son 28 günü gösterir.",
},
en: {
- eyebrow: "Media Kit · 2026",
+ eyebrow: "Media kit · 2026",
availability: "Open to partnerships",
- name: "Poyraz Avsever",
- title: "I learn, build, and make technology easier to understand.",
+ title: "I build, experience, and explain technology in a clear way.",
intro:
- "My biggest goal is to reinforce what I learn by sharing it and help others build along the way. I connect software, technology, and design through real projects, honest experiences, and practical storytelling.",
- role: "Content creator · Software developer",
- audienceTitle: "Who do I reach?",
+ "I bring software, technology, and design together through real projects, honest experiences, and practical storytelling. Brand work is grounded in natural product use and audience trust.",
+ emailCta: "Get in touch",
+ youtubeCta: "YouTube channel",
+ topicsLabel: "Content topics",
+ statsTitle: "Channel overview",
+ liveData: "Live YouTube data",
+ liveDescription:
+ "View and subscriber totals refresh hourly; other figures come from YouTube Studio reports.",
+ snapshotDescription:
+ "Lifetime performance and current audience breakdowns come from YouTube Studio reports.",
+ publicTotal: "Public channel total",
+ audienceTitle: "Audience profile",
audienceDescription:
- "Software developers, system administrators, technology enthusiasts, and young professionals who learn by building.",
- statsEyebrow: "YouTube performance",
- statsTitle: "An active, growing audience beyond follower count.",
- statsDescription:
- "A 28-day view of channel performance. Revenue data is intentionally excluded from this media kit.",
- periodLabel: "Data period",
- audienceEyebrow: "Audience profile",
- audienceHeadline: "68% of viewers are between 18 and 34.",
- audienceBody:
- "A focused community that influences technical decisions, tries new tools, and shows strong interest in technology products.",
+ "69.1% of viewers are between 18 and 34, and 89.2% of the audience watches from Türkiye.",
ageTitle: "Age distribution",
genderTitle: "Gender distribution",
- formatTitle: "Views by content format",
- formatDescription:
- "A strong long-form focus creates room to explain products and brand stories in depth and with the right context.",
- reachTitle: "Content rhythm in the last 28 days",
- reachItems: [
- { label: "New viewers", value: "6.8K" },
- { label: "Regular viewers", value: "801" },
- { label: "Published pieces", value: "9" },
- ],
- reachNote: "5 long-form videos · 4 Shorts",
- partnersEyebrow: "Selected partnerships",
- partnersTitle: "Brands I have built with.",
+ deviceTitle: "Device type",
+ locationsTitle: "Top geographies",
+ activeTitle: "When viewers are on YouTube",
+ activeHours: "4:00 PM–12:00 AM",
+ activeDescription:
+ "The busiest window throughout the week. Weekend activity starts earlier in the afternoon.",
+ activePeriod: "Local time · GMT +03:00 · Last 28 days",
+ male: "Male",
+ female: "Female",
+ partnersTitle: "Brands I have worked with",
partnersDescription:
- "Partnerships grounded in real product experience while protecting the natural flow of the content and audience trust.",
- collaborationTitle: "Partnership formats",
- collaborationItems: [
+ "Selected partnerships based on genuine product experience and preserving the natural flow of the content.",
+ formatsTitle: "Partnership formats",
+ formats: [
"Sponsored YouTube video or native product integration",
"Technical product review and use-case content",
"Short-form video and multi-platform content package",
"Long-term brand ambassadorship and content series",
],
- ctaEyebrow: "Let’s build together",
ctaTitle: "Reach a technology audience through a credible story.",
ctaDescription:
- "Let’s introduce your brand through content that understands the product and speaks clearly to its audience.",
- emailCta: "Send an email",
- youtubeCta: "Open YouTube channel",
- footer: "Poyraz Avsever · Media Kit",
- updated: "Last updated: July 1, 2026",
- derivedNote:
- "Average watch time is an estimate calculated from the shared total watch hours and view count.",
+ "Let’s shape a partnership that understands, experiences, and explains your product clearly.",
+ dataNote:
+ "Performance, demographic, device, and geography breakdowns are lifetime figures. Active hours cover the last 28 days.",
},
} as const;
+function formatCompactNumber(value: number, locale: MediaKitLocale) {
+ return new Intl.NumberFormat(locale === "tr" ? "tr-TR" : "en-US", {
+ notation: "compact",
+ maximumFractionDigits: 1,
+ }).format(value);
+}
+
function AudienceBar({
item,
locale,
max = 100,
+ label,
}: {
item: MediaKitAudienceRow;
locale: MediaKitLocale;
max?: number;
+ label?: string;
}) {
const width = Math.max((item.value / max) * 100, item.value > 0 ? 2 : 0);
- const value = item.value.toLocaleString(locale === "tr" ? "tr-TR" : "en-US", {
- maximumFractionDigits: 1,
- });
+ const formattedValue = item.value.toLocaleString(
+ locale === "tr" ? "tr-TR" : "en-US",
+ { maximumFractionDigits: 1 },
+ );
return (
-
- {item.label}
+
+ {label ?? item.label}
- %{value}
+ %{formattedValue}
);
}
-export function MediaKitContent({ locale }: { locale: MediaKitLocale }) {
- const copy = COPY[locale];
+function BreakdownBar({
+ item,
+ locale,
+ max = 100,
+}: {
+ item: MediaKitBreakdownRow;
+ locale: MediaKitLocale;
+ max?: number;
+}) {
+ const width = Math.max((item.value / max) * 100, item.value > 0 ? 2 : 0);
+ const formattedValue = item.value.toLocaleString(
+ locale === "tr" ? "tr-TR" : "en-US",
+ { maximumFractionDigits: 1 },
+ );
return (
-
-