Basit Anlatim (Herkes Icin)
Bu Sistem Ne Yapar?
Blog AI Draft sistemi, yapay zeka kullanarak otomatik blog yazilari uretir. Admin panelden bir butona basarak 25 adet blog taslagi (basliklari, alt baslik yapisi, SEO anahtar kelimeleri) olusturulur. Bunlardan begenilenleri secip "Blog Yap" dendiginde, yapay zeka her taslaktan 2000+ kelimelik profesyonel bir blog yazisi yazar, uzerine Leonardo AI ile gorseli de uretir.
Nasil Calisiyor? (3 Adim)
Taslak Uretimi
Admin "Taslak Uret" butonuna tikladiginda, AI sektorunuze uygun 25 adet blog konusu onerir. Her oneri baslik, alt basliklar, SEO anahtar kelimeleri ve meta aciklama icerir.
Secim & Onay
Admin olusturdugu taslaklari inceler, begenmediklerini eleyip istediklerini secer. Sadece secilen taslaklar blog yazisina donusturulur.
Blog Yazimi + Gorsel
Secilen her taslak icin AI, 2000+ kelimelik SEO uyumlu blog yazar. Ardindan Leonardo AI ile konuya uygun gorsel otomatik uretilir. Yazilar direkt yayina alinir.
Muzibu Nerede Devreye Giriyor?
- Firma adi min 3 kez gecer: Girisin ilk 200 kelimesinde, orta bolumde ve sonuc paragrafinda "Muzibu" ismi dogal sekilde kullanilir.
- Platform verileri: "100.000+ telifsiz sarki", "2.000+ playlist", "~100 radyo kanali" gibi gercek veriler yazilara serpilir.
- Sektore ozel icerik: Kafe, restoran, otel, magazaya ozel muzik onerileri uretilir.
- CTA bolumu: Her yazinin sonunda Muzibu'ya yonlendiren iletisim bilgili cagri butonu eklenir.
- Kurum ismi yasagi: MESAM, MSG gibi kurum adlari kullanilmaz, yerine "telif hakki kuruluslari" gibi genel ifadeler tercih edilir.
Teknik Detaylar (Gelistiriciler Icin)
Mimari Genel Bakis
Dosya Yapisi
Modules/Blog/
├── App/
│ ├── Http/Livewire/Admin/
│ │ └── BlogAiDraftComponent.php # Admin UI
│ ├── Jobs/
│ │ ├── GenerateDraftsJob.php # Taslak job
│ │ └── GenerateBlogFromDraftJob.php # Blog job
│ ├── Models/
│ │ └── BlogAIDraft.php # Draft model
│ └── Services/
│ ├── CategoryBasedDraftGenerator # Taslak uretici
│ ├── BlogAIContentWriter.php # Blog yazici
│ ├── BlogAIBatchProcessor.php # Batch tracker
│ └── TenantPrompts/
│ ├── TenantPromptLoader.php # Dinamik loader
│ ├── DefaultPrompts.php # Fallback
│ └── Tenants/
│ └── Tenant1001Prompts.php# MUZIBU OZEL
├── database/migrations/tenant/
│ └── create_blog_ai_drafts_table.php
└── routes/admin.php # /admin/blog/ai-drafts
Teknoloji Yigini
| AI Provider | OpenAI (gpt-4o-mini) |
| Gorsel AI | Leonardo AI |
| Queue | blog-ai (Redis) |
| Admin UI | Livewire + Alpine.js |
| Cache | Redis (batch status) |
| Database | Tenant-isolated |
| Temperature | 0.7 (Muzibu - kreatif) |
Is Akisi Diyagrami
Faz 1: Taslak Uretimi
| Credit kontrolu (1.0 kredi)
--> GenerateDraftsJob (queue: blog-ai, timeout: 900s)
--> CategoryBasedDraftGenerator::generateDrafts()
| 5 kategori grubu olustur (dinamik)
| Her grup icin OpenAI cagir (5 taslak)
--> BlogAIDraft::create() x 25
<-- Frontend polling (3-5s) ile taslaklar goruntulenir
Faz 2: Blog Yazimi
| Credit kontrolu (secilen x 1.0)
--> BlogAIBatchProcessor::procesSelectedDrafts()
| Cache'te batch status olustur
--> GenerateBlogFromDraftJob x N (unique lock: 30dk)
| Slug/title duplicate kontrolu (%95+)
--> BlogAIContentWriter::generateBlogFromDraft()
| AI ile 2000+ kelime icerik uret
| Blog::create() + Kategori assign
| SEO settings olustur
--> Leonardo AI gorsel uret
<-- Progress bar ile takip (3s polling)
v2 Guncelleme: Muzibu Baglantisi Guclendirildi YENi
Onceki Sorunlar
CategoryBasedDraftGenerator::buildSimplePrompt()tamamen Ixtif icin hard-coded idi (forklift, transpalet yaziyordu)buildGeneralGroups()genel Ixtif kategorileri donuyordu (Urun Rehberleri, Bakim vb.)extractKeywords()"elektrikli X", "manuel X" formatinda keyword uretiyordu- Draft prompt'ta Muzibu baglantisi zorunlu degildi — genel muzik konulari uretilebiliyordu
Yapilan Duzeltmeler (3 Dosya)
1. CategoryBasedDraftGenerator.php — buildSimplePrompt()
Artik TenantPromptLoader uzerinden tenant'a ozel prompt yukluyor. Ixtif prompt'u sadece fallback olarak kaldi.
// ONCE: Hard-coded Ixtif prompt
$systemPrompt = "Sen Ixtif firmasi icin..."
// SIMDI: Tenant-aware prompt
$loader = app(TenantPromptLoader::class);
$tenantDraftPrompt = $loader->getDraftPrompt();
// Muzibu icin: Tenant1001Prompts::getDraftPrompt()
// + Grup context inject edilir
2. CategoryBasedDraftGenerator.php — buildGeneralGroups() + extractKeywords()
Muzibu icin muzik odakli 5 grup ve muzik odakli keyword uretimi eklendi.
// Muzibu Gruplari (5x5 = 25 taslak):
1. Sektore Ozel Muzik Rehberleri
2. Telif Hakki ve Yasal Muzik Kullanimi
3. Muzigin Isletmeye Etkisi
4. Kurumsal Muzik Yonetimi
5. Muzik Sistemi Kurulum ve Optimizasyon
// Keyword ornegi (eski vs yeni):
ONCE: "elektrikli kafe", "manuel kafe"
SIMDI: "kafe muzigi", "telifsiz kafe muzigi"
3. Tenant1001Prompts.php — getDraftPrompt()
Her basligin Muzibu ile dogal baglanti kurmasi artik ZORUNLU.
FORMUL: [Sektor/Isletme Problemi] + [Muzik Cozumu] = Muzibu'ya dogal gecis
IYIN ORNEKLER:
"Kafe Muzigi Secimi: Musteri Deneyimini Artirmanin 7 Yolu"
"Isletmenizde Telif Sorunuyla Karsilasmamak Icin Bilmeniz Gerekenler"
"Cok Subeli Isletmelerde Muzik Standardizasyonu Nasil Saglanir?"
KOTU ORNEKLER (YASAK):
"Muzigin Tarihcesi" (isletme baglantisi yok)
"En Iyi 10 Turk Pop Sarkisi" (Muzibu cozum degil)
"Gitar Calmayi Ogrenin" (bireysel, B2B degil)
Muzibu Prompt Kurallari Tenant1001Prompts.php
Yapilacaklar
- 1. "Muzibu" firma adi minimum 3 kez kullanilmali
- 2. Ilk 200 kelimede + Orta bolumde + Sonuc/CTA'da
- 3. Platform verileri varyasyonlu kullanilmali (100.000+ sarki / yuz binden fazla parca / devasa kutuphanemiz)
- 4. Her yazinin sonunda iletisim bilgili CTA
- 5. Sektore ozel icerik (kafe, restoran, otel, magaza vb.)
- 6. Zamansiz ifadeler: "gunumuzde", "modern isletmelerde"
- 7. E-E-A-T uyumlu, profesyonel ama samimi ton
Yasaklar
- 1. MESAM, MSG, MUYORBIR, MUYAP isimleri YASAK
- 2. Spesifik yillar: "2023'te", "2024 icin" YASAK
- 3. Spesifik fiyatlar: "ayda 299 TL" YASAK
- 4. Rakip platform isimleri YASAK
Donusumler
- "MESAM" → "telif hakki kuruluslari"
- "2024'te" → "gunumuzde"
- "299 TL" → "uygun fiyatli"
Ornek CTA Blogu (Her yazinin sonunda)
<h2>Muzibu ile Farki Yasayin</h2>
<p>Muzibu olarak, isletmenizin muzik ihtiyacini karsiliyoruz...</p>
<ul>
<li><strong>Telefon:</strong> {contact_info.phone}</li>
<li><strong>Email:</strong> {contact_info.email}</li>
<li><strong>Web:</strong> {company_info.website}</li>
</ul>
<p>Hemen ucretsiz deneyin!</p>
Platform Veri Varyasyonlari
Tekrarlayan icerikleri onlemek icin, platform verileri farkli ifadelerle kullanilir:
| Veri | Varyasyon 1 | Varyasyon 2 | Varyasyon 3 |
|---|---|---|---|
| Sarki sayisi | 100.000+ telifsiz muzik | yuz binden fazla ozgun parca | Turkiye'nin en genis telifsiz arsivi |
| Playlist sayisi | 2.000+ hazir calma listesi | binlerce hazir playlist | profesyonelce hazirlanmis playlistler |
| Radyo | ~100 radyo kanali | kesintisiz radyo yayinlari | onlarca tematik kanal |
| Yonetim | merkezi cok subeli yonetim | tek noktadan tum subeler | bulut tabanli yonetim paneli |
Tenant Context (Muzibu - 1001)
'focus' => 'music_for_business'
'industry' => 'B2B Telifsiz Muzik Hizmeti'
'target_audience' => 'Isletme sahipleri, magaza
mudurleri, otel/restoran yoneticileri'
'platform_data' => [
'songs' => '100.000+',
'playlists' => '2.000+',
'albums' => '2.000+',
'radios' => '98',
'sectors' => 'Kafe, Restoran, Otel,
Magaza, AVM, Hastane, Spor Salonu...'
]
Ozellikler
Leonardo AI Gorsel Uretimi
Blog basligindan otomatik olarak sektor, duygu ve stil tespit edilerek gorsel uretilir.
Mekan Tespiti
- "kafe" → cozy modern cafe
- "restoran" → upscale restaurant
- "otel" → luxury hotel lobby
- "magaza" → modern retail store
- "kuafor" → stylish hair salon
- "spor" → energetic fitness center
Duygu/Atmosfer
- Negatif → worried, tense, dramatic
- Bilimsel → clean, analytical
- Kurumsal → elegant, premium
- Varsayilan → warm, inviting, positive
Gorsel Stili
- Bilimsel → flat design / infographic
- Yasal → cinematic photography
- Rehber → foto + ilustrasyon
- Varsayilan → warm photography
Kredi Yonetimi
| Islem | Maliyet | Aciklama |
|---|---|---|
| Taslak Uretimi | 1.0 kredi | 25 taslak = 1 kredi |
| Blog Yazimi | 1.0 kredi | Her blog = 1 kredi |
| Ornek Senaryo | 11 kredi | 25 taslak + 10 blog |
Helper Fonksiyonlari
ai_can_use_credits(1.0) // Yeterli kredi var mi?
ai_use_credits(1.0) // Kredi kullan
ai_get_credit_balance() // Kalan bakiye
Database Semasi
blog_ai_drafts TENANT DB
| Kolon | Tip | Aciklama |
|---|---|---|
| id | bigint PK | Primary key |
| topic_keyword | string | Blog basligi / ana anahtar kelime |
| category_suggestions | json | Onerilen kategori ID'leri [1, 2, 3] |
| seo_keywords | json | SEO anahtar kelimeleri |
| outline | json | H2/H3 yapisal tasarim |
| meta_description | text | 150-160 karakter meta |
| is_selected | boolean | Admin secti mi? |
| is_generated | boolean | Blog yazildi mi? |
| generated_blog_id | FK → blogs | Uretilen blog ID'si |
Guvenlik & Korunmalar
Duplicate Onleme
- Taslak: Son 20 baslikla karsilastirma
- Blog: Slug benzerlik %95+ = duplicate
- Blog: Title benzerlik %95+ = duplicate
Concurrency
- Unique lock: 30 dk / draft+tenant
- Retry: 3 kez, 60s backoff
- Job timeout: 900s (15 dk)
Konfigurasyonlar
config/ai.php
'enabled' => true
'default_provider' => 'openai'
'default_model' => 'gpt-4o-mini'
config/ai-tenants.php (1001)
'temperature' => 0.7 // kreatif
'module_availability' => [
'music' => [1001],
'blog' => [1, 2, 3, 1001]
]
Tum Bilesenler
| Bilesen | Dosya | Gorev |
|---|---|---|
| Admin UI | BlogAiDraftComponent.php | Taslak uretim/secim arayuzu |
| Taslak Job | GenerateDraftsJob.php | 25 taslak uretimi (queue) |
| Kategori Generator | CategoryBasedDraftGenerator.php | Dinamik kategori bazli taslak |
| Blog Job | GenerateBlogFromDraftJob.php | Taslaktan blog yazimi (queue) |
| Blog Writer | BlogAIContentWriter.php | Icerik uretimi + Leonardo AI |
| Batch Tracker | BlogAIBatchProcessor.php | Toplu islem progress takibi |
| Prompt Loader | TenantPromptLoader.php | Tenant-specific prompt yukleme |
| Default Prompts | DefaultPrompts.php | Fallback prompt'lar |
| Muzibu Prompts | Tenant1001Prompts.php | Muzibu ozel prompt + marka kurallari |
| Draft Model | BlogAIDraft.php | Taslak veri modeli |
| Credit Helper | CreditHelpers.php | Kredi yonetim fonksiyonlari |