# 12 — İLK ÜRÜN ÇIKIŞ REHBERİ

Amaç: bugün ilk ürünü canlıya almak ve **kendi kartınla test siparişi vermek.**

Bu bir runbook — sırayla git, kutucukları işaretle. Sıra keyfi değil: yanlış
sırada gidersen işi iki kez yaparsın. Örneğin ürün girip sonra para birimini
değiştirirsen fiyatlar bozulur.

**Bugün girmeyeceğin şeyler:** 28 kategorinin tamamı, kupon, kampanya, yorum
ayarları, çoklu dil. Üçü de sonra. Bugün **3 kategori, 1 mağaza, 5 ürün.**

---

## AŞAMA 0 — Dosyalar ve kurulum  ⏱ 1–2 saat

- [ ] **Eksik dosyaları kur.** `00-eksik-dosyalar/OKU-BENI.md`
      `artisan` yok, bu olmadan hiçbir komut çalışmaz.
- [ ] **Yedeği temizle.** `bash magostore-temizlik.sh --apply` (273 MB çöp)
- [ ] **cPanel kurulumu.** `01-FAZ1-cpanel-kurulum.md`, 11 adım.
      Kritik: PHP 8.3, `exec` açık, document root → `public/`
- [ ] **`.env`** `env.magostore.example`'dan. `APP_DEBUG=false`, `ADMIN_DIR` değiştir
- [ ] **SQL import.** 169 tablo görmelisin
- [ ] **İzinler** ve `php artisan storage:link`
- [ ] `php artisan --version` çalışıyor

**Kontrol:** `https://alanadin.com/<ADMIN_DIR>` panel açılıyor.

---

## AŞAMA 1 — Marka ve tasarım  ⏱ 1 saat

- [ ] `php magostore-rebrand.php` (ön izleme) → `--apply`
- [ ] `php artisan optimize:clear`
- [ ] **Tema dosyaları.** `10-TEMA-KURULUM.md` Adım 1
- [ ] **Panel renkleri.** Aynı dokümanda 15 değer var, tablodan kopyala
- [ ] **Admin CSS.** Adım 6 (2 dosya + 1 satır)
- [ ] Ayarlar → Genel: site adı `Magostore`, admin başlığı `Magostore`
- [ ] Logo ve favicon yükle

**Kontrol:** Hiçbir yerde "Botble" veya "Cashiwa" yazmıyor. Sayfa kaynağında
(Ctrl+U) `botble` aramasi sonuç vermiyor.

---

## AŞAMA 2 — Para, vergi, kargo ayarları ⚠ ÜRÜNDEN ÖNCE  ⏱ 1 saat

**Bu aşamayı atlarsan ürünleri yeniden girmen gerekir.** Fiyat, vergi ve kargo
ürüne bağlı hesaplanıyor.

### Para birimi
`E-ticaret → Ayarlar → Para Birimleri`

- [ ] `TRY` ekle: sembol `₺`, **sembol sonda**, ondalık `2`, binlik ayırıcı `.`, ondalık ayırıcı `,`
- [ ] TRY'yi **varsayılan** yap
- [ ] USD/EUR varsa **sil veya pasife al** — kur yönetimi bugünün işi değil

### Vergi
`E-ticaret → Ayarlar → Vergi`

- [ ] Vergiyi **aç** (`ecommerce_tax_enabled`)
- [ ] Üç vergi oluştur: **KDV %20**, **KDV %10**, **KDV %1**
- [ ] Varsayılan: KDV %20
- [ ] **Fiyat gösterimi: KDV dahil.** Türkiye'de perakende fiyat KDV dahil
      gösterilir; hariç bırakırsan sepette fiyat değişir ve müşteri kaçar.

### Kargo
`E-ticaret → Ayarlar → Kargo`

- [ ] `shippo` eklentisini **pasife al** — Türkiye'de işe yaramıyor
- [ ] Elle kargo kuralı: **desi bazlı tek tarife**
      Örnek başlangıç: 0–5 desi `49 ₺` · 5–15 desi `89 ₺` · 15+ desi `149 ₺`
- [ ] **Ücretsiz kargo eşiği: 300 ₺** (Faz 2, B11)
- [ ] Bölge: tek bölge "Türkiye". İl bazlı tarife sonra.

### Ödeme
`Ödeme → Ayarlar`

- [ ] **Havale/EFT'yi aç.** Bugünün test yöntemi bu.
- [ ] iyzico'yu **sandbox** modda aç, anahtarları gir
- [ ] Diğer tüm yöntemleri kapat (Stripe, PayPal, Mollie, Razorpay…)

### Komisyon
`Pazaryeri → Ayarlar`

- [ ] Varsayılan komisyon: **%12,5** (`komisyon-ve-kesintiler.xlsx` ortalaması)
- [ ] Kategori bazlı oranlar: **3 kategori için** gir, 28'i sonra

**Kontrol:** Bir ürün fiyatı girip önizlediğinde `1.249,00 ₺` biçiminde
görünüyor, KDV dahil.

---

## AŞAMA 3 — Taksonomi: 3 kategori, 1 marka  ⏱ 30 dk

Tüm kategori ağacını **bugün kurmuyorsun.** İlk ürününü çıkaracak kadarını kur.

`E-ticaret → Kategoriler`

- [ ] Ana kategori: **Ev & Yaşam**
- [ ] Alt kategori: **Ev Tekstili**
- [ ] Alt kategori: **Mutfak**

Her biri için: ad, slug (otomatik), SEO başlığı, görsel. Komisyon oranını
Aşama 2'de girdiysen burada görünür.

`E-ticaret → Markalar`

- [ ] İlk markanı ekle (kendi markan veya sattığın marka)

---

## AŞAMA 4 — İlk mağaza  ⏱ 30 dk

Kendi mağazanı satıcı olarak açıyorsun. Pazaryerinin ilk satıcısı sensin —
böylece satıcı akışını da test etmiş oluyorsun.

`Pazaryeri → Satıcılar → Yeni`

- [ ] Müşteri hesabı oluştur (satıcı bir müşteri hesabına bağlı)
- [ ] Mağaza adı, logo, açıklama
- [ ] Vergi bilgileri: unvan, vergi dairesi, vergi no
- [ ] **IBAN** — Faz 3'te gördüğümüz gibi bu olmadan hakediş ödenemez
- [ ] Satıcıyı **onayla** (`is_verified`)
- [ ] Kategori satış yetkisi: 3 kategori

---

## AŞAMA 5 — İlk 5 ürün  ⏱ 1–2 saat

Beş ürün, çünkü bir tane vitrini boş gösterir.

Her ürün için **eksiksiz** doldur — sonradan tamamlamak iki kat zaman alır:

- [ ] Ad (arama için önemli, kategori kelimesi içersin)
- [ ] Açıklama — en az 3 paragraf, ölçü ve malzeme bilgisi
- [ ] Fiyat + varsa liste fiyatı (üstü çizili)
- [ ] **Barkod** — GTIN'i doğru gir, Faz 4'te katalog eşleştirmesi buna bakacak
- [ ] SKU
- [ ] Stok adedi + stok takibi açık
- [ ] **Desi ve ağırlık** — kargo hesabı buna bağlı, boş bırakırsan kargo çıkmaz
- [ ] Kategori (en az bir), marka
- [ ] Vergi: KDV %20
- [ ] **En az 3 görsel**, ilki kare ve beyaz zeminli
- [ ] Durum: Yayında

**Görsel ipucu:** kare (1:1), en az 1000×1000, dosya boyutu 300 KB altı.
Tema görselleri kare varsayıyor; farklı orandakiler kırpılıyor.

---

## AŞAMA 6 — Vitrin ve sayfalar  ⏱ 1 saat

- [ ] Ana sayfa: slider veya banner (1 tane yeter)
- [ ] Menü: 3 kategori
- [ ] **Zorunlu sayfalar** (mevzuat, atlanamaz):
      Mesafeli satış sözleşmesi · Ön bilgilendirme formu · Gizlilik ·
      Çerez politikası · İade ve değişim · İşlem rehberi
- [ ] **Ana sayfada iletişim bilgileri:** ticaret unvanı, MERSİS no, merkez adresi
      (ETAHS Yönetmeliği m.6 — ana sayfadan doğrudan erişilebilir olmalı)
- [ ] Footer'a bu sayfaların bağlantıları

> Sözleşme metinlerini avukatından al. Şablon metinle canlıya çıkmak, ilk
> uyuşmazlıkta savunmasız kalmak demek.

---

## AŞAMA 7 — TEST SİPARİŞİ  ⏱ 30 dk

Bu aşama geçmeden canlıya çıkmış sayılmaz.

- [ ] Gizli sekmede vitrine gir (misafir olarak)
- [ ] Ürünü sepete at, adet değiştir
- [ ] **Kargo ücreti hesaplanıyor mu?** Çıkmıyorsa desi boş demektir
- [ ] 300 ₺ üzeri sepette **kargo bedava** oluyor mu
- [ ] Ödemeye geç → adres gir → **Havale/EFT** seç → siparişi tamamla
- [ ] Panelde sipariş görünüyor
- [ ] Sipariş e-postası geldi (müşteriye ve satıcıya)
- [ ] Satıcı panelinde sipariş görünüyor
- [ ] Siparişi "Hazırlanıyor" → "Kargoya verildi" → "Tamamlandı" yap
- [ ] Fatura oluşuyor

**Sonra iyzico sandbox ile aynı testi tekrarla.** Kart ödemesi çalışıyorsa
canlıya geçebilirsin.

---

## AŞAMA 8 — Canlıya alma  ⏱ 30 dk

- [ ] `APP_DEBUG=false` teyit
- [ ] Cron kur: `schedule:run` her dakika, `queue:work` her dakika
- [ ] SSL aktif, `SESSION_SECURE_COOKIE=true`
- [ ] Yedek: cPanel otomatik yedek + veritabanı dışa aktarma
- [ ] iyzico **canlı** anahtarlara geç
- [ ] Gerçek kartla **1 ₺'lik** test siparişi, sonra iade et

---

## Bugün YAPMAYACAKLARIN

Bunlara başlamak canlıya çıkışı öteler. Sıradaki oturumların işi:

Faz 3 para motorunun bağlanması (kod hazır, migration'lar bekliyor) ·
kargo firması entegrasyonu · e-arşiv · kupon ve kampanya · yorum sistemi ·
kalan 25 kategori · ikinci satıcı · katalog ve buybox · reklam

---

## İkinci iş: sıfırdan yazım

Karar: Botble ile satış yaparken paralel sıfırdan yazıyoruz.

**İlk adım kod değil, disiplin:** Botble'da yaptığın her özelleştirme
`app/Magostore/` altında kalacak, eklenti dosyası yamalanmayacak. Bu kurala
uyduğun sürece sıfırdan yazıma geçiş **veri taşıma** işi olur, kod taşıma işi
olmaz.

Sıfırdan tarafın planı `magostore-sifirdan/00-MIMARI.md` dosyasında: 10 aşama,
~6 ay, Laravel + Filament. En zor %30 (para, katalog, buybox — 23 sınıf)
zaten yazılmış ve o kod sıfırdan projeye üç satır değişiklikle giriyor.

**Sıralama önerim:** Botble tarafı canlıya çıkıp ilk 10 siparişi aldıktan sonra
sıfırdan yazıma başla. Sebebi: gerçek siparişler hangi özelliğin gerçekten
gerektiğini gösterir. Şimdi spec'ten yazarsan, 27 bölümün 20'sini kimse
kullanmayacak.

---

## Takıldığın yerde

Hata mesajını olduğu gibi gönder. En sık çıkanlar ve sebebi:

| Hata | Sebep |
|---|---|
| 500, boş sayfa | `storage` izinleri, `.env` eksik `APP_KEY` |
| "No application encryption key" | `APP_KEY` boş |
| Kargo ücreti çıkmıyor | Ürün desi/ağırlık boş |
| Görsel yüklenmiyor | `storage:link` yapılmamış, `upload_max_filesize` küçük |
| Panelde 404 | `ADMIN_DIR` değişti, yeni yolu kullan |
| Değişiklik görünmüyor | `config:cache` sonrası `.env` değişti → tekrar cache'le |
