diff --git a/app/(site)/cerez-politikasi/page.tsx b/app/(site)/cerez-politikasi/page.tsx new file mode 100644 index 0000000..863aa2f --- /dev/null +++ b/app/(site)/cerez-politikasi/page.tsx @@ -0,0 +1,138 @@ +import type { Metadata } from "next"; +import { SectionTitle } from "@/components/section-title"; +import { CookieSettingsButton } from "@/components/cookie-settings-button"; +import { getSiteSettings } from "@/lib/data"; +import { siteConfig } from "@/lib/site-config"; +import { buildMetadata } from "@/lib/seo"; + +export async function generateMetadata(): Promise { + return buildMetadata("/cerez-politikasi", { + title: "Çerez Politikası", + description: + "Kovak Yazılım çerez politikası — KVKK ve GDPR uyumlu çerez kullanımı.", + }); +} + +const CATEGORIES = [ + { + title: "Zorunlu çerezler", + description: + "Web sitesinin temel işlevleri için gereklidir. Oturum yönetimi, güvenlik, form gönderimi gibi temel işlemler bu çerezler olmadan çalışamaz. Devre dışı bırakılamaz.", + examples: ["kovak_session", "kovak_consent_v1"], + }, + { + title: "Analitik çerezler", + description: + "Web sitesi ziyaretçilerinin sitenizi nasıl kullandığını anlamamıza yardımcı olur. Toplanan veriler anonimdir ve istatistiksel amaçlıdır.", + examples: ["_ga", "_gid", "_gat"], + }, + { + title: "Reklam çerezleri", + description: + "Sizinle ilgili olabilecek reklamların gösterilmesi ve reklam kampanyalarının performansının ölçülmesi amacıyla kullanılır.", + examples: ["_gcl_au", "_fbp", "IDE", "ads/ga-audiences"], + }, + { + title: "Tercih çerezleri", + description: + "Dil, bölge veya görünüm tercihlerinizi hatırlamak için kullanılır.", + examples: ["NID", "lang", "theme"], + }, +]; + +export default async function CookiePolicyPage() { + const s = await getSiteSettings(); + const email = s?.contact_email ?? siteConfig.contact.email; + const phone = s?.contact_phone ?? siteConfig.contact.phone; + + return ( +
+ + +
+

+ Çerez tercihlerinizi istediğiniz zaman değiştirebilirsiniz. +

+ +
+ +
+

Çerez Nedir?

+

+ Çerezler (cookies), ziyaret ettiğiniz web siteleri tarafından + tarayıcınız aracılığıyla cihazınıza kaydedilen küçük metin + dosyalarıdır. Bu dosyalar sayesinde site, sizi sonraki ziyaretlerde + tanır ve deneyiminizi kişiselleştirir. +

+ +

Hangi Çerezleri Kullanıyoruz?

+

+ Sitemizde 4 farklı kategoride çerez kullanılmaktadır. Zorunlu çerezler + dışındakileri çerez ayarları üzerinden devre dışı bırakabilirsiniz. +

+ + {CATEGORIES.map((c) => ( +
+

+ {c.title} +

+

+ {c.description} +

+

+ Örnek çerezler:{" "} + {c.examples.map((e, i) => ( + + + {e} + + {i < c.examples.length - 1 && ", "} + + ))} +

+
+ ))} + +

Çerezleri Nasıl Devre Dışı Bırakabilirim?

+

+ Tarayıcı ayarlarınızdan tüm çerezleri silebilir veya engelleyebilirsiniz. + Ancak zorunlu çerezler devre dışı bırakıldığında sitemizin bazı bölümleri + çalışmayabilir. Tercihlerinizi yönetmek için sayfanın altındaki "Çerez + ayarları" butonunu kullanabilirsiniz. +

+ +

KVKK Kapsamında Haklarınız

+

+ 6698 sayılı Kişisel Verilerin Korunması Kanunu (KVKK) kapsamında + aşağıdaki haklara sahipsiniz: +

+
    +
  • Kişisel verilerinizin işlenip işlenmediğini öğrenme
  • +
  • İşlenmişse buna ilişkin bilgi talep etme
  • +
  • İşlenme amacını ve amacına uygun kullanılıp kullanılmadığını öğrenme
  • +
  • Eksik veya yanlış işlenmiş verilerin düzeltilmesini isteme
  • +
  • Silinmesini veya yok edilmesini isteme
  • +
  • Kanuna aykırı işleme sonucu zarara uğramışsanız tazminat talep etme
  • +
+ +

İletişim

+

+ Çerez politikamız veya kişisel verilerinizin işlenmesi hakkında soru + veya talepleriniz için bizimle iletişime geçebilirsiniz: +

+
    +
  • + E-posta: {email} +
  • +
  • Telefon: {phone}
  • +
  • Adres: {s?.contact_address ?? siteConfig.contact.address}
  • +
+
+
+ ); +} diff --git a/app/layout.tsx b/app/layout.tsx index 83479fc..6356b33 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -2,6 +2,9 @@ import type { Metadata } from "next"; 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 geistSans = Geist({ variable: "--font-geist-sans", @@ -29,16 +32,28 @@ export const metadata: Metadata = { icons: { icon: "/logo.png" }, }; -export default function RootLayout({ +export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode }>) { + let gtmId: string | null = null; + try { + const seo = await getSeoSettings(); + gtmId = seo?.gtm_id ?? null; + } catch { + gtmId = null; + } + return ( + + + {children} + ); diff --git a/components/consent-init.tsx b/components/consent-init.tsx new file mode 100644 index 0000000..d750b17 --- /dev/null +++ b/components/consent-init.tsx @@ -0,0 +1,52 @@ +import Script from "next/script"; + +/** + * Google Consent Mode v2 — defaults set to "denied" before any tag loads. + * After the user makes a choice, CookieBanner calls gtag('consent','update', ...). + * + * GTM/GA inject sadece site_settings.gtm_id doluysa yapılır. + */ +export function ConsentInit({ gtmId }: { gtmId?: string | null }) { + return ( + <> + + + {gtmId && ( + <> + +