14 yeni rehber yazısı (hepsi editör denetiminden geçti, 46 yazıda 829 iç link tarandı, 0 kırık hedef; 180+ DB rakamı yazıların kendi filtreleriyle yeniden koşuldu): taban-siralamalari-alti-yilda-nasil-degisti · kac-net-ile-hangi-bolum · siralama-bandlari-hangi-kapilar-acilir · ayni-bolum-farkli-universite-siralama-farki · hangi-bolumlerin-kontenjani-azaldi · yeni-acilan-bolumler-nasil-degerlendirilir · bilgisayar-mi-yazilim-muhendisligi-mi · kktc-universiteleri-okunur-mu · yapay-zekaya-tercih-sordum-guvenilir-mi · ek-madde-1-puanim-yetiyor-mu · universitede-ilk-hafta-ders-kaydi-muafiyet-kayit-dondurma · yks-2027-takvimi · rehber-ogretmenler-icin-veri-kaynaklari · bolumumu-sevmedim-hangi-kapilar-var İki canlı yazı düzeltildi: - veliler-icin-tercih-rehberi: veli diliyle kapanış; altındaki "sıralamanı gir" kutusu artık veliye ölü uç değil - bos-kontenjanlar-ne-anlatiyor: "birkaç yüz kişilik fark" aslında ~9 bin (ÖSYM 265.356 ↔ bizim 256.532); payda açıklaması tersti — ek kontenjan paydaya girseydi oran düşerdi. guncelleme alanı eklendi (sitemap lastmod). Kurallar (AGENTS.md): - Yayın sonrası arama motoru bildirimi: URL denetimi yalnız canlıda 200 dönen adrese; kota sayacı; mülk/hesap notu; sitemap grep kuralı - Yıkıcı git komutları yasak: reset/checkout --/restore/clean/stash - Tarayıcı açma: tasarımcı ve UX gerekli gördüğünde açabilir (yetenek için .claude/agents/tasarimci.md'ye tarayıcı araçları eklendi) docs/gece-vardiyasi/2026-09-22/ — 34 rapor: CEO kararları ve kapanış turu, marka/ödeme analizi, sıfır ödeme teşhisi, SEO konu planı, veri kalitesi, editör denetimi, CTO şartnamesi, yazılımcı ve güvenlik raporları, SABAH-OZETI. docs/ekip/YAYIN-KUYRUGU.md — Search Console bildirim kuyruğu. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
180 lines
23 KiB
Markdown
180 lines
23 KiB
Markdown
# 04 — "Öğrenciler hiç ödeme yapmadı" — ürün ve kod teşhisi
|
||
|
||
Hazırlayan: Ürün yöneticisi · 22 Eyl 2026 gece vardiyası
|
||
Yöntem: **koddan denetim** (tarayıcı açılmadı, dev sunucusu açılmadı, kod değiştirilmedi, çalışma ağacına dokunulmadı).
|
||
Sayısal kaynak: `docs/ekip-raporlari/2026-09-21/03-donusum.md` (Rybbit, 30g = 23 Ağu–21 Eyl, iç trafik hariç 621 gerçek ziyaret) ve `docs/ekip-raporlari/2026-09-22/01-ai-listesi-hunisi.md`. Bu vardiyada yeni ölçüm alınmadı.
|
||
Satır numaraları `main @ e21cda4` referanslı; `liste-uretici.tsx` için çalışma ağacındaki hâl geçerli olabilir (Bilal'e ait commit'lenmemiş değişiklik var, açılmadı).
|
||
Pazar/psikoloji tarafı bu raporun kapsamı dışında — `marka` ajanında.
|
||
|
||
---
|
||
|
||
## 5 maddelik özet
|
||
|
||
1. **"Neden ödemiyorlar" sorusu bugün cevaplanamaz, çünkü paywall'a 30 günde 2 kişi geldi.** Zincir: 621 gerçek ziyaret → 3 liste → **2** kilit gördü → **1** `/paket` → **0** `odeme_baslatildi` (`03-donusum.md:54, 121-123`; `01-ai-listesi-hunisi.md:55-56`). n=2 ile fiyat, paket içeriği ya da maske hakkında hiçbir çıkarım yapılamaz. Fiyatı indirmek, maskeyi açmak, paket içeriğini değiştirmek **bu hafta yapılacak işler değil**; ölçülemeyecekleri için karar da doğuramazlar.
|
||
2. **Ama "hiç ödeme yok" kısmının bir bölümü ürün hatası, pazar değil: ödeme yolu 11 Ağu–20 Eyl arasında fiilen kırıktı.** Aynı pencerede 60+ `odeme_baslatildi` olayına karşılık **0** `/odeme` sayfa görüntülemesi var (`03-donusum.md:133, 145`). 24 Ağu ve 12 Eyl'de **iki gerçek kullanıcı "satın al"a bastı ve oturumu orada bitti** (`:139-140`). Sunucu action'ının `redirect()` fırlatması `/paket`'i `<Activity>` içinde sağır bırakıyordu; düzeltme 21 Eyl'de çıktı (`8f4669e`) ve **uçtan uca bir kez bile doğrulanmadı**. Bugünkü kodda yönlendirme client'ta (`odeme-actions.ts:11-16`, `satin-al-form.tsx:56-57`) — ama `/odeme/sonuc` görüntülemesi hiçbir gün kaydedilmedi.
|
||
3. **Satış sayfamız girişsiz ziyaretçiye satın almayı erteletiyor.** `/paket`'te oturumsuz kullanıcının **birincil turuncu butonu** "Giriş yap — ilk 3 tercihini ücretsiz gör", altındaki cümle ise birebir **"Paketi sonra alırsın."** (`paket-satinal.tsx:136, 141-143`). Yani cüzdanı elinde `/paket`'e gelen kişi 299 TL'lik butonu hiç görmüyor. Aynı kişi `/giris`'e vardığında ikinci kez ücretsiz denemeyi duyuyor: `/paket` callback'i funnel sayılmadığı için (`giris-karti.tsx:30-31`) metin "5 deneme kredisi… ücretsiz soru sorabilirsin" oluyor (`:62-65`). 24 Ağu'daki gerçek kullanıcının izlediği yol tam olarak buydu.
|
||
4. **Ödemeye varmanın bedeli çok yüksek, karşılığında gösterilen ödül çok küçük.** En kısa yol 10 ekran / ~12 tık / 1 OAuth turu / 15–30 sn bekleme ve **3 kredi yakma** gerektiriyor; sonunda kullanıcı 24 satırın 3'ünde ~15 kelimelik birer cümle görüyor (`rapor-maske.ts:12`, `ai/rapor.ts:79-80`). Ürünün tek gerçek değer önizlemesi (`TadimlikSatiri`) ise `/sonuc`'un ~2.200 px altında ve `tadimlik_goruntulendi` 30 günde **0** (`02-sevk-yollari-ux.md` §3-4).
|
||
5. **Ödeyen kişiye verilen sözle kod çelişiyor.** `/paket` "60 Yapay Zeka danışman sorusu (her mesaj 1 kredi)" diyor (`paket-satinal.tsx:40`) ve `docs/urun/vizyon.md` "Pakete DAHİL (kredi düşmez): kişisel 24'lük liste… 2 revizyon" diyor. Kodda paketli kullanıcı da liste başına 3, revizyon başına 3 kredi ödüyor (`rapor-actions.ts:98-99, 118-124`; `credits.ts:14`). 299 TL ödeyen biri 60 değil, en fazla 51 soru sorabiliyor. Bu benim önceliklendirme ölçütümün 1. maddesi: kullanıcıya verilen sözü bozan yanlış bilgi.
|
||
|
||
---
|
||
|
||
## 1. Değer anı haritası — ne veriliyor, ne satılıyor?
|
||
|
||
### Ücretsiz katman (giriş yok)
|
||
|
||
| Yüzey | Kullanıcı ne alıyor | Kanıt |
|
||
|---|---|---|
|
||
| `/sonuc` tablosu | Sıralamasına göre **60 program** (hayal/dengeli/güvenli × 20), program adı, üniversite, il, devlet/vakıf, son N yıl taban sırası, trend oku | `liste-queries.ts:37-53` (`limitPerBucket: 20`), `sonuc/page.tsx:102-113` |
|
||
| `/sonuc` tadımlık | **Gerçek LLM çıktısı formatında tek satır**: gerekçe + risk notu + trend yorumu | `tadimlik-satiri.tsx:159-168`, havuz `app.db/tadimlik_havuzu` (522 satır, `04-uretim-engelleri.md` §3) |
|
||
| Katalog (`/bolum`, `/universite`) | Tam taban/kontenjan verisi; yapay zekâ çıktısından **tek satır bile yok** | `02-sevk-yollari-ux.md` §5 |
|
||
|
||
### Kayıt sonrası (5 deneme kredisi, liste 3 kredi)
|
||
|
||
Kullanıcı 3 kredisini yakıp 24 satırlık listesini alıyor. **Açık olan:** 24 satırın tamamında program adı, üniversite/il, devlet-vakıf rozeti, son N yıl sıra geçmişi, trend oku, taban sıra (`rapor-maske.ts:47-48` — `programlar` maskelenmiyor) + **ilk 3 satırın** tam analizi + `genelDegerlendirme`'nin ilk 2 cümlesi + 1 uyarı (`rapor-maske.ts:28-46`).
|
||
|
||
**Kilitli olan (4.–24. satır):** risk noktası/etiketi sütunu yerine asma kilit + "Pakette" (`rapor-listesi.tsx:256-262`), açılan detayda gerekçe/risk notu/trend yorumu yerine "Kişisel analiz pakette" kutusu (`:306-320`), `genelDegerlendirme`'nin kalanı, kalan uyarıların yalnızca sayısı.
|
||
|
||
> Teknik not (CTO/güvenlik'e): kilitli risk etiketi **istemcide deterministik hesaplanıyor** — `riskHesapla(p.efektifSira, adaySira)` (`rapor-listesi.tsx:181-183`) ve `rapor.programlar` maskelenmeden iniyor (`rapor-maske.ts:47-48`). Yani ücretli gösterilen risk etiketinin girdisi zaten tarayıcıda. Sızan bir metin yok (o sunucuda maskeli), ama "risk analizi" satışının bir kısmı aslında serbest veriden türetilebilir. Bu bir acil durum değil, bir konumlandırma bilgisi.
|
||
|
||
### 299 TL tam olarak neyi açıyor
|
||
|
||
`hasPaket` → maske uygulanmaz (`rapor-actions.ts:156, 199`; `listem-icerik.tsx:88-90`) + `kilitAcilisi` unblur animasyonu (`listem-icerik.tsx:51`) + PDF (`rapor-yazdir.tsx:28`) + 2 revizyon (`rapor-actions.ts:215`, `credits.ts:17`) + 60 kredi (`credits.ts:7`).
|
||
|
||
**Yani parayla satın alınan şey: 21 satırın risk etiketi + 21 × üç kısa cümle + değerlendirmenin devamı + PDF + 2 revizyon + sohbet kredisi.** Gerekçe cümlesi prompt'ta "TEK kısa cümle (en fazla ~15 kelime)" olarak sınırlanmış (`ai/rapor.ts:79-80`).
|
||
|
||
### "Vay be" anı nerede?
|
||
|
||
Koddaki tek aday: **tadımlık satırı** — gerçek gerekçe + risk + trendi tek kartta gösteren yer (`tadimlik-satiri.tsx:159-168`). 30 günde **0 kez görüntülendi**. İkinci aday: kullanıcının kendi 24'lük listesinin unblur anı — ki oraya 30 günde 0 kişi geldi. **Bugün ürünün ücretsiz yolunda "vay be" anı yok; ilk 3 satır bir vaat değil, bir kesinti gibi görünüyor.**
|
||
|
||
---
|
||
|
||
## 2. Ödeme öncesi zorunlu adımlar envanteri
|
||
|
||
En kısa gerçekçi yol (anonim öğrenci, ana sayfadan; `02-sevk-yollari-ux.md` Yol A ile uyumlu):
|
||
|
||
| # | Ekran | Zorunlu girdi | Tık | Gerçekten gerekli mi? Kaldırılırsa ne kırılır? |
|
||
|---|---|---|---|---|
|
||
| 1 | `/` hero | **sıralama** (+ puan türü) | 2 | **Gerekli.** Havuz da tablo da sıralamadan kuruluyor (`liste-queries.ts:37-46`). Kaldırılamaz. |
|
||
| 2 | Sihirbaz adım 1 | **≥1 ilgi alanı** | 2 | **Gerekli.** Tek zorunlu sihirbaz adımı (`sihirbaz-adimlar.tsx:198`); sunucu da şart koşuyor (`rapor-actions.ts:104-111`). |
|
||
| 3 | Sihirbaz adım 2 (il) | yok — opsiyonel | 1 | **Gerekli değil**, ama yine de bir ekran + bir tık. Kaldırılırsa `/meraklisina` şeması ve gevşetme sırası değişir → M boy, bu turda hayır. |
|
||
| 4 | Sihirbaz adım 3 (devlet/vakıf) | yok — opsiyonel | 1 | Aynı. |
|
||
| 5 | `/sonuc?hazir=1` | — | 1 (+~2.200 px kaydırma) | Ödül sayfası; ama ilk ekranı **boş gri harita placeholder'ı** (`liste/components/manuel-harita.tsx:69-79`). |
|
||
| 6 | `/giris` + Google OAuth | Google hesabı | 2–3 | **Gerekli.** Liste kullanıcıya, kredi hesaba bağlı (`listem-icerik.tsx` `verifySession`). Anonim rapor saklama L boy iş. |
|
||
| 7 | `/listem?uret=1` | — | 0 | **3 kredi düşer (LLM'den önce)** + 15–30 sn bekleme (`rapor-actions.ts:118-124`, `04-uretim-engelleri.md` §1). |
|
||
| 8 | Maskeli liste + kilit | — | 1 | **Fiyatın funnel içinde ilk göründüğü yer** (`listem-govde.tsx:288` "Analizleri aç — 299 TL"). |
|
||
| 9 | `/paket` | — | 1 | Girişliyse buton doğrudan "299 TL — Paketi al" (`paket-satinal.tsx:164-169`). **Girişsizse satın alma butonu YOK** (bkz. §1 / Ö2). |
|
||
| 10 | `/odeme` (iyzico iframe) | kart + 3D | — | **Ek zorunlu alan yok**; ad/soyad Google'dan türetiliyor (`odeme-actions.ts:21-27, 67`). Bu adım temiz ve iyi kurulmuş. |
|
||
|
||
**Toplam: 10 ekran, ~12 tık, 1 OAuth turu, 15–30 sn bekleme, 3 kredi.**
|
||
|
||
**Envanterin sonucu:** ödeme ekranının **kendisinde** hiçbir gereksiz sürtünme yok — form alanı sıfır, sipariş özeti bilerek kaldırılmış (`odeme-sayfasi.tsx:48-50`), post-ödeme akışı self-healing (`odeme-sonuc-karti.tsx:26-35`). Sürtünme tamamen **ödemeden önceki 9 ekranda** ve ikisi çıkarılabilir cinsten değil, üçü (3, 4, 5) düzeltilebilir cinsten. **Ama en pahalı adım 7'dir: kullanıcı ürünün ne olduğunu görmeden 3 kredi ve yarım dakika ödüyor.**
|
||
|
||
Kısa yol da var ve o da kırık: girişsiz ziyaretçi ana sayfa fiyat bölümünden (`app/page.tsx:543`) `/paket`'e 2 tıkla gelebiliyor — ama oraya vardığında satın alma butonu yerine "Paketi sonra alırsın" yazısı buluyor.
|
||
|
||
---
|
||
|
||
## 3. Fiyat ve paketleme
|
||
|
||
| Soru | Cevap | Kanıt |
|
||
|---|---|---|
|
||
| Fiyat | **299 TL** tek seferlik (`paket`), 60 kredi | `credits.ts:7` |
|
||
| Alternatif paket | **Yok.** Tek ürün + top-up (129 TL / 30 kredi), top-up yalnız paketliye satılıyor | `credits.ts:8`, `paket-satinal.tsx:174-186` |
|
||
| Kredi ne alıyor | Liste üretimi 3, revizyon 3, sohbet mesajı 1 | `credits.ts:14, 17`, `credits.ts:98-130` |
|
||
| Yeni kullanıcı | 5 deneme kredisi (= 1 liste + 2 soru) | `credits.ts:11` |
|
||
| Fiyat ilk nerede görünüyor | Ana sayfa "Fiyat" bölümü (sayfanın ~6. bölümü, `app/page.tsx:479-560`) ve `/paket`. Funnel içinde ilk kez **8. ekranda**, kilit satırında | `listem-govde.tsx:288` |
|
||
| Katalogdan gelen (%75 trafik) fiyatı görüyor mu | **Hayır** | `02-sevk-yollari-ux.md` §1 Yol B/C |
|
||
| Ödemeden önce ne aldığını biliyor mu | **Kısmen.** Özellik listesi var (`paket-satinal.tsx:27-42`), örnek çıktı yok. `/paket`'te tek bir gerçek liste satırı gösterilmiyor | — |
|
||
| Sosyal kanıt | Eşik altında gizleniyor, uydurma sayı yok — **doğru kurulmuş** | `sosyal-kanit-sabitler.ts:11, 17` |
|
||
|
||
**Fiyatın kendisi hakkında karar önerisi vermiyorum.** n=2 ile 299 TL'nin yüksek mi düşük mü olduğu bilinemez; çapa (danışman 1.000–3.000 TL, `app/page.tsx:487-491`, kaynak Armut Eylül 2026) makul kurulmuş. **[BİLAL]** alanı, ve bu hafta açılmamalı.
|
||
|
||
---
|
||
|
||
## 4. "Ödemek için bir sebep" testi
|
||
|
||
**Tek cümlelik fark:**
|
||
> Ücretsiz sürümde öğrenci 24 programın hangileri olduğunu, tabanlarını ve trendini görüyor; 299 TL, bunların 21'inin yanına risk etiketini ve üçer kısa cümlelik yapay zekâ yorumunu koyuyor.
|
||
|
||
**Bu bir 18 yaşındakine para ödetir mi?** Bugünkü sunumuyla hayır — üç sebeple, üçü de koddan görünüyor:
|
||
|
||
1. **Ücretsiz ürün ücretliden daha dolu görünüyor.** `/sonuc` girişsiz kullanıcıya 60 satır veriyor (`liste-queries.ts:41`); ücretli teklif "3 yerine 24 satırın yorumu". Öğrencinin gözünde "daha az satır ama daha çok cümle" bir yükseltme gibi durmuyor.
|
||
2. **Ödülün örneği ödeme kararından önce gösterilmiyor.** Tek örnek satır (`TadimlikSatiri`) 30 günde 0 kez görüldü; `/paket` sayfasında hiç yok. Kullanıcı "kilitli olan şey neye benziyor" sorusunun cevabını görmeden 299 TL'ye bakıyor.
|
||
3. **Ödeme kararı, kullanıcının en yorgun olduğu ana konmuş.** 10. ekran, OAuth'tan ve 15–30 sn beklemeden sonra, 3 kredisi yanmış hâlde. Mobilde `/sonuc`'tan çıkışa medyan 33 sn (`03-donusum.md` §2) olan bir kitleye bu zincir uzun.
|
||
|
||
**Eksik olan tek şey:** ödemeden önce **teslim edilecek şeyin kendisinden bir örnek**. Ürün bunu zaten üretiyor ve bedavaya üretiyor (522 satırlık tadımlık havuzu + LLM'siz deterministik iskelet, `04-uretim-engelleri.md` §3) — sadece kimsenin göreceği yerde durmuyor. Bu, yeni özellik değil, var olanın yerini değiştirme işi.
|
||
|
||
**Yapmamanızı önerdiğim şey:** fiyatı indirmek, maskeyi 3'ten 5'e çıkarmak, ikinci bir paket eklemek. Üçü de n=2 üzerine kurulmuş tahminler olur ve etkileri sezon dışı hacimde okunamaz.
|
||
|
||
---
|
||
|
||
## 5. Beş somut değişiklik önerisi
|
||
|
||
Sıra, önceliklendirme ölçütüme göre: (1) verilen sözü bozan hata → (2) sezon takvimi → (3) ölçülebilir huni etkisi → (4) kurucu zamanı. Hepsi S; toplam inceleme yükü ~1 saat. Hiçbiri yeniden tasarım değil; üçü **kaldırma/düzeltme**.
|
||
|
||
### Ö1 · Ödeme yolunu canlıda bir kez uçtan uca doğrula, `odeme_hata {kod}` olayını ekle — **S · [BİLAL]** (test ödemesi) + [KARAR] (olay)
|
||
**İş:** Bilal canlıda gerçek kartla `/paket → /odeme → /odeme/sonuc` akışını bir kez tamamlar; aynı yayında `satin-al-form.tsx`'in üç hata dalına (`:49, 53`) `odeme_hata {kod}` olayı eklenir.
|
||
**Neden:** 11 Ağu–20 Eyl'de 60+ `odeme_baslatildi` → **0** `/odeme` görüntülemesi; iki gerçek kullanıcı "satın al"da kayboldu (`03-donusum.md:133, 139-140, 145-146`). Düzeltme 21 Eyl'de çıktı, doğrulanmadı. `/odeme/sonuc` görüntülemesi **hiçbir gün** kaydedilmemiş.
|
||
**Kabul:** `grep -n "odeme_hata" src/features/odeme/components/satin-al-form.tsx` → ≥1 sonuç ve `OlayAdi` birliğinde ad tanımlı (`grep -n "odeme_hata" src/lib/analitik.ts`); test ödemesinden sonra Rybbit'te `/odeme/sonuc` görüntülemesi ve `odeme_tamamlandi` **1 adet** görünür; sipariş `status="paid"` ve `hasPaket=1`.
|
||
**Not:** Backlog #7 ile aynı iş — yeni satır açılmasın, #7 "onaylı"ya alınsın.
|
||
|
||
### Ö2 · `/paket` ve `/giris`, satın alma niyetini söndürmeyi bıraksın — **S · [KARAR]** (davranış) + **[BİLAL]** (cümleler)
|
||
**İş:** (a) `paket-satinal.tsx:128-146` — girişsiz ziyaretçinin **birincil** butonu fiyatı ve satın alma fiilini taşısın (`/giris?callback=/paket`'e gitmeye devam edebilir); "Paketi sonra alırsın." cümlesi kaldırılsın, ücretsiz deneme ikincil bir metin linkine insin. (b) `giris-karti.tsx:30-31` — `funnel` koşuluna `/paket` callback'i eklensin ki ödemeye giden kişiye üçüncü kez ücretsiz deneme anlatılmasın.
|
||
**Neden:** `/paket` sayfasının tek işi satmak; bugün oturumsuz ziyaretçiye 299 TL'lik bir buton hiç göstermiyor (`:136, 141-143`). 24 Ağu'daki gerçek kullanıcı tam bu yolu yürüdü: `/paket → /giris → /paket → satın al → oturum bitti` (`03-donusum.md:139`).
|
||
**Kabul:** `grep -n "Paketi sonra alırsın" src/features/odeme/components/paket-satinal.tsx` → **0** sonuç; `grep -n "299\|amountKurus" src/features/odeme/components/paket-satinal.tsx` girişsiz dalda fiyatın geçtiğini gösterir; `grep -n "startsWith(\"/paket\")" src/features/kullanici/components/giris-karti.tsx` → 1 sonuç; `pnpm build` temiz.
|
||
**Kapsam dışı:** fiyat değişimi, yeni paket, sayfa düzeni.
|
||
|
||
### Ö3 · Paket vaadi ile kredi mantığı çelişkisini kapat — **S · [BİLAL]** (paket içeriği kararı)
|
||
**İş:** İki seçenekten biri: (a) paketli kullanıcıda liste üretimi ve revizyon kredi düşmesin (`rapor-actions.ts:118-124` + `:215` civarında `hasPaket` dalı) — `docs/urun/vizyon.md`'deki karara döner; ya da (b) `/paket` özellik metni "60 kredi; liste 3, revizyon 3, soru 1 kredi" diye düzeltilsin (`paket-satinal.tsx:40`, `app/page.tsx:201`, `listem-govde.tsx:345`).
|
||
**Neden:** Bugün ödeyene "60 soru" deniyor, kodda en fazla 51 soru kalıyor (`credits.ts:7, 14, 17`; `rapor-actions.ts:98-99`). Ölçütümün 1. maddesi: kullanıcıya verilen sözü bozan yanlış bilgi. Ödeyen sayısı bugün 0 olduğu için **geri dönüş maliyeti de bugün sıfır** — düzeltmenin en ucuz anı.
|
||
**Kabul:** Seçilen dalda tek kaynak: `grep -rn "danışman sorusu" src/` sonuçlarının tamamı aynı sayıyı ve aynı koşulu söyler; (a) seçilirse paketli kullanıcı için `spendCredits` çağrılmadığı testte gösterilir (`credit_ledger`'da `report_generate` satırı oluşmaz).
|
||
**Tavsiyem:** (a). "Krediler yalnız sohbet için" cümlesi anlatması kolay ve vizyonun kararı bu.
|
||
|
||
### Ö4 · `/sonuc`'un ilk ekranından boş harita placeholder'ını kaldır — **S · [KARAR]**
|
||
**İş:** `liste/components/manuel-harita.tsx:69-79` — manuel liste boşken bileşen hiç render edilmesin (`if (liste.length === 0) return null`), ilk ekran doğrudan tabloyla açılsın.
|
||
**Neden:** Sihirbazı bitiren herkeste manuel liste boştur; ödül sayfasının ilk gördüğü şey kullanıcının hiç kullanmadığı bir özelliğin boş gri kutusu (`02-sevk-yollari-ux.md` §4). Bu bir ekleme değil, kaldırma; CLS'i azaltır.
|
||
**Kabul:** `grep -n "liste.length === 0" src/features/liste/components/manuel-harita.tsx` → 1 sonuç; `/sonuc` sunucu HTML'inde boş durumda "haritada belirir" metni geçmez (`curl -s "$BASE/sonuc?sira=50000&tur=say" | grep -c "haritada belirir"` → 0); manuel listeye bir program eklenince harita yeniden görünür.
|
||
**Not:** CEO'nun ertelediği Ö4'ün (`05-ceo-karari.md` §5) yalnızca ucuz yarısı; sıralama tersine çevirme işi kapsam dışı bırakıldı.
|
||
|
||
### Ö5 · Tadımlık satırını `/sonuc`'ta tablonun **üstüne** taşı — **S · [KARAR]**
|
||
**İş:** `sonuc/page.tsx:117` — `<TadimlikBolumu>` çağrısı `<SonucProgramTablosu>`'nun **öncesine** alınır. Bileşende değişiklik yok, tek satır yer değişimi.
|
||
**Neden:** Ürünün ödeme öncesi tek gerçek değer önizlemesi bugün ~1.500 px aşağıda ve 30 günde **0 kez** görüntülendi (`02-sevk-yollari-ux.md` §3). "Ödemek için sebep" testinin tek eksiği örnek göstermek; örnek zaten üretilmiş ve bedava (`app.db/tadimlik_havuzu`, 522 satır).
|
||
**Kabul:** `/sonuc` sunucu HTML'inde "Yapay zekâdan örnek satır" ifadesinin ilk geçiş konumu, tablo başlığının ilk geçiş konumundan **önce** gelir (`curl -s "$BASE/sonuc?sira=50000&tur=say" | grep -bo -e "örnek satır" -e "Taban sıra" | head -2` ile karşılaştırılır); `tadimlik_goruntulendi` olayı 2 hafta içinde **≥1 adet** düşer (bugün 0). Havuz boşsa bileşen yine hiç render edilmez.
|
||
**Kapsam dışı:** tadımlık CTA'sının metni ve hedefi — o CEO'nun P5'inde, aynı dosyaya iki el değmesin. `/meraklisina` şeması etkilenmez (sihirbaz adımları, havuz kuralları, 24'lük iskelet değişmiyor).
|
||
|
||
**Önerilmeyenler (bilerek):** fiyat indirimi, ikinci paket, maskeyi 3→5, anonim rapor saklama, `/paket`'e yeni bölüm. Hepsi n=2 üzerine kurulur ya da M/L boy.
|
||
|
||
---
|
||
|
||
## Ödeyici kim olmalı — ve akış kime göre kurulmuş?
|
||
|
||
**Ödeyici veli olmalı; akış bugün tamamen öğrenciye göre kurulmuş.** Kanıt: `docs/urun/vizyon.md` "Veli modu: sürece para veren kişi çoğu zaman veli" diyor, ama kodda "veli" kelimesi **iki yerde** ve ikisi de aynı özellik satırı: "Veliyle paylaşılabilir PDF rapor" (`app/page.tsx:197`, `paket-satinal.tsx:36`). Veliye ait tek bir ekran, tek bir paylaşım bağlantısı, tek bir açıklama metni yok. Giriş Google/e-posta ile öğrenci hesabına bağlı (`giris-karti.tsx`), ödeme de aynı hesaptan yapılıyor (`odeme-actions.ts:37-40`) — yani **velinin ödeyebilmesi için öğrencinin hesabına girmesi gerekiyor.**
|
||
|
||
Ürün dili de öğrencinin: "senin sıralamana", "listen", "5 deneme kredin". Bu yanlış değil — listeyi yapan öğrenci, ve onu kaybetmemek gerekiyor. Ama para 18 yaşındakinin cebinde değil. **Bu bir ürün kararı olarak açılmalı ([BİLAL]), bu gece değil:** ödeme adımına velinin de tamamlayabileceği bir yol (ör. öğrencinin listesine ait paylaşılabilir salt-okunur özet + oradan ödeme) sezon öncesinde tanımlanmalı. Bugünkü hacimde ölçülemez, ama tercih dönemi (Haziran–Ağustos 2027) penceresinde bunun hazır olması gerekir. Şimdilik yalnız şunu not ediyorum: **PDF dışında veliye hitap eden hiçbir şey yok, ve PDF ödemenin arkasında.**
|
||
|
||
---
|
||
|
||
## Backlog önerileri (BACKLOG.md'ye bu gece dokunulmadı)
|
||
|
||
| Öneri | Kaynak | Ne yapılsın |
|
||
|---|---|---|
|
||
| #7 (`odeme_hata` + `/odeme/sonuc` doğrulaması) | mevcut backlog | **"onaylı"ya al ve sıranın başına koy.** Ö1 ile aynı iş; ödeme yolunun çalıştığı bugün hâlâ bilinmiyor. |
|
||
| **Yeni:** `/paket` girişsiz CTA'sı + `/giris` `/paket` callback metni | Ö2 | Yeni satır. Neden: `paket-satinal.tsx:136,141-143`; kabul kriteri yukarıda. |
|
||
| **Yeni:** Paket vaadi ↔ kredi mantığı çelişkisi | Ö3 | Yeni satır, durum `aday (Bilal kararı)`. |
|
||
| **Yeni:** `/sonuc` boş harita placeholder'ının kaldırılması | Ö4 | Yeni satır; CEO §5'teki "Ö4 ertelendi" kaydının ucuz yarısı olarak iliştirilsin. |
|
||
| **Yeni:** Tadımlığın `/sonuc`'ta tablo üstüne taşınması | Ö5 | Yeni satır. CEO P5 (tadımlık metni/hedefi) ile **aynı dosyaya** dokunuyor → aynı dalda birleştirilebilir. |
|
||
| **Yeni (sezon):** Veli ödeme yolu — problem tanımı ve PRD | bu rapor §"Ödeyici kim" | `aday`, hedef pencere: 2027 tercih dönemi öncesi (en geç Nisan 2027). Bugün iş değil, PRD konusu. |
|
||
| #13 (marka metinleri D3/D5/D6/D7) | mevcut backlog | D6 (özellik listesine havuz kısıtı + veri tarihi) Ö3 ile aynı dosyayı açıyor → birlikte sorulsun. |
|
||
| Kapanma adayı yok | — | Bu raporun hiçbir bulgusu mevcut bir backlog satırını geçersiz kılmıyor. |
|
||
|
||
**Sezon notu (4–8 hafta):** Ekim–Kasım tercih penceresi dışı. Bu dönemde ödeme dönüşümü **ölçülemez**; bu yüzden bu pencerede yapılacak iş "dönüşümü artırmak" değil, **kırık olanı düzeltmek ve ölçümü kurmak**tır. Takvime bağlı tek iş backlog #2 (KYK burs/kredi yazısı, 6 Ekim kilidi) ve o sırasında duruyor. Ö1 hariç hiçbir öneri tarihe bağlı değil.
|
||
|
||
---
|
||
|
||
## Bilal'den istenen (3 madde)
|
||
|
||
1. **Canlıda gerçek kartla tek bir ödeme yap ve sonuna kadar götür** (`/paket → /odeme → /odeme/sonuc`), sonra şunu söyle: `hasPaket` açıldı mı, kilit çözüldü mü, Rybbit'te `/odeme/sonuc` görüntülemesi düştü mü. Ödeme yolunun bugün çalıştığını kimse bilmiyor ve 30 günlük sıfırın bir kısmı bundan olabilir — **~10 dk**.
|
||
2. **Paket içeriği kararı (Ö3):** paketli kullanıcı liste/revizyon için kredi ödemeye devam etsin mi (o zaman "60 soru" metni düzelir), yoksa vizyondaki gibi liste pakete dahil mi olsun? Bugün ödeyen 0 kişi olduğu için bunun geri dönüş maliyeti sıfır; bir hafta sonra olmayabilir — **~5 dk**.
|
||
3. **İki satış cümlesi (Ö2):** `/paket`'te girişsiz ziyaretçinin birincil butonu ne yazsın (fiyatı ve satın almayı taşımalı), ve "Paketi sonra alırsın." yerine ücretsiz deneme nasıl ikincil olarak anlatılsın? Davranış değişikliği ajan yetkisinde, cümleler senin — **~10 dk**.
|
||
|
||
*(Listeden düşürdüklerim: fiyat kararı — n=2 ile sorulacak soru değil; maske satır sayısı — aynı sebep; veli ödeme yolu — sezon öncesine PRD olarak bırakıldı; Rybbit bağlama — madde 1 daha çok söyler.)*
|