update deploy

This commit is contained in:
bulut
2026-03-27 10:41:54 +03:00
parent 69d19c0176
commit 6f6448aa06
422 changed files with 37956 additions and 0 deletions

246
prompts/admin-leads.md Normal file
View File

@@ -0,0 +1,246 @@
# Admin Panel — Leads (Başvuru Yönetimi) Modülü
## Genel Bakış
Web sitesindeki formlardan gelen tüm başvurular `leads` tablosuna yazılır. Admin panelden başvurular listelenir, detay görüntülenir, durum güncellenir ve not eklenir. **Lead'ler sadece API'den oluşur — admin panelde "Yeni Oluştur" butonu olmayacak.**
---
## API Endpoints (Admin — auth:sanctum)
| Method | Endpoint | Açıklama |
|--------|----------|----------|
| `GET` | `/admin/leads` | Başvuruları listele (paginated, filtrelenebilir) |
| `GET` | `/admin/leads/{id}` | Başvuru detayı (otomatik okundu işaretler) |
| `PUT` | `/admin/leads/{id}` | Durum/not güncelle |
| `DELETE` | `/admin/leads/{id}` | Başvuru sil (soft delete) |
---
## GET /admin/leads — Liste
### Query Parametreleri:
| Parametre | Tip | Açıklama |
|-----------|-----|----------|
| `status` | string | Durum filtresi: `new`, `contacted`, `enrolled`, `cancelled` |
| `source` | string | Kaynak filtresi: `kurs_kayit`, `danismanlik`, `duyuru`, `iletisim` |
| `is_read` | boolean | Okundu/okunmadı filtresi |
| `search` | string | İsim/telefon arama |
| `per_page` | integer | Sayfa başına (varsayılan: 15) |
### Response:
```json
{
"data": [
{
"id": 1,
"name": "Ahmet Yılmaz",
"phone": "+90 532 724 15 32",
"email": "ahmet@email.com",
"source": "kurs_kayit",
"status": "new",
"target_course": "gemici-birlesik-egitimi",
"education_level": "lise",
"subject": null,
"message": "Eğitim hakkında bilgi almak istiyorum",
"is_read": false,
"kvkk_consent": true,
"marketing_consent": false,
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "denizcilik-2026",
"admin_note": null,
"created_at": "2026-03-24T10:30:00.000000Z",
"updated_at": "2026-03-24T10:30:00.000000Z"
}
],
"meta": { "current_page": 1, "last_page": 5, "per_page": 15, "total": 72 }
}
```
---
## GET /admin/leads/{id} — Detay
Detay açıldığında backend otomatik olarak `is_read: true` yapar.
---
## PUT /admin/leads/{id} — Güncelle
Admin sadece şu alanları güncelleyebilir:
```json
{
"status": "contacted",
"is_read": true,
"admin_note": "Arandı, bilgi verildi. Nisan dönemine kayıt olacak."
}
```
---
## Veri Modeli
### Lead Alanları
| Alan | Tip | Açıklama |
|------|-----|----------|
| `id` | integer | — |
| `name` | string | Ad Soyad |
| `phone` | string | Telefon |
| `email` | string (nullable) | E-posta |
| `source` | enum | Başvuru kaynağı (form tipi) |
| `status` | enum | İşlem durumu |
| `target_course` | string (nullable) | Hedef eğitim slug'ı |
| `education_level` | string (nullable) | Eğitim seviyesi |
| `subject` | string (nullable) | Konu (iletişim formunda) |
| `message` | text (nullable) | Mesaj |
| `is_read` | boolean | Admin tarafından okundu mu |
| `kvkk_consent` | boolean | KVKK onayı |
| `marketing_consent` | boolean | Pazarlama onayı |
| `utm_source` | string (nullable) | UTM Source |
| `utm_medium` | string (nullable) | UTM Medium |
| `utm_campaign` | string (nullable) | UTM Campaign |
| `admin_note` | text (nullable) | Admin notu |
| `created_at` | datetime | Başvuru tarihi |
### Source (Kaynak) Değerleri
| Değer | Açıklama | Hangi Form? |
|-------|----------|-------------|
| `kurs_kayit` | Kurs ön kayıt | Eğitim detay sayfası kayıt formu |
| `danismanlik` | Danışmanlık | Danışmanlık sayfası formu |
| `duyuru` | Duyuru | Duyuru sidebar'daki mini form |
| `iletisim` | İletişim | İletişim sayfası formu |
| `hero_form` | Hero form | Anasayfa hero bölümü formu |
| `whatsapp_widget` | WhatsApp | WhatsApp widget üzerinden gelen |
### Status (Durum) Değerleri
| Değer | Label | Badge Rengi | Açıklama |
|-------|-------|-------------|----------|
| `new` | Yeni | `warning` (sarı) | Henüz işlenmemiş |
| `contacted` | İletişim Kuruldu | `info` (mavi) | Aranmış/e-posta gönderilmiş |
| `enrolled` | Kayıt Oldu | `success` (yeşil) | Eğitime kaydolmuş |
| `cancelled` | İptal | `danger` (kırmızı) | Vazgeçmiş/iptal |
---
## Önerilen Admin Panel Sayfası
### Liste Sayfası (`/admin/leads`)
```
┌─────────────────────────────────────────────────────────────┐
│ Başvurular [Filtreler ▼] │
├─────────────────────────────────────────────────────────────┤
│ Filtreler: [Kaynak ▼] [Durum ▼] [Okundu ▼] [Ara...] │
├──────┬──────────────┬──────────────┬────────────┬───────────┤
│ ● │ Ahmet Yılmaz │ +90 532 ... │ kurs_kayit │ 🟡 Yeni │
│ ○ │ Mehmet Kaya │ +90 555 ... │ iletisim │ 🔵 İlet. │
│ ○ │ Ayşe Demir │ +90 212 ... │ danismanlik│ 🟢 Kayıt │
└──────┴──────────────┴──────────────┴────────────┴───────────┘
● = okunmadı (bold göster) ○ = okundu
```
#### Tablo Sütunları:
| Sütun | Açıklama |
|-------|----------|
| Okundu göstergesi | `is_read` false ise bold/dot göster |
| Ad Soyad | `name` |
| Telefon | `phone` |
| E-posta | `email` (varsa) |
| Kaynak | `source` — badge ile göster |
| Hedef Eğitim | `target_course` (varsa) |
| Durum | `status` — renkli badge |
| Tarih | `created_at` — relative (2 saat önce) |
#### Kaynak Badge Renkleri:
| Source | Renk |
|--------|------|
| `kurs_kayit` | `primary` (mavi) |
| `danismanlik` | `purple` |
| `duyuru` | `orange` |
| `iletisim` | `teal` |
| `hero_form` | `indigo` |
| `whatsapp_widget` | `green` |
### Detay/Düzenleme Sayfası (`/admin/leads/{id}`)
```
┌─────────────────────────────────────────────────┐
│ Başvuru #42 — Ahmet Yılmaz │
├─────────────────────────────────────────────────┤
│ Bilgiler │
│ ┌─────────────────┬───────────────────────────┐ │
│ │ Ad Soyad │ Ahmet Yılmaz │ │
│ │ Telefon │ +90 532 724 15 32 │ │
│ │ E-posta │ ahmet@email.com │ │
│ │ Kaynak │ 🔵 kurs_kayit │ │
│ │ Hedef Eğitim │ Gemici (Birleşik) Eğitimi │ │
│ │ Eğitim Seviyesi │ Lise │ │
│ │ Mesaj │ Bilgi almak istiyorum │ │
│ │ KVKK Onay │ ✅ Evet │ │
│ │ Pazarlama Onay │ ❌ Hayır │ │
│ │ Tarih │ 24 Mar 2026, 10:30 │ │
│ └─────────────────┴───────────────────────────┘ │
│ │
│ UTM Bilgileri │
│ ┌─────────────────┬───────────────────────────┐ │
│ │ utm_source │ google │ │
│ │ utm_medium │ cpc │ │
│ │ utm_campaign │ denizcilik-2026 │ │
│ └─────────────────┴───────────────────────────┘ │
│ │
│ İşlem │
│ ┌───────────────────────────────────────────────┐│
│ │ Durum: [Yeni ▼] → contacted / enrolled /.. ││
│ │ ││
│ │ Admin Notu: ││
│ │ ┌─────────────────────────────────────────┐ ││
│ │ │ Arandı, bilgi verildi. Nisan dönemine │ ││
│ │ │ kayıt olacak. │ ││
│ │ └─────────────────────────────────────────┘ ││
│ │ ││
│ │ [Kaydet] ││
│ └───────────────────────────────────────────────┘│
└─────────────────────────────────────────────────┘
```
#### Düzenleme Kuralları:
- Başvuru bilgileri (name, phone, message vb.) **readonly** — sadece görüntüleme
- Sadece `status`, `is_read` ve `admin_note` düzenlenebilir
- `target_course` slug ise, linke çevir: `/admin/courses/{slug}/edit`
- "Yeni Oluştur" butonu **yok** — lead'ler sadece frontend formlarından gelir
---
## İstatistik Kartları (Dashboard için, opsiyonel)
Liste sayfasının üstüne istatistik kartları eklenebilir:
```
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 🟡 Yeni │ │ 🔵 İletişim │ │ 🟢 Kayıt │ │ 📊 Toplam │
│ 12 │ │ 28 │ │ 45 │ │ 93 │
│ Bu hafta: 5 │ │ Bu hafta: 8 │ │ Bu ay: 15 │ │ Bu ay: 32 │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
```
API'den alınabilir:
```
GET /admin/leads?status=new → meta.total
GET /admin/leads?status=contacted → meta.total
GET /admin/leads?status=enrolled → meta.total
GET /admin/leads → meta.total
```
---
## Notlar
- `is_read` detay sayfasııldığında otomatik `true` olur (backend tarafından)
- Soft delete kullanılıyor — silinen lead'ler geri alınabilir
- UTM verileri backend'de tek JSON sütununda (`utm`) saklanır, API response'da ayrı ayrı döner
- KVKK ve pazarlama onayları readonly gösterilmeli — admin tarafından değiştirilemez