🏗️ Widget Management Sistemi

Mimari Analiz & İyileştirme Önerileri

📅 Tarih: 2025-12-04
🎯 Kapsam: Widget Management Mimarisi (Tenant-agnostic)
📊 Analiz Tipi: Mimari Eksiklikler & Öneriler
🔍 Odak: Widget Türleri, Schema Sistemi, Lifecycle Management

📋 Yönetici Özeti

Mevcut Widget Management sistemi 3 widget türü (MODULE, FILE, CUSTOM) ve 2 schema tipi (settings, items) ile çalışıyor. Temel işlevsellik var ancak 7 kritik eksiklik tespit edildi:

  1. Widget Versioning yok (güncelleme riski)
  2. Preview/Draft sistemi yok (production'da test)
  3. Conditional Logic yok (dinamik davranış eksik)
  4. Widget Dependencies yok (çakışma riski)
  5. Validation zayıf (hatalı veri girişi)
  6. Widget Variants yok (responsive yetersiz)
  7. Analytics yok (kullanım takibi yok)

1️⃣ Mevcut Sistem Analizi

1.1. Widget Türleri (Mevcut: 3)

Tür Açıklama Veri Kaynağı Kullanım Durum
MODULE Backend modülden veri çeker Database (Blog, Product vb.) Blog listesi, Ürün kartları Mevcut
FILE Blade view dosyasından render View file + schema Hero, Form, Layout Mevcut
CUSTOM Kullanıcı HTML/CSS/JS Widget içi kod Özel banner, Embed Mevcut

✅ Mevcut Sistemin Güçlü Yanları

1.2. Schema Sistemi (Mevcut: 2)

Schema Tipi Kullanım has_items Örnek
Settings Widget genel ayarları 0 veya 1 Renk, başlık, buton metni
Items Döngüde render edilecek veriler 1 (zorunlu) Slider slides, Gallery images

✅ Schema Sisteminin Güçlü Yanları

2️⃣ Kritik Eksiklikler

2.1. Widget Versioning Sistemi YOK

❌ Sorun

Widget güncellendiğinde:

✅ Önerilen Çözüm: Semantic Versioning

widgets tablosu:
- version (string): "1.2.3"
- is_published (boolean)
- published_at (timestamp)

widget_versions tablosu:
- id
- widget_id
- version
- settings_schema (snapshot)
- item_schema (snapshot)
- content_html/css/js (snapshot)
- created_at
- created_by

Mantık:
- Major (1.x.x): Breaking changes
- Minor (x.1.x): Yeni özellikler
- Patch (x.x.1): Bug fixes

Faydası: Rollback, version history, güvenli güncelleme

2.2. Preview/Draft Sistemi YOK

❌ Sorun

Widget değişikliği yaparken:

✅ Önerilen Çözüm: Draft/Published Workflow

Durum makinesi:

DRAFT → REVIEW → PUBLISHED → ARCHIVED
  ↓        ↓        ↓
  ←────────────────────────→
      (Geri çekme)

widgets tablosu:
- status: enum('draft', 'review', 'published', 'archived')
- draft_data (JSON): Taslak değişiklikler
- published_data (JSON): Canlı versiyon
- preview_url: Önizleme linki

Özellikler:
- Draft modda değişiklikler sadece editör görür
- Preview URL ile paylaşılabilir önizleme
- Review süreci (approval workflow)
- Publish butonu ile canlıya alma

Faydası: Güvenli geliştirme, test ortamı, approval süreci

2.3. Conditional Logic (Koşullu Görünüm) YOK

❌ Sorun

Widget'lar her zaman aynı görünüyor:

✅ Önerilen Çözüm: Display Rules

widget_display_rules tablosu:
- widget_id
- rule_type: enum('user', 'time', 'device', 'url', 'custom')
- conditions (JSON):
  {
    "user_logged_in": true,
    "user_role": ["admin", "editor"],
    "time_range": {"start": "09:00", "end": "17:00"},
    "device": ["desktop", "tablet"],
    "url_contains": "/products"
  }
- action: enum('show', 'hide', 'replace')

Settings Schema içinde:
{
  "field_name": {
    "type": "text",
    "show_if": {
      "another_field": "value"
    }
  }
}

Faydası: Dinamik içerik, personalization, better UX

2.4. Widget Dependencies (Bağımlılıklar) YOK

❌ Sorun

Widget'lar arası bağımlılıklar yönetilmiyor:

✅ Önerilen Çözüm: Dependency Management

widget_dependencies tablosu:
- widget_id
- dependency_type: enum('widget', 'library', 'css', 'js')
- dependency_name: string
- version: string (opsiyonel)
- is_required: boolean

Örnek:
Widget: "Advanced Slider"
Dependencies:
- library: "jQuery" (>= 3.6.0)
- library: "Swiper.js" (>= 8.0.0)
- css: "swiper.min.css"

Sistem kontrol eder:
1. Gerekli kütüphaneler yüklü mü?
2. Versiyon uyumlu mu?
3. Çakışan dependency var mı?
4. Asset'ları sadece 1 kez yükle (deduplication)

Faydası: Hata önleme, performans, güvenli silme

2.5. Validation Sistemi Zayıf

❌ Sorun

Schema validation yetersiz:

✅ Önerilen Çözüm: Advanced Validation

Settings Schema örneği:
{
  "email": {
    "type": "email",
    "label": "Email Adresi",
    "required": true,
    "validation": {
      "format": "email",
      "error_message": "Geçerli email girin"
    }
  },
  "age": {
    "type": "number",
    "validation": {
      "min": 18,
      "max": 100,
      "error_message": "Yaş 18-100 arasında olmalı"
    }
  },
  "phone": {
    "type": "text",
    "validation": {
      "pattern": "^\\+90[0-9]{10}$",
      "error_message": "Format: +905xxxxxxxxx"
    }
  },
  "url": {
    "type": "url",
    "validation": {
      "allowed_domains": ["example.com", "test.com"],
      "protocol": "https"
    }
  }
}

Faydası: Veri kalitesi, güvenlik, better UX

2.6. Widget Variants (Varyantlar) YOK

❌ Sorun

Aynı widget'ın farklı görünümleri yok:

✅ Önerilen Çözüm: Widget Variants System

widget_variants tablosu:
- widget_id
- variant_name: string (örn: "mobile", "dark-mode", "christmas")
- variant_type: enum('device', 'theme', 'locale', 'season')
- settings_override (JSON): Sadece farklı olan ayarlar
- is_default: boolean

Kullanım:
// Base widget settings
{
  "title": "Welcome",
  "font_size": "32px",
  "color": "#000"
}

// Mobile variant (override)
{
  "font_size": "24px" // Sadece değişen
}

// Dark mode variant
{
  "color": "#fff",
  "background": "#000"
}

Sistem otomatik birleştirir (merge)

Faydası: Responsive design, theming, localization

2.7. Analytics & Usage Tracking YOK

❌ Sorun

Widget kullanım istatistikleri yok:

✅ Önerilen Çözüm: Widget Analytics

widget_analytics tablosu:
- widget_id
- metric_type: enum('view', 'click', 'conversion', 'error')
- metric_value: integer
- context (JSON): {page_url, user_id, device, etc.}
- created_at

widget_usage tablosu:
- widget_id
- used_in_pages: integer
- total_views: integer
- total_clicks: integer
- avg_render_time: float (ms)
- last_used_at: timestamp

Dashboard metrikleri:
- En çok kullanılan widget'lar
- En iyi performans gösteren widget'lar
- Hiç kullanılmayan widget'lar (silinebilir)
- Widget render süreleri (performance)

Faydası: Data-driven decisions, optimization, cleanup

3️⃣ Önerilen Yeni Widget Türleri

Mevcut (3 tür)

  • MODULE
  • FILE
  • CUSTOM

Önerilen (7 tür)

  • MODULE Mevcut
  • FILE Mevcut
  • CUSTOM Mevcut
  • API Yeni
  • IFRAME Yeni
  • DYNAMIC Yeni
  • LAYOUT Yeni

API Widget Yeni

Kullanım: External API'den veri çekip render eder

Örnek:

  • Weather widget (OpenWeather API)
  • Currency rates (Exchange rate API)
  • Social media feed (Twitter/Instagram API)
  • Stock prices

Schema:

{
  "api_url": "https://api.example.com",
  "api_key": "...",
  "method": "GET",
  "cache_duration": 300,
  "response_mapping": {...}
}

IFRAME Widget Yeni

Kullanım: Güvenli iframe embed

Örnek:

  • YouTube video
  • Google Maps
  • Typeform embed
  • 3rd party tools

Schema:

{
  "iframe_url": "...",
  "width": "100%",
  "height": "400px",
  "sandbox": ["allow-scripts"],
  "allow": ["autoplay"]
}

DYNAMIC Widget Yeni

Kullanım: Real-time veri (WebSocket/SSE)

Örnek:

  • Live chat widget
  • Real-time notifications
  • Live stock ticker
  • User activity feed

Schema:

{
  "websocket_url": "wss://...",
  "event_name": "new_message",
  "auto_update": true,
  "update_interval": null
}

LAYOUT Widget Yeni

Kullanım: Container widget (içinde widget barındırır)

Örnek:

  • Tabs (her tab içinde widget)
  • Accordion (her panel içinde widget)
  • Grid layout (her cell widget)
  • Modal (içinde widget)

Schema:

{
  "layout_type": "tabs",
  "children": [
    {
      "tab_name": "Tab 1",
      "widget_id": 123
    }
  ]
}

4️⃣ Önerilen Yeni Schema Tipleri

Mevcut (2 schema)

  • Settings: Widget ayarları
  • Items: Döngü verileri

Önerilen (5 schema)

  • Settings Mevcut
  • Items Mevcut
  • Actions Yeni
  • Events Yeni
  • State Yeni

4.1. Actions Schema (Etkileşimler)

Actions: Widget'ın yapabileceği işlemler

{
  "on_click": {
    "action": "navigate",
    "url": "/products",
    "target": "_blank"
  },
  "on_submit": {
    "action": "ajax_submit",
    "endpoint": "/api/contact",
    "method": "POST",
    "success_message": "Gönderildi!"
  },
  "on_error": {
    "action": "show_notification",
    "message": "Hata oluştu",
    "type": "error"
  }
}

Kullanım: Button click, form submit, image click, hover vb.

4.2. Events Schema (Olaylar)

Events: Widget'ın tetikleyeceği/dinleyeceği olaylar

{
  "emit_events": [
    {
      "event_name": "product_added_to_cart",
      "trigger": "on_button_click",
      "payload": {
        "product_id": "{{item.id}}",
        "quantity": 1
      }
    }
  ],
  "listen_events": [
    {
      "event_name": "cart_updated",
      "action": "refresh_widget"
    }
  ]
}

Kullanım: Widget'lar arası iletişim (Shopping cart + Product card)

4.3. State Schema (Durum Yönetimi)

State: Widget'ın runtime durumu

{
  "initial_state": {
    "is_open": false,
    "current_slide": 0,
    "items_loaded": false
  },
  "state_persistence": "session", // none, session, local
  "state_sync": true // Tüm widget instance'ları sync olsun mu?
}

Kullanım: Accordion açık/kapalı, Slider pozisyonu, Form doldurulmuş mu

5️⃣ Öncelik Sıralaması

Özellik Öncelik Etki Zorluk Süre
Validation Sistemi YÜKSEK Veri kalitesi, güvenlik Düşük 2-3 gün
Preview/Draft YÜKSEK Güvenli geliştirme Orta 4-5 gün
Widget Versioning ORTA Rollback, güvenlik Orta 5-7 gün
Actions Schema ORTA Etkileşim zenginliği Orta 3-4 gün
Widget Variants ORTA Responsive, theming Orta-Yüksek 1 hafta
API Widget Type DÜŞÜK External entegrasyon Düşük 2-3 gün
Conditional Logic DÜŞÜK Dinamik davranış Yüksek 1-2 hafta
Analytics DÜŞÜK Data-driven decisions Orta 4-5 gün
Widget Dependencies DÜŞÜK Hata önleme Orta 3-4 gün

6️⃣ Kıyaslama: Diğer Sistemler

WordPress (Gutenberg Blocks)

✅ Güçlü Yanları

Webflow

✅ Güçlü Yanları

Notion (Blocks)

✅ Güçlü Yanları

7️⃣ Sonuç & Öneriler

🎯 Hemen Yapılması Gerekenler

  1. Validation Sistemi: Schema validation rules ekle (hızlı, etkili)
  2. Preview Modu: Draft/Published ayrımı (güvenlik için kritik)
  3. Actions Schema: on_click, on_submit gibi temel etkileşimler

📅 Orta Vadede Yapılabilir

  1. Widget Versioning: Güvenli güncelleme için
  2. Widget Variants: Responsive ve theming için
  3. API Widget Type: External data için

🔮 Gelecek İçin

  1. Conditional Logic: Karmaşık ama güçlü
  2. Analytics: Data-driven optimizasyon
  3. Widget Marketplace: Community widgets

🤖 Claude AI - Widget Management Mimari Analizi

2025-12-04