# Üst Manşet Haber Portalı — Geliştirme Kuralları

Bu doküman, projede görev alacak tüm geliştiricilerin ve yapay zeka asistanlarının (Antigravity) uyması gereken kodlama standartlarını, isimlendirme kurallarını ve güvenlik politikalarını tanımlar.

---

## 1. Kod ve Veritabanı İsimlendirme Standartları

Projede dil tutarlılığı sağlamak amacıyla katmanlar kesin çizgilerle ayrılmıştır:

1. **Katman Dilleri**:
   - **Kod Katmanı**: Sınıf, metot, değişken, sabit ve yorum satırları dahil olmak üzere tamamen İngilizce olacaktır.
   - **Veritabanı Katmanı**: Tablo isimleri, kolon isimleri, indeksler ve yabancı anahtar (foreign key) tanımları tamamen İngilizce olacaktır.
   - **Kullanıcı Arayüzü (UI) ve Mesajlar**: Kullanıcının gördüğü her türlü metin, hata mesajları, validasyon uyarıları ve yönetim paneli etiketleri Türkçe olacaktır.

2. **Veritabanı Kuralları**:
   - Tablo isimleri Laravel standartlarına uygun olarak **çoğul İngilizce** olmalıdır (Örn: `articles`, `categories`, `authors`).
   - Kolon isimleri **snake_case İngilizce** olmalıdır (Örn: `title`, `published_at`, `category_id`).
   - Laravel'in sihirli ilişkilerinden ve otomatik eşleşmelerinden yararlanmak amacıyla varsayılan isimlendirme standartlarının dışına çıkılmamalıdır.

3. **Kod Kuralları**:
   - Kod içinde Türkçe sınıf, metot ve değişken isimleri kesinlikle kullanılmayacaktır.
   - **Doğru**: `public function getActiveArticles() { ... }`
   - **Yanlış**: `public function getAktifHaberler() { ... }` veya `public function getActiveHaberler() { ... }`

---

## 2. Yazılım Tasarım ve Kodlama Kuralları

- **Thin Controller, Fat Service**:
  - Controller sınıfları iş mantığıyla (business logic) şişirilmeyecektir. İş mantığı, bağımsız ve tekrar kullanılabilir **Service** veya **Action** sınıflarına taşınacaktır.
- **Doğrulama (Validation)**:
  - Form doğrulamalarında controller içinde inline doğrulama yerine `Form Request` sınıfları kullanılmalıdır. Livewire bileşenlerinde ise Livewire'ın kendi reaktif validation kuralları uygulanmalıdır.
  - Hata mesajları Türkçe olarak tanımlanacaktır.
- **Yetkilendirme (Authorization)**:
  - Yetkilendirme işlemleri sadece kullanıcı arayüzünde (Blade/Livewire) gizleme/gösterme şeklinde bırakılmamalı; backend (Controller, API, Livewire, Laravel Policy/Gate) seviyesinde de kesinlikle doğrulanmalıdır.
- **Kritik İşlemler ve Denetim Günlüğü (Audit Log)**:
  - Haber silme, durum değiştirme, kullanıcı rolleri güncelleme gibi işlemler arka planda audit log mekanizması ile kayıt altına alınacaktır.

---

## 3. Frontend ve Tasarım Kuralları

- **Arayüz Kodları**:
  - **Inline CSS kullanılmayacaktır**. Stil tanımlamaları CSS dosyalarında veya utility sınıflarında (gerektiğinde) toplanmalıdır.
  - **Inline JavaScript kullanılmayacaktır**. Dinamik davranışlar harici dosyalarda veya Alpine.js direktifleri içinde yapılandırılmalıdır.
- **Kullanıcı Etkileşimi**:
  - Tarayıcının varsayılan `alert()`, `confirm()` veya `prompt()` fonksiyonları yerine, daha modern bir deneyim sunan **SweetAlert2** kütüphanesi kullanılacaktır.
- **Responsive Tasarım**:
  - Mobil, tablet ve masaüstü arayüzleri ayrı ayrı tasarlanıp test edilecektir. Gazete tipografisine ve net içerik hiyerarşisine dikkat edilecektir.
- **Google Ads & CLS Önlemleri**:
  - Reklam alanlarının geç yüklenmesinden kaynaklanan Cumulative Layout Shift (CLS) sorunlarını önlemek amacıyla reklam alanları için şablonlarda sabit yükseklikler (rezervasyon alanları) tanımlanacaktır.

---

## 4. Ortam Yönetimi ve Güvenlik

- **Local ve Production Ayrımı**:
  - Local ortamda `APP_DEBUG=true` olmalı ve detaylı hata gösterimi açık kalmalıdır.
  - Canlı sunucuda (production) ise `APP_DEBUG=false` ve `APP_ENV=production` yapılandırması kesinlikle zorunludur.
- **Hassas Bilgiler**:
  - `.env` içeriği, şifreler, API anahtarları ve veritabanı kimlik bilgileri kesinlikle Git deposuna eklenmeyecektir (check-ignore ile doğrulanmıştır).
