feat(liste): danışman profili havuzu süzer (önce profil gevşetilir) + KVKK metin düzeltmeleri

- db.ts OzellikSuzgeci (dil, yalnız örgün, yalnız burslu, ücret üst sınırı)
  program_ozellik alt sorgusuyla; tablo yoksa süzgeç yok.
- rapor-havuzu: profilSuzgeci (ev ili + km → il listesi; sihirbazda il
  seçiliyse km uygulanmaz); havuz 24'ün altına düşerse gevşetme sırası
  profil → il → kategori. rapor.ts prompt'a 'danışmana söylediği tercihler'
  ve profil gevşetme notu; rapor-actions profili okuyup geçirir.
- /meraklisina şeması (huni-semasi SEMA + aria-label + figcaption) ve 4.
  bölüm metni yeni adım ve gevşetme sırasıyla eşitlendi (AGENTS.md kuralı).
- /api/soru: profil kaydı öncesi 'kaydedeyim mi?' onayı (PROFIL_ONAY_SOR).
- Gizlilik metni kodla eşitlendi: OpenRouter→DeepSeek (Anthropic değil),
  profil satırı, amaç+hukuki sebep, saklama süreleri, md. 11 hakları,
  18 yaş altı notu; unvan/adres ve aktarım dayanağı TODO. Giriş kartı:
  koşullar 'kabul', gizlilik 'okudum'. Sohbet girişine kişisel bilgi uyarısı.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-25 01:23:14 +03:00
parent aa2051732d
commit 5a04db7e4b
11 changed files with 385 additions and 86 deletions

View File

@@ -21,6 +21,13 @@ import { PUAN_TURLERI } from "@/types/yokatlas";
import { ACIK_SATIR } from "@/lib/rapor-maske";
const MAX_GECMIS = 12;
/**
* Profil kaydı öncesi "kaydedeyim mi?" onayı (KVKK Üretken YZ Rehberi:
* kişiselleştirme ayrı işleme faaliyeti; onaysız otomatik kayıt avukata
* sorulacak — docs/arastirma/2026-09-25-kisisellestirme/hukuk-ve-rakipler.md
* C.3/10). Bedeli: "evet" cevabı bir kredi. Kapatılırsa model doğrudan kaydeder.
*/
const PROFIL_ONAY_SOR = true;
const MAX_MESAJ_UZUNLUK = 2000;
function sistemPromptu(opts: {
@@ -63,9 +70,14 @@ KURALLAR:
aktar, yuvarlama dışında değiştirme. Bir soruda en fazla 2-3 araç çağır.
- PROFİL: aday bir tercih söylerse (yaşadığı il, evden en fazla kaç km,
vakıfta yıllık ücret sınırı, burs beklentisi, öğretim dili, uzaktan/açık
kabul mü, kampüs büyüklüğü) profil_guncelle ile kaydet ve cevabının
sonunda tek cümleyle söyle: "Şunu kaydettim: …". Emin değilsen önce sor,
tahminle kaydetme. Bunların DIŞINDA hiçbir şeyi kaydetme ve sorma:
kabul mü, kampüs büyüklüğü) ${PROFIL_ONAY_SOR
? `HEMEN KAYDETME: cevabının sonunda tek cümleyle sor: "Bunu profiline
kaydedeyim mi? (Listen ve aramalar buna göre süzülür; istediğin zaman
silebilirsin.)" Aday evet/kaydet derse o zaman profil_guncelle ile kaydet
ve "Kaydettim: …" de. Aday açıkça "kaydet" diye yazdıysa sormadan kaydet.`
: `profil_guncelle ile kaydet ve cevabının sonunda tek cümleyle söyle:
"Şunu kaydettim: …". Emin değilsen önce sor, tahminle kaydetme.`}
Bunların DIŞINDA hiçbir şeyi kaydetme ve sorma:
sağlık/engel, din, aile durumu, gelir, cinsiyet, siyasi görüş. Aday
bunları kendiliğinden yazsa bile profile YAZMA; yalnız cevabında dikkate al.
- Kadın/erkek öğrenci oranı üniversite genelidir (bölüm bazında veri yok);

View File

@@ -12,8 +12,16 @@ export const metadata: Metadata = sayfaMetadata({
path: "/gizlilik",
});
// NOT: MVP taslağıdır; yayına almadan önce hukuki gözden geçirme gerekir.
// NOT: 25 Eyl 2026 taslağı — v2 dalı. Yayına almadan önce hukuki gözden
// geçirme gerekir (docs/arastirma/2026-09-25-kisisellestirme/hukuk-ve-rakipler.md
// C.2). Kodun gerçekte yaptığıyla birebir örtüşmesi zorunludur: sağlayıcı,
// alanlar ya da süreler değişirse bu metin aynı commit'te güncellenir.
// TODO(bilal): veri sorumlusunun ticari unvanı ve adresi (Tebliğ md. 5/1-a).
// TODO(avukat): yurt dışı aktarımın dayanağı (standart sözleşme / Türkiye'de
// model) kesinleşince "Hizmet sağlayıcılar" bölümüne yazılacak; saklama
// süreleri onaylanacak.
export default function GizlilikPage() {
const baslik = "font-heading text-lg font-bold text-slate-900";
return (
<>
<main className="mx-auto w-full max-w-2xl px-4 py-16">
@@ -22,7 +30,7 @@ export default function GizlilikPage() {
Gizlilik ve Kişisel Verilerin Korunması
</h1>
<p className="mt-2 text-sm text-slate-500">
Son güncelleme: 2 Ağustos 2026
Son güncelleme: 25 Eylül 2026
</p>
</Parallax>
@@ -33,66 +41,187 @@ export default function GizlilikPage() {
strength={4}
className="mt-8 space-y-6 text-sm leading-7 text-slate-700"
>
<section>
<h2 className="font-heading text-lg font-bold text-slate-900">
Hangi verileri işliyoruz?
</h2>
<p className="mt-2">
KolayTercih; e-posta adresini (hesap oluşturma ve giriş için), YKS
başarı sıralamanı ve sihirbazda yaptığın seçimleri (tercih listeni
üretmek için), danışman sohbetine yazdığın mesajları (sorularını
yanıtlamak için) ve ödeme yaptığında sipariş kayıtlarını işler.
Kart bilgilerin bize hiç ulaşmaz; ödeme iyzico altyapısında
gerçekleşir.
</p>
<section className="rounded-2xl border border-slate-200 bg-slate-50 p-5">
<h2 className={baslik}>Kısa özet</h2>
<ul className="mt-2 list-disc space-y-1 pl-5">
<li>
Senden yalnız e-posta, başarı sıralaman, sihirbaz seçimlerin,
danışmana yazdıkların ve danışmana söyleyip kaydettiğin
tercihler alınır. Ad, kimlik numarası, adres, cinsiyet, sağlık
ya da gelir bilgisi istenmez.
</li>
<li>
Bunlar yalnız tercih listeni üretmek ve sorularını yanıtlamak
için kullanılır; satılmaz, reklam için kullanılmaz.
</li>
<li>
Danışmana yazdıkların yanıt üretilmesi için yurt dışındaki
yapay zekâ sağlayıcısına gider; adın ve e-postan gitmez.
</li>
<li>
Kaydedilen tercihlerini listem sayfasında görür, tek tıkla
silersin. Hesabını sildirmek için yazman yeterli.
</li>
<li>
18 yaşından küçüksen bu metni velinle birlikte oku.
</li>
</ul>
</section>
<section>
<h2 className="font-heading text-lg font-bold text-slate-900">
Ne için kullanıyoruz?
</h2>
<h2 className={baslik}>Veri sorumlusu</h2>
<p className="mt-2">
Verilerin yalnızca tercih önerileri üretmek, hesabını ve kredi
bakiyeni yönetmek ve sana hizmetle ilgili e-posta (giriş
bağlantısı, ödeme bilgilendirmesi) göndermek için kullanılır.
Verilerini üçüncü taraflara satmayız, reklam amacıyla paylaşmayız.
</p>
</section>
<section>
<h2 className="font-heading text-lg font-bold text-slate-900">
Hizmet sağlayıcılar ve yurt dışına aktarım
</h2>
<p className="mt-2">
Hizmeti çalıştırabilmek için birkaç dış sağlayıcıdan yararlanıyoruz
ve verinin bir kısmı yalnızca ilgili iş için bu sağlayıcılara
iletilir. Giriş bağlantısı ve bilgilendirme e-postaları Resend
üzerinden gönderilir; e-posta adresin bu amaçla Avrupa
Birliği&rsquo;ndeki (İrlanda) sunucularda işlenir. Ödemeler,
Türkiye&rsquo;de yerleşik iyzico altyapısında gerçekleşir. Danışman
sohbetine yazdığın mesajlar, yanıt üretilebilmesi için
Anthropic&rsquo;in yapay zekâ servisine (ABD) iletilir; bu mesajlar
sağlayıcının yapay zekâ modellerini eğitmek için kullanılmaz.
KVKK açısından bunlardan e-posta ve yapay zekâ sağlayıcısına yapılan
iletim yurt dışına aktarım sayılır ve hizmetin sunulabilmesi için
zorunludur.
</p>
</section>
<section>
<h2 className="font-heading text-lg font-bold text-slate-900">
Saklama ve silme
</h2>
<p className="mt-2">
Hesabını sildirmek veya verilerinin bir kopyasını istemek için{" "}
Bu sitedeki kişisel verilerin veri sorumlusu KolayTercih&rsquo;tir
[şirket unvanı ve adresi eklenecek]. Sorularını ve başvurularını{" "}
<Link href="/iletisim" className="text-primary underline">
iletişim sayfasındaki
</Link>{" "}
adresten bize yazabilirsin; talepler 30 gün içinde
sonuçlandırılır.
e-posta adresine iletebilirsin.
</p>
</section>
<section>
<h2 className="font-heading text-lg font-bold text-slate-900">
Çerezler ve analitik
</h2>
<h2 className={baslik}>Hangi verileri, ne için, hangi dayanakla işliyoruz?</h2>
<ul className="mt-2 list-disc space-y-2 pl-5">
<li>
<strong>E-posta adresin</strong> — hesap oluşturmak, giriş
bağlantısı ve ödeme bilgilendirmesi göndermek için.
Dayanak: seninle kurulan hizmet sözleşmesinin kurulması ve
ifası.
</li>
<li>
<strong>YKS başarı sıralaman ve sihirbaz seçimlerin</strong>{" "}
(ilgi alanı, il, devlet/vakıf, öncelikler) — 24&rsquo;lük tercih
listeni üretmek için. Dayanak: sözleşmenin ifası.
</li>
<li>
<strong>Danışman sohbetine yazdığın mesajlar</strong> —
sorularını listen bağlamında yanıtlamak için. Dayanak:
sözleşmenin ifası. Sohbete ad, telefon, kimlik numarası,
sağlık ya da aile bilgisi yazma; danışmanın bunlara ihtiyacı
yok ve bunları saklamak istemiyoruz.
</li>
<li>
<strong>Danışman profilin</strong> — sohbette söylediğin ve{" "}
<em>&ldquo;kaydedeyim mi?&rdquo;</em> sorusuna evet dediğin
tercihler: yaşadığın il, evden en fazla kaç km, vakıfta yıllık
ücret üst sınırı, burs beklentin, öğretim dili, uzaktan/açık
öğretim kabulün, kampüs büyüklüğü tercihin. Bu alanlar sabit
bir listedir; serbest metin kaydedilmez, sağlık, din, gelir ya
da cinsiyet gibi bilgiler bu profile hiçbir zaman yazılmaz.
Profil yalnız senin listeni ve danışman aramalarını süzmek için
kullanılır; reklam, pazarlama ya da e-posta için kullanılmaz.
Profil boşken de hizmet tam çalışır. Listem sayfasındaki
&ldquo;Kaydettiklerim&rdquo; çiplerinden her alanı görür ve tek
tıkla silersin. Dayanak: senin talimatınla sözleşmenin ifası.
</li>
<li>
<strong>Sipariş kayıtların</strong> (paket alırsan) — fatura
ve muhasebe yükümlülüğü için. Kart bilgilerin bize hiç ulaşmaz;
ödeme iyzico altyapısında gerçekleşir. Dayanak: hukuki
yükümlülük.
</li>
<li>
<strong>Kullanım ölçümü</strong> — hangi sayfaların
görüntülendiği ve hangi adımların tamamlandığı (aşağıda
&ldquo;Çerezler ve analitik&rdquo;). Dayanak: siteyi
geliştirmeye yönelik meşru menfaatimiz.
</li>
</ul>
<p className="mt-2">
Verilerini üçüncü taraflara satmayız, reklam amacıyla
paylaşmayız. Program ve üniversite bilgileri (taban sıralamaları,
ücretler, öğrenci sayıları, kadın/erkek oranı) kişisel veri
değildir; YÖK Atlas ve YÖK İstatistik&rsquo;ten alınır ve
sayfalarda kaynağıyla gösterilir.
</p>
</section>
<section>
<h2 className={baslik}>Hizmet sağlayıcılar ve yurt dışına aktarım</h2>
<p className="mt-2">
Hizmeti çalıştırabilmek için birkaç dış sağlayıcıdan yararlanıyoruz
ve verinin yalnız ilgili iş için gereken kısmı bu sağlayıcılara
iletilir:
</p>
<ul className="mt-2 list-disc space-y-2 pl-5">
<li>
<strong>Resend (İrlanda)</strong> — giriş bağlantısı ve
bilgilendirme e-postaları; e-posta adresin bu amaçla Avrupa
Birliği&rsquo;ndeki sunucularda işlenir.
</li>
<li>
<strong>iyzico (Türkiye)</strong> — ödeme.
</li>
<li>
<strong>Yapay zekâ sağlayıcısı</strong> — danışman sohbetine
yazdığın mesajlar, listendeki program bilgileri ve kaydettiğin
tercihler, yanıt üretilebilmesi için OpenRouter (ABD) aracılığıyla
kullandığımız dil modelinin sağlayıcısına (bugün DeepSeek)
iletilir. Adın ve e-postan modele gönderilmez. Tercih listeni
üreten yapay zekâ da aynı yoldan çalışır; ona sıralaman,
seçimlerin ve aday program havuzu gider.
</li>
</ul>
<p className="mt-2">
KVKK açısından e-posta ve yapay zekâ sağlayıcısına yapılan iletim
yurt dışına aktarımdır ve hizmetin sunulabilmesi için gereklidir.
Sağlayıcı değişirse bu bölüm aynı gün güncellenir.
</p>
</section>
<section>
<h2 className={baslik}>Saklama ve silme</h2>
<ul className="mt-2 list-disc space-y-1 pl-5">
<li>
Sohbet mesajların ve danışman profilin: hesabın açık kaldığı
sürece; her ikisini de listem sayfasından kendin silebilirsin.
Tercih döneminin bitiminden 12 ay sonra sohbet mesajları ve
profil silinir.
</li>
<li>
Hesabını sildirme ya da verilerinin kopyasını isteme talebin
30 gün içinde sonuçlandırılır; işlenme sebebi ortadan kalkan
veri en geç 3 ay içinde silinir.
</li>
<li>
Sipariş ve fatura kayıtları vergi mevzuatı gereği 10 yıl
saklanır.
</li>
</ul>
</section>
<section>
<h2 className={baslik}>Hakların</h2>
<p className="mt-2">
KVKK&rsquo;nın 11. maddesi gereği bize başvurarak şunları
yapabilirsin: verilerinin işlenip işlenmediğini öğrenmek,
işlendiyse bilgi istemek, amacına uygun kullanılıp
kullanılmadığını öğrenmek, aktarıldığı üçüncü kişileri bilmek,
eksik ya da yanlış işlenmişse düzeltilmesini istemek,
silinmesini ya da yok edilmesini istemek, bu işlemlerin
aktarıldığı üçüncü kişilere bildirilmesini istemek, yalnızca
otomatik sistemlerle analiz edilmesi sonucu aleyhine bir sonuç
çıkmasına itiraz etmek ve kanuna aykırı işleme yüzünden zarara
uğradıysan tazminat istemek. Başvurunu{" "}
<Link href="/iletisim" className="text-primary underline">
iletişim sayfasındaki
</Link>{" "}
e-posta adresine yaz; en geç 30 gün içinde yanıtlarız.
</p>
</section>
<section>
<h2 className={baslik}>18 yaşından küçüksen</h2>
<p className="mt-2">
Bu metni velinle birlikte oku. Paket satın alınacaksa ödemeyi
velin yapmalı. Verilerin hiçbir şekilde pazarlama için
kullanılmaz.
</p>
</section>
<section>
<h2 className={baslik}>Çerezler ve analitik</h2>
<p className="mt-2">
Yalnızca oturumunu açık tutmak için zorunlu çerezler kullanılır;
reklam veya izleme çerezi kullanılmaz. Siteyi geliştirebilmek için
@@ -105,7 +234,8 @@ export default function GizlilikPage() {
yalnızca sorun giderme ile destek amacıyla kullanılır. Başarı
sıralaman analitiğe ham hâliyle
gönderilmez; yalnızca &ldquo;50-100 bin&rdquo; gibi geniş bir
aralık olarak kaydedilir.
aralık olarak kaydedilir. Danışman profilindeki değerler
analitiğe gitmez; yalnız hangi alanın kaydedildiği sayılır.
</p>
</section>
</Parallax>