🚀 Yeni Yaklaşım: Claude TodoWrite Sistemi
Eski: JSON Manifest dosyası oluştur → Panel'e import et
Yeni: Claude TodoWrite tool'u ile adım adım ilerler,
her adımı işaretler. Daha interaktif, kontrollü ve hata durumunda geri dönülebilir.
Nasıl Çalışır?
📚 İçindekiler
🏢 0. Tenant Sistemi - Tam Çalışma Tarzı
📝 Basit Anlatım
Her müşteri sitesi bir "Tenant" olarak adlandırılır. Her tenant'ın kendi database'i, ayarları, kullanıcıları ve içeriği vardır. Tenant'lar birbirinden tamamen izole çalışır.
🔧 Teknik Özet
- • Central DB:
tuufi_4ekim- Tenant yönetimi, AI modülü - • Tenant DB:
tenant_[isim]_[hash]- Her tenant için ayrı - • Package:
stancl/tenancyLaravel multi-tenancy paketi - • Plesk: Otomatik domain alias ve database kaydı
0.1 Tenant Oluşturma (Tinker ile)
⚠️ Önemli
Tenant oluşturma işlemi otomatik olarak şunları yapar: Database oluşturur → Migration çalıştırır → Seed yapar → Plesk'e kaydeder
1️⃣ Tinker'a Gir
cd /var/www/vhosts/tuufi.com/httpdocs
php artisan tinker
2️⃣ Yeni Tenant Oluştur
// Tenant bilgileri
$tenantData = [
'id' => 'varplas', // Benzersiz ID (slug formatında)
'name' => 'VARPLAS Plastik', // Görünen isim
'email' => 'info@varplas.com',
'plan' => 'premium', // free, basic, premium
'central' => false, // false = normal tenant
];
// Tenant oluştur (otomatik: DB + Migration + Seed + Plesk)
$tenant = \App\Models\Tenant::create($tenantData);
echo "✅ Tenant oluşturuldu: " . $tenant->id . "\n";
echo "📁 Database: " . $tenant->tenancy_db_name . "\n";
- ✓ Database oluşturuldu:
tenant_varplas_[hash] - ✓ Migration'lar çalıştırıldı (tüm modüller)
- ✓ Seed edildi (roles, permissions, admin user)
- ✓ Plesk'e database kaydedildi
3️⃣ Domain Ekle
// Primary domain ekle
$tenant->domains()->create([
'domain' => 'varplas.com',
'is_primary' => true,
]);
// www.varplas.com OTOMATİK eklenir (CreateTenantDomains listener)
// Plesk alias da OTOMATİK eklenir (RegisterDomainAliasInPlesk listener)
echo "✅ Domain eklendi: varplas.com\n";
echo "✅ www.varplas.com otomatik eklendi\n";
echo "✅ Plesk alias otomatik eklendi\n";
4️⃣ Tenant Bilgilerini Kontrol Et
// Tenant bilgisi
$tenant = \App\Models\Tenant::find('varplas');
echo "ID: " . $tenant->id . "\n";
echo "Name: " . $tenant->name . "\n";
echo "DB: " . $tenant->tenancy_db_name . "\n";
// Domain'ler
$tenant->domains->each(fn($d) => echo "Domain: " . $d->domain . "\n");
// Tenant context'e geç
tenancy()->initialize($tenant);
echo "✅ Tenant context aktif\n";
// Tenant içinde kullanıcıları kontrol et
\App\Models\User::all()->pluck('email');
0.2 Domain & Alias Ekleme
Tinker ile Domain Ekleme
// Tenant'ı bul
$tenant = \App\Models\Tenant::find('varplas');
// Yeni domain ekle
$tenant->domains()->create([
'domain' => 'varplas.com.tr',
'is_primary' => false,
]);
// Otomatik:
// - www.varplas.com.tr eklenir
// - Plesk'e alias olarak kaydedilir
// Tüm domain'leri listele
$tenant->domains->pluck('domain');
Plesk Panel'den Manuel Alias
Otomatik ekleme başarısız olursa manuel ekle:
- 1. Plesk → tuufi.com → Hosting Settings
- 2. Domain Aliases bölümü
- 3. Add Domain Alias
- 4. Domain adını gir:
varplas.com - 5. ❌ SEO redirect KAPALI!
(Açık olursa domain çözümlenmez)
- 6. OK tıkla
🚨 Kritik: SEO Redirect KAPALI Olmalı!
Plesk'te domain alias eklerken "Redirect to primary domain for SEO" seçeneği KAPALI olmalı! Aksi halde tenant domain'i çalışmaz, tuufi.com'a yönlendirir.
0.3 Database Bulma & Erişim
Tinker ile Database Bilgisi
// Tüm tenant'ları listele
\App\Models\Tenant::all()->map(fn($t) => [
'id' => $t->id,
'name' => $t->name,
'db' => $t->tenancy_db_name,
]);
// Belirli tenant'ın DB'si
$tenant = \App\Models\Tenant::find('varplas');
echo $tenant->tenancy_db_name;
// Output: tenant_varplas_a1b2c3
SQL ile Direkt Erişim
-- Central DB'den tenant listesi
SELECT id, name,
JSON_UNQUOTE(JSON_EXTRACT(data, '$.tenancy_db_name')) as db_name
FROM tuufi_4ekim.tenants;
-- Sonuç:
-- | id | name | db_name |
-- |---------|-----------------|------------------------|
-- | 2 | İxtif | tenant_ixtif |
-- | 1001 | Muzibu | tenant_muzibu_1528d0 |
-- | varplas | VARPLAS Plastik | tenant_varplas_a1b2c3 |
Plesk'te Database Görüntüleme
Plesk → Databases → Liste:
tuufi_4ekim ← Central DB
tenant_ixtif ← Tenant 2 (İxtif)
tenant_muzibu_1528d0 ← Tenant 1001 (Muzibu)
tenant_varplas_a1b2c3 ← Yeni tenant
📊 Central DB Tabloları
- •
tenants- Tenant kayıtları - •
domains- Domain eşleştirmeleri - •
widgets- Widget şablonları - •
ai_*- AI modülü tabloları - •
settings- Setting tanımları
📊 Tenant DB Tabloları
- •
users,roles- Kullanıcılar - •
pages,blogs- İçerik - •
tenant_widgets- Widget instance'ları - •
settings_values- Ayar değerleri - •
menus,menu_items- Menüler - •
media- Medya dosyaları
0.4 Plesk Konfigürasyonu
📝 Otomatik Entegrasyonlar
Sistem otomatik olarak Plesk ile entegre çalışır. Manuel işlem nadiren gerekir.
| Event | Listener | Yapılan İşlem |
|---|---|---|
| TenantCreated | CreateDatabase | tenant_[id]_[hash] database oluşturur |
| DatabaseMigrated | RegisterTenantDatabaseToPlesk | Database'i Plesk'e kaydeder |
| DomainCreated | CreateTenantDomains | www. prefix'li domain ekler |
| DomainCreated | RegisterDomainAliasInPlesk | Plesk'e domain alias ekler |
| TenantDeleted | SafeDeleteDatabase | Database'i güvenli siler |
| DeletingDomain | UnregisterDomainAliasFromPlesk | Plesk alias'ı siler |
Manuel Plesk Onarımı (Sorun Varsa)
# Plesk web config onarımı (Livewire 403 sorunu için)
plesk repair web tuufi.com -y
# Domain test
curl -I https://varplas.com/
# Beklenen output:
# HTTP/2 200
# server: nginx
📋 1. Claude TodoWrite Sistemi
📝 Basit Anlatım
JSON manifest dosyası yerine, Claude doğrudan TodoWrite
tool'unu kullanarak adımları listeler ve her adımı tamamladıkça işaretler.
Bu yöntem daha interaktif ve kontrollü.
🎯 Örnek TodoWrite Kullanımı
Kullanıcı "VARPLAS temasını kur" dediğinde Claude şu todo listesini oluşturur:
✅ Avantajları
- ✓ İlerleme görünür - Her adım işaretlenir
- ✓ Hata durumunda geri dönülebilir
- ✓ Kullanıcı onayı alınabilir (kritik adımlarda)
- ✓ Yarıda kalan işe devam edilebilir
- ✓ Daha az hata - Her adım tek tek yapılır
📋 Todo Status'ları
in_progress olabilir.
📁 2. Tema Dosyaları
resources/views/themes/varplas/
├── layouts/
│ └── app.blade.php # Ana layout
├── partials/
│ ├── header.blade.php # Üst menü, logo
│ ├── footer.blade.php # Alt bilgi
│ ├── mega-menu.blade.php # Ürün kategorileri
│ └── mobile-menu.blade.php # Mobil menü
├── pages/
│ ├── home.blade.php # Ana sayfa (@widget çağrıları)
│ ├── about.blade.php # Hakkımızda
│ ├── contact.blade.php # İletişim
│ └── products/
│ ├── index.blade.php # Ürün listesi
│ └── show.blade.php # Ürün detay
└── components/
├── product-card.blade.php
└── feature-card.blade.php
⚠️ Tema Seçimi
Tenant'ın hangi temayı kullanacağı settings_values tablosunda
active_theme = 'varplas' olarak belirlenir.
🧩 3. Widget Sistemi
Central DB: widgets tablosu
Widget şablonları (template). Tüm tenant'lar bu şablonları kullanabilir.
content_html, settings_schema,
item_schema içerir.
Tenant DB: tenant_widgets + widget_items
Her tenant kendi widget instance'larını oluşturur.
settings (JSON) ve
widget_items (tekrarlı içerik) içerir.
| Widget | has_items | Açıklama |
|---|---|---|
| Hero Slider | true | Slaytlar, CTA butonları |
| Ürün Kataloğu | true | Ürün kartları |
| Neden Biz | true | Özellik kartları |
| Timeline | true | Şirket geçmişi |
| İletişim Formu | false | Tek form bloğu |
| İletişim Bilgileri | false | Telefon, email, adres |
⚙️ 4. Settings & SEO
Site Ayarları (~25 değer)
site_name: "VARPLAS"site_slogan: "Endüstriyel Depolama"site_logo: "/storage/logo.png"site_phone: "+90 262 658 28 18"site_email: "info@varplas.com"active_theme: "varplas"primary_color: "#10b981"SEO Ayarları
default_title: "VARPLAS - Endüstriyel Depolama"meta_description: "IBC Tank, Varil..."og_image: "/storage/og-image.jpg"google_analytics: "G-XXXXXXXX"robots: "index, follow"✅ 5. Tam Checklist (Claude Todo Formatında)
📝 Kullanım
Kullanıcı "VARPLAS temasını kur" dediğinde Claude bu checklist'i TodoWrite ile oluşturur ve adım adım ilerler.