# Frontend (Next.js) — Site Ayarları Entegrasyonu ## Genel Bakış Backend'den tüm site ayarları **tek bir API çağrısı** ile alınır. Ayarlar gruplara ayrılmış nested JSON formatında gelir. Bu veri layout, header, footer, SEO meta tag'leri, analytics scriptleri ve tüm sabit içerikleri besler. **Sensitive key'ler (API key, secret, password) public endpoint'ten filtrelenmiştir — güvenle kullanabilirsin.** --- ## API Endpoints (Public — Auth Yok) | Method | Endpoint | Açıklama | |--------|----------|----------| | `GET` | `/api/v1/settings` | Tüm public ayarlar (grouped nested JSON) | | `GET` | `/api/v1/settings/{group}` | Tek grup ayarları (flat key-value) | --- ## GET /api/v1/settings — Response Formatı ```json { "general": { "site_name": "Boğaziçi Denizcilik Eğitim Kurumu", "site_tagline": "Türkiye'nin Köklü Denizcilik Okulu", "site_description": "Türkiye'nin köklü denizcilik eğitim kurumu", "logo_light": "/storage/uploads/logo-white.png", "logo_dark": "/storage/uploads/logo-dark.png", "favicon": "/storage/uploads/favicon.png", "apple_touch_icon": null, "announcement_bar_active": "true", "announcement_bar_text": "2026 Kayıtları Devam Ediyor", "announcement_bar_url": "/kayit", "announcement_bar_bg_color": "#1a3e74", "maintenance_mode": "false", "maintenance_message": "Sitemiz bakımdadır, kısa süre içinde geri döneceğiz." }, "contact": { "phone_primary": "+90 532 724 15 32", "phone_secondary": null, "email_info": "bilgi@bogazicidenizcilik.com", "address_full": "Osmanağa Mah. Çuhadarağa Sk. No:21 Kadıköy/İstanbul", "address_short": "Kadıköy, İstanbul", "working_hours_weekday": "Hafta İçi 09:00 – 17:00", "whatsapp_number": null, "whatsapp_message": "Merhaba, bilgi almak istiyorum." }, "maps": { "google_maps_embed_url": null, "google_maps_place_url": null, "latitude": "40.9876", "longitude": "29.0234", "map_zoom_level": "15" }, "social": { "instagram_url": null, "instagram_handle": null, "facebook_url": null, "youtube_url": null, "linkedin_url": null, "tiktok_url": null, "twitter_url": null }, "seo": { "meta_title_suffix": "| Boğaziçi Denizcilik", "meta_title_separator": "|", "default_meta_description": "IMO ve STCW standartlarında denizcilik eğitimi.", "default_meta_keywords": "denizcilik kursu, STCW eğitimi, kaptan kursu", "robots": "index, follow", "canonical_domain": "https://bogazicidenizcilik.com", "og_image": null, "og_type": "website", "og_locale": "tr_TR", "og_site_name": "Boğaziçi Denizcilik", "twitter_card_type": "summary_large_image", "google_site_verification": null }, "analytics": { "google_analytics_id": null, "google_tag_manager_id": null, "facebook_pixel_id": null, "hotjar_id": null, "clarity_id": null, "crisp_website_id": null, "custom_head_scripts": null, "custom_body_scripts": null }, "header": { "navbar_style_default": "transparent", "cta_button_text": "Başvuru Yap", "cta_button_url": "/kayit", "cta_button_color": "#396cab", "show_phone_topbar": "true", "show_email_topbar": "true", "show_address_topbar": "true", "show_hours_topbar": "true", "show_social_navbar": "true" }, "footer": { "footer_description": "Türkiye'nin köklü denizcilik eğitim kurumlarından biri olarak...", "footer_logo": null, "copyright_text": "© 2026 Boğaziçi Denizcilik Eğitim Kurumu. Tüm hakları saklıdır.", "footer_address": "Osmanağa Bahariye Cad. No:31 Kadıköy/İstanbul", "footer_phone": "+90 532 724 15 32", "footer_email": "bilgi@bogazicidenizcilik.com", "footer_bg_color": "#0f2447", "show_social_footer": "true" } } ``` > **Not:** `integrations` grubu public API'den dönmez (tamamı `is_public: false`). `maps.google_maps_api_key` de filtrelenmiştir. --- ## GET /api/v1/settings/{group} — Tek Grup ``` GET /api/v1/settings/contact ``` ```json { "phone_primary": "+90 532 724 15 32", "email_info": "bilgi@bogazicidenizcilik.com", "address_full": "Osmanağa Mah. Çuhadarağa Sk. No:21 Kadıköy/İstanbul", ... } ``` Geçerli group değerleri: `general`, `contact`, `maps`, `social`, `seo`, `analytics`, `header`, `footer` --- ## Önerilen Veri Akışı (Next.js) ### 1. Layout-Level Fetch (Server Component) Ayarlar tüm sayfalarda gerekli (header, footer, SEO). Layout'ta bir kez fetch edip context/provider ile dağıt: ```tsx // app/layout.tsx async function getSettings() { const res = await fetch(`${process.env.API_URL}/api/v1/settings`, { next: { revalidate: 300 } // 5 dk cache }); return res.json(); } export default async function RootLayout({ children }) { const settings = await getSettings(); return ( {/* Analytics Scripts */} {settings.analytics?.google_tag_manager_id && ( )} {settings.analytics?.custom_head_scripts && (
)}
{children}