Commit Graph

11 Commits

Author SHA1 Message Date
bilalgursen
ea4b30a842 fix(sonuc): harita en üste çıkar, liste sayısı çerezi kaymayı sıfırlar
Manuel listenin haritası /sonuc'ta tablonun altından sayfanın en üstüne
alındı: listesini kurmuş ziyaretçi ekranda önce kendi listesini görür.
Liste boşken harita DOM'a hiç girmez — yer tutucu da çizilmez, tadımlık
main'in ilk çocuğu kalır ve first:mt-0 çalışmayı sürdürür. Yani ürünü ilk
kez gören ziyaretçide sayfa sırası hiç değişmiyor.

Çerez neden gerekti: manuel liste localStorage'ta yaşıyor, store'un sunucu
snapshot'ı her zaman boş liste dönüyor. Harita yukarıdayken kayıtlı liste
ancak hidrasyondan sonra okunabildiği için harita sonradan belirip sayfayı
itiyordu (mobilde ~146 px, masaüstünde ~368 px; CLS ~0,13 / ~0,35). Client
artık listenin yalnızca UZUNLUĞUNU kolaytercih.liste-sayi çerezine aynalıyor
(kişisel veri ya da program kimliği yok, öznitelikleri kolaytercih.profil ile
birebir aynı); sunucu bunu okuyup haritaya ilk boyada tam ölçülü yer ayırıyor,
chunk inince kutunun yalnızca içi doluyor. Çerez hidrasyona kadar geçerli:
store okunduktan sonra tek doğru kaynak listenin kendisi, böylece bayat çerez
ya da çekmeceden boşaltılan liste durumunda boş harita ekranda kalmıyor.

Yanında: harita iskeletine motion-reduce:animate-none (artık katlamanın
üstünde, durdurulamaz nabız gösterilmemeli), yurt dışı şeridine sabit
yükseklikli loading yer tutucu (ssr:false + loading'siz dynamic, yoktan
beliren ~104 px). Kararın tersini belgeleyen üç yorum bloğu da güncellendi.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-23 10:58:53 +03:00
bilalgursen
e3519a50cc [Bilal] content(tadimlik): paragraf maskenin gerçeğini söyler
Buton "24 satırın tamamı" iddiasından arındırılmıştı (2373a9a) ama iki
eleman yukarıdaki paragraf aynı vaadi sürdürüyordu: "24 tercihlik
listenin her satırı bu formatta kurulur". Maske girişsiz/paketsiz
kullanıcıya 3 satır açıyor (rapor-maske.ts:12 ACIK_SATIR), kalan 21'in
gerekçe/risk/trend metni maskeli geliyor.

Cümleye "ilk üçü hemen açılır" eklendi — sayı yazıldı, bulanıklaştırma
ve garanti dili yok. "3" elle yazıldığı için (ACIK_SATIR `server-only`,
bu dosya "use client") tek kaynak bağı koda yorum olarak iliştirildi.

Bulgu: 36-tasarimci-g1-ve-navbar.md B2. Metin yönü Bilal'in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 23:21:31 +03:00
bilalgursen
e9126650c3 fix(sonuc): harita tablonun altına alınır — hidrasyon kayması kapanır
Liste store'unun sunucu snapshot'ı her zaman boş liste döner
(liste-store.ts:86), kayıtlı manuel liste ancak hidrasyondan sonra
okunur. Harita sayfanın tepesindeyken kayıtlı listesi olan dönüş
ziyaretçisinde ~368 px yüksekliğinde sonradan beliriyor ve tadımlık ile
tabloyu aşağı itiyordu; main'in ilk çocuğu olduğu için impact fraction
~1, CLS eşiğinin çok üstü. Silinen placeholder bunu yeri sunucuda
rezerve ederek engelliyordu.

Harita tablonun altına alındı: sonradan belirdiğinde yalnızca sihirbaz
ile dipnotu iter, ikisi de katlanın altında. Bilgi mimarisi olarak da
doğru sıra — harita, tablodan kurulan listenin görselleştirmesi.

Yeni sıra: tadımlık → tablo → harita → sihirbaz → dipnot.
Sıraya bağlı stiller yeni sıraya göre doğrulandı: tadımlığın
first:mt-0'ı artık her durumda geçerli (üstünde kardeş kalmadı), harita
kendi mt-16'sını alıyor (tablo section'ı ve sihirbaz kartlarıyla aynı
ritim — eskiden üst boşluğu main'in py-12'sinden geliyordu).

Bulgu: 36-tasarimci-g1-ve-navbar.md B1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 23:20:34 +03:00
bilalgursen
d2e11908ba [Bilal] content(tadimlik): CTA'nın yeni vaadi
ÖNERİ — tek başına düşürülebilir (git reset --hard HEAD~1). Bir önceki
commit yalnız yanlış iddiayı kaldırdı ve kendi başına tutarlı; bu commit
CTA'ya yeni bir cümle öneriyor, karar Bilal'in.

Buton: "Giriş yap ve listeni oluştur" -> "Kendi listemi oluştur"
Alt satır: "· Giriş sonrası liste hemen üretilir" eklenir.

Sayı YOK ve bilerek: ACIK_SATIR (rapor-maske.ts, server-only) ve
DENEME_KREDISI (credits.ts, appdb import ediyor) bu "use client" dosyaya
import edilemez; elle "3"/"5" yazmak tek kaynak kuralını bozar.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 02:21:15 +03:00
bilalgursen
2373a9a526 content(tadimlik): teslim edilmeyen "24 satırın tamamı" iddiası kalkar
Maske girişsiz kullanıcıya 24 satırın tamamını değil yalnız ilk birkaçının
analizini açıyor (rapor-maske.ts); "5 deneme kredin hazır" da butonun
götürdüğü yerin sözü değil. Buton metni yeni vaat eklemeden yanlış olanı
bırakıyor: "Giriş yap ve listeni oluştur". Kanonik sağ ok yerinde duruyor.

Üstteki "Bu, 24 satırlık Yapay Zeka listenden yalnızca bir örnek." cümlesi
doğru olduğu için değişmedi — üretilen liste gerçekten 24 satır.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 02:20:57 +03:00
bilalgursen
72ef3b8669 fix(tadimlik): CTA girişten dönüşte üretimi başlatır
Tadımlık CTA'sının giriş callback'i sonucHref() yerine
listemUretHref("tadimlik") — kullanıcı /sonuc'a geri bırakılmak yerine
üretimin koştuğu /listem'e iner, liste ek tık olmadan başlar.
"tadimlik" IZINLI_KAYNAKLAR'a eklendi, yoksa ölçüm "bilinmiyor"a düşerdi.

Ayrıca tadimlik_goruntulendi'nin üstüne seri kırılması notu: olay bugüne
kadar sayfanın ~2.200 px altında yaşıyordu, bundan sonra ilk ekranda —
iki dönem karşılaştırılamaz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 02:18:45 +03:00
bilalgursen
552d5ce5f1 fix(sonuc): tadımlık tablonun üstüne alınır
Yeni sıra: ManuelHarita -> TadimlikBolumu -> SonucProgramTablosu. Tadımlık
ödeme öncesi gösterebildiğimiz tek gerçek önizleme; tablonun ~1.500 px
altında değil ilk ekranda durmalı. Props ve bileşen içleri değişmedi.

Tadımlık <section>'ına first:mt-0: harita boş durumda null döndüğü için bu
bölüm main'in ilk DOM çocuğu olabiliyor, main'in py-12'si yeterli.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-22 02:17:57 +03:00
bilalgursen
ceeb70375d feat(veri): bileşenler yılsız Program'a ve veri-yillari sözlüğüne geçti (P-B b)
- SiraSerisi = { siraGecmisi, ilkYil? }; yardımcılar dizinin kendi son iki
  elemanıyla çalışır, yıl ilkYil + indeks. raporSiraSerisi diziyi doldurmaz:
  5 elemanlı eski raporlar 2024→2025 trendini göstermeye devam eder.
- Tablo başlıkları "Son ${VERI_YIL_SAYISI} yıl"; rapor listesi başlığı kaydın
  kendi pencere uzunluğunu söyler (eski rapor: 5).
- siraYiliEtiketi SON_YIL/ONCEKI_YIL'dan; bölüm/üniversite sayfa metinleri ve
  metadata SON_YIL, TERCIH_YILI, BASLIK_YILI sözlüğünden.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-21 17:00:39 +03:00
bilalgursen
ce6871d623 refactor: güncellenmiş profil çerezi ile sonuç sayfası yönlendirmeleri
Some checks failed
Deploy / deploy (push) Has been cancelled
Profil çerezinin SSR'da kullanılmasını sağlayarak, sonuç sayfasındaki yönlendirmeleri güncelledik. Artık profil bilgileri URL parametreleri yerine çerezden alınarak işleniyor. Ayrıca, profil çerezi olmayan kullanıcılar için yönlendirme mantığı iyileştirildi. Çeşitli bileşenlerdeki URL oluşturma fonksiyonları güncellenerek, profil bilgileri çerezden okunacak şekilde düzenlendi. Bu değişiklikler, kullanıcı deneyimini artırmayı ve daha tutarlı bir veri akışı sağlamayı hedefliyor.
2026-08-09 03:31:42 +03:00
bilalgursen
14f9b622b0 feat: tadımlık havuzuna üniversite tipi boyutu
Tadımlık satırı batch üretildiği için sihirbazdaki devlet/vakıf seçimini
bilmiyor, vakıf seçen kullanıcıya devlet örneği gösteriyordu. Havuz
anahtarı kova×tür×kategori×tip'e genişledi (migration 0001; mevcut
satırlar tip='genel'). Üretim scripti tip varyantlarını uniturGrubu
filtresiyle seçer; tadimlikSec tip verildiğinde kategori→genel fallback'i
korur ama tip fallback'i YAPMAZ — uygun satır yoksa bileşen gizlenir,
yanlış tipte örnek asla gösterilmez. Client profildeki tipi de gönderir ve
SSR "genel" satırı tipe uymuyorsa fetch bitene kadar gizler.

Not: prod app.db volume'de — `pnpm tadimlik` prod DB'ye karşı ayrıca
koşulmalı.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-09 00:12:25 +03:00
bilalgursen
fbd184e2be refactor: rapor feature'ı — listem, yazdır, sohbet ve actions taşındı (Faz 8)
- app/sonuc/actions.ts → features/rapor/rapor-actions.ts birebir taşındı
  (kredi harcama/iade idempotency yolları bayt bayt aynı, yalnızca import
  yolları değişti); liste-uretici/revizyon-kutusu action'ı doğrudan import
  ediyor
- lib/rapor-kaydi.ts rapor-queries.ts'e emildi: kullanicininRaporu aynı tek
  okuma kapısı; listem sayfasındaki inline drizzle sorgusu sohbetGecmisiGetir
  oldu; tadimlikSec re-export'u eklendi
- listem-govde, sohbet-client, revizyon-kutusu, liste-uretici, listem-bos-cta,
  rapor-listesi, tadimlik-satiri, yazdir-butonu features/rapor/components/'a
- Yeni async ListemIcerik (verifySession + maskeleme + bosDurum dalı içeride;
  çift await searchParams kalktı) ve RaporYazdir (3 redirect + yazdırılabilir
  belge); skeleton'lar eski loading.tsx geometrileriyle aynı dosyada
- /listem ve /rapor/yazdir senkron: searchParams.then() + sayfada Suspense;
  maxDuration=300 ve metadata sayfada kaldı; iki loading.tsx silindi
- Davranış değişikliği yok; /api/soru el değmedi

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-08 01:39:33 +03:00