# Rıza Emre ARAS

> **Full site content — every page that ships an llms.txt, in a single file.**
>
> **EN:** All 5 pages of emrearas.com (the CV, the AI page and every blog post),
> concatenated from each page's `llms.txt`. Pages are separated by a rule of
> exactly 80 dashes, and each page opens with the `path:` coordinate it came
> from — so this file holds 5 such separators and 5 `path:` lines. A plain
> `---` inside a page is that page's own horizontal rule, NOT a page break.
> Interactive components (diagrams, figures, the chat widget) are replaced by their
> source data or a short directive — read those as data pointers, not missing
> content.
>
> **TR:** emrearas.com'un 5 sayfasının tamamı (özgeçmiş, AI sayfası ve tüm blog
> yazıları), her sayfanın `llms.txt` dosyasından birleştirildi. Sayfalar tam
> olarak 80 çizgilik bir ayraçla ayrılır ve her sayfa geldiği `path:`
> koordinatıyla başlar — yani bu dosyada 5 ayraç ve 5 adet `path:` satırı
> vardır. Sayfa içindeki düz `---` o sayfanın kendi yatay çizgisidir, sayfa
> ayracı DEĞİLDİR. İnteraktif bileşenler (diyagram, görsel, sohbet aracı)
> kaynak verisiyle veya kısa bir direktifle değiştirildi — eksik içerik değil,
> veri işaretçisi olarak okuyun.

**locale:** tr · **pages:** 5 · **en:** https://www.emrearas.com/llms-full.txt?locale=en

--------------------------------------------------------------------------------

**path:** / · **locale:** tr · **en:** https://www.emrearas.com/llms.txt?locale=en

# Rıza Emre ARAS

**Bilgisayar Mühendisi**

Gizlilik odaklı ağ sistemleri ve yapay zeka destekli araçlar geliştiriyorum. ARTEK bünyesinde çalışıyor, boş vakitlerimde açık kaynak projeler üretiyorum.

- [GitHub](https://github.com/remrearas)
- [E-posta](mailto:emre@aras.tc)
- PGP genel anahtarı sayfada bir modal içinde sunulur.

## İş / Deneyim

- **ARTEK İnovasyon Ar-Ge Sanayi ve Ticaret Limited Şirketi** — Ar-Ge Müdürü · 2024 – Günümüz

## Öne Çıkan Projeler

- [Phantom-WG](https://github.com/ARAS-Workspace/phantom-wg): kendi sunucunuzda WireGuard VPN altyapısı kurmanızı ve yönetmenizi sağlayan modüler araç — sansüre dayanıklı bağlantılar, çok katmanlı şifreleme ve gelişmiş gizlilik senaryoları (WireGuard, VPN, Sansür Direnci, Gizlilik).
- [ARTEK Homepage](https://github.com/ARAS-Workspace/artek-homepage): React ve Carbon Design System ile oluşturulmuş, çoklu dil desteğine sahip modern kurumsal web sitesi (React, Carbon Design).
- [Claude-KVM](https://github.com/ARAS-Workspace/claude-kvm): VNC protokolü üzerinden uzak masaüstü ortamlarını kontrol eden MCP aracı — ince bir JS proxy katmanı (MCP server) ve macOS'ta çalışan platforma native bir Swift VNC daemon (MCP, VNC, AI Otomasyonu, Swift).
- [EU AI Act RAG](https://github.com/ARAS-Workspace/eu-ai-act-rag): Avrupa Yapay Zeka Yasası — Regulation (EU) 2024/1689 temelli tam donanımlı RAG pipeline örneği (RAG, LLM, AB YZ Yasası, EUR-Lex, SPARQL, Anlamsal Ağ).

## Akademik Çalışmalar

- **A discovery and analysis engine for semantic web** — S. Yumusak, A. Kamilaris, E. Dogdu, H. Kodaz, E. Uysal, **R. E. Aras** — Companion Proceedings of the Web Conference (WWW) · 2018
- **SpEnD portal: Linked data discovery using SPARQL endpoints** — S. Yumusak, **R. E. Aras**, E. Uysal, E. Dogdu, H. Kodaz, K. Oztoprak — IEEE International Conference on Big Data · 2017
- [Google Scholar profili](https://scholar.google.com/citations?hl=tr&user=3Cp2Dc4AAAAJ): tüm yayınlar ve atıflar.

## Eğitim

- **KTO Karatay Üniversitesi** — Bilgisayar Mühendisliği (Lisans) · 2015 – 2020

## Yetenekler

TypeScript, JavaScript, Python, Go, Rust, Swift, C / FFI, React, Cloudflare Workers, Docker, WireGuard, RAG / LLM, SPARQL & Anlamsal Ağ, MCP, CI/CD, Sistem Otomasyonu, Gizlilik & Ağ Güvenliği

## İletişim

Projeler ve iş birlikleri için bana ulaşabilirsiniz.

- [github.com/remrearas](https://github.com/remrearas)
- [github.com/ARAS-Workspace](https://github.com/ARAS-Workspace)
- [linkedin.com/in/remrearas](https://www.linkedin.com/in/remrearas/)
- [emre@aras.tc](mailto:emre@aras.tc)

--------------------------------------------------------------------------------

**path:** /ai · **locale:** tr · **en:** https://www.emrearas.com/ai/llms.txt?locale=en

# AI

> [AIChatAssistant] Site ajanıyla etkileşimli sohbet — sitenin içeriğiyle beslenen Claude tabanlı bir asistan. Canlı sayfada /ai adresinde kullanılabilir.

## Referanslar

| Kaynak                        | Adres                                                                                                                      |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Organizasyon (ARAS-Workspace) | [github.com/ARAS-Workspace](https://github.com/ARAS-Workspace)                                                             |
| Depo (emrearascom-www)        | [github.com/ARAS-Workspace/emrearascom-www](https://github.com/ARAS-Workspace/emrearascom-www)                             |
| Worker                        | [workers/ai-worker](https://github.com/ARAS-Workspace/emrearascom-www/tree/main/workers/ai-worker)                         |
| React Arayüz Bileşeni         | [src/shared/components/ai-chat](https://github.com/ARAS-Workspace/emrearascom-www/tree/main/src/shared/components/ai-chat) |

## Gizlilik

Ajan ile olan iletişiminiz sonrasında ajan performansını ölçebilmek ve çıktıları
gözlemleyebilmek adına kayıt altına alınmaktadır. Bu durum
[Gizlilik Bildirimi](/privacy) sayfasında detaylı bir şekilde açıklanmıştır.

--------------------------------------------------------------------------------

**path:** /blog/hello-world · **locale:** tr · **en:** https://www.emrearas.com/blog/hello-world/llms.txt?locale=en

# Merhaba Dünya

Öncelikli olarak bu yazıya ve blog alanıma gösterdiğiniz ilgi için teşekkür ederim.

Burası, kişisel teknik yazılarımı bir araya getirdiğim bir alan olacak. Üzerinde çalıştığım projeleri, ağ ve gizlilik teknolojilerine dair notlarımı, yapay zeka destekli araçları ve yol boyunca edindiğim gözlemleri burada paylaşmayı planlıyorum. Amacım, dağınık halde duran bu bilgiyi düzenli ve kalıcı bir biçimde bir araya getirmek. Hem içeriğin hem de onu üreten sistemin baştan sona açık kaynak olması da bu yaklaşımın bir parçası.

İlk yazımda sizlere tasarladığım blog sisteminin nasıl çalıştığından bahsedeceğim.

## Bu Blog Nasıl Çalışıyor?

Blog sisteminin mimarisi, dosya tabanlı bir yayın sistemine dayanıyor. İçerik bir veritabanında değil, deponun içinde düz dosyalar olarak durur. Her yazı `src/pages/blog/posts/<slug>/` altında kendi dizinini işgal eder. Sistem üç katmandan oluşur:

- **Derleme Hattı** ([route-sources.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/lib/route-sources.js)). İçeriği diskten toplar ve yayına hazırlar.
- **Prerender Katmanı** ([prerender.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/utils/prerender-utility/prerender.js)). Her sayfayı statik HTML'e dönüştürür.
- **Cloudflare Worker** ([\_worker.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/utils/prerender-utility/_worker.js)). Elde edilen çıktıyı edge üzerinde, isteğe göre sunar.

### Sistem Mimarisi ve Tasarımı

Router tek yetkili kaynaktır ve blog için yalnızca iki satır tutar. Biri `/blog` liste sayfası, diğeri `/blog/:slug` yazı çözücüsüdür. Somut yazı rotaları router'a elle yazılmaz. Derleme sırasında [route-sources.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/lib/route-sources.js) diski tarar ve `posts/` altında `meta.json` içeren her dizini bir rotaya genişletir. Bu yüzden bir yazıyı yayına almak dizini eklemekten ibarettir. Aynı rota haritası üç ayrı tüketici tarafından paylaşılır:

- **Rota Listesi** ([build\_routes.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/build_routes.js)). Prerender aşamasında işlenecek somut adreslerin kaynağını oluşturur.
- **llms.txt Üretimi** ([generate-llms.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/generate-llms.js)). Her yazının makine tarafından okunabilir metin sürümünü türetir.
- **llms.txt Birleştirme** ([build-llms.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/build-llms.js)). Tüm sayfaların metin sürümlerini tek bir toplu belgede birleştirir.

Prerender katmanı her rotayı **Playwright** ile gerçek bir tarayıcıda gezer ve statik HTML üretir. Çıktı dosyaları dil ve tema başına ayrılır. Runtime bağımlılığı yoktur.

Statik çıktıyı edge üzerinde [\_worker.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/utils/prerender-utility/_worker.js) sunar. **Cloudflare Worker**, isteğin diline ve temasına göre doğru HTML dosyasını seçer. `/blog/<slug>/llms.txt` isteğini aynı yazının makine-okunur metin haline yönlendirir. Önbellek politikasını da worker belirler. Hash'li derleme çıktısı, yani `/assets/*.js` ve `/assets/*.css`, kalıcıdır ve uzun süre önbelleklenir. Belge dosyaları her istekte yeniden doğrulanır, çünkü onlar geçerli hash'lere işaret eden haritadır.

### Örnek Senaryo

Bir yazının başından yayına izlediği yol nettir. Önce iskelet üretilir.

```bash
npm run new-post hello-world
```

Bu komut [post-tool.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/post-tool.js) üzerinden `src/pages/blog/posts/hello-world/` dizinini açar. Dizin `meta.json`, `index.mdx` ve `index.en.mdx` dosyalarını içerir. Ardından üst veri ve gövdeler doldurulur. `meta.json` içinde başlık, açıklama ve etiketler `seo.tr` ile `seo.en` altında yer alır. Gövdede `#` kullanılmaz. Başlıklar `##` seviyesinden başlar ve H1 değeri `seo.title` alanından üretilir. Metin iki dilde **MDX** olarak yazılır.

Yazı yerelde önizlenir.

```bash
npm run dev
# https://localhost:5173/blog/hello-world
```

İçerik son halini alınca makine-okunur metin üretilir ve değişiklik kayda geçer.

```bash
npm run generate-llms
git add src/pages/blog/posts/hello-world
git commit -m "Blog Post: Merhaba Dünya / İlk yazı ve dosya tabanlı yayın sisteminin tanıtımı"
git push
```

Push anına kadar olan bölüm tümüyle elle yürür. Push sonrası tümüyle otomatiktir. `main` dalına gelen her push, [**GitHub Actions** Dağıtım İş Akışını](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/.github/workflows/deploy-emrearascom-www.yml) tetikler. İş akışı üç aşamada ilerler:

1. **Doğrulama.** llms dosyalarını yeniden üretir; sonuç commit'lenmiş sürümden farklıysa derlemeyi durdurur.
2. **Derleme.** `npm run prod` ile kapak görsellerini üretir, projeyi derler, rotaları çıkarır, her sayfayı prerender eder ve llms dosyalarını dağıtım dizinine taşır.
3. **Dağıtım.** **wrangler**, çıktıyı **Cloudflare Pages** projesine göndererek [www.emrearas.com](https://www.emrearas.com)'u günceller.

Aşağıdaki diyagram, `main` dalına gelen push'un tetiklediği Dağıtım İş Akışını gösterir.

```mermaid
flowchart TD
  push["git push (main)"] --> ci["GitHub Actions"]
  ci --> install["npm ci"]
  install --> drift{"Üretilen llms<br/>commit ile aynı mı?"}
  drift -->|Hayır| stop["Derleme durur"]
  drift -->|Evet| build["npm run prod"]
  build --> deploy["wrangler pages deploy"]
  deploy --> pages["Cloudflare Pages (www.emrearas.com)"]
```

### İçerik Yönetimi

Bir yazının tüm durumu kendi dizininde toplanır. Üst veri `meta.json` dosyasında durur. Oluşturma ve güncelleme tarihleri, yazar alanı ve dil başına SEO bilgileri buradadır. Metnin kendisi iki dilde **MDX** olarak yazılır. Bu iki kaynaktan birkaç çıktı otomatik türetilir.

#### llms.txt Yapısı

Her yazı, insanların okuduğu HTML'in yanında makinelerin okuduğu bir metin sürümü taşır. [generate-llms.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/generate-llms.js) **MDX** kaynağını **agentic-data-builder** aracından geçirir ve `llms/tr.txt` ile `llms/en.txt` dosyalarını üretir. Başlık gövdede bulunmadığından, üretici `seo.title` değerini dosyanın başına H1 olarak ekler. Bu dosyalar commit edilir. Derleme sırasında [build-llms.js](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/build-llms.js) onları dağıtım dizinine kopyalar ve tüm sayfaları tek bir dosyada birleştirir. **Cloudflare Worker**, `Accept: text/markdown` başlığı taşıyan isteğe ya da doğrudan `llms.txt` isteğine bu metni döner. Böylece aynı adres hem insana hem makineye hizmet eder.

#### Kapak Görseli

Her yazının **Open Graph** kapak görseli elle hazırlanmaz. [Kapak Üreticisi](https://github.com/ARAS-Workspace/emrearascom-www/blob/34aae0ee5bcb1f4b9eb2ec74d7831429e127836d/scripts/generate-covers.js) başlık ve açıklamadan 1200x630 boyutunda bir PNG üretir. Bu dosya build ürünüdür ve `og:image` alanına bağlanır. Yeni bir yazının kapağı, prod derlemesi sırasında kendiliğinden oluşur. Bu yazının kapağı da aynı yolla üretildi.

> [Figure] interactive component — see the live page.

#### SEO Katmanı

Her yazı sayfası dile göre canonical, hreflang, **Open Graph** ve **Twitter** etiketleri üretir. Bunların yanında yapısal veri olarak **JSON-LD** gömülür. Liste sayfası bir Blog şeması, yazı sayfası bir BlogPosting şeması taşır.

Liste sayfası (`/blog`):

```json
{
  "@context": "https://schema.org",
  "@type": "Blog",
  "@id": "https://www.emrearas.com/blog#blog",
  "url": "https://www.emrearas.com/blog",
  "name": "Blog",
  "description": "Kişisel Yazılarım",
  "inLanguage": "tr-TR",
  "isPartOf": {
    "@type": "WebSite",
    "@id": "https://www.emrearas.com/#website",
    "name": "Rıza Emre ARAS",
    "url": "https://www.emrearas.com"
  },
  "author": {
    "@type": "Person",
    "@id": "https://www.emrearas.com/#person",
    "name": "Rıza Emre ARAS",
    "url": "https://www.emrearas.com"
  },
  "publisher": {
    "@type": "Person",
    "@id": "https://www.emrearas.com/#person",
    "name": "Rıza Emre ARAS",
    "url": "https://www.emrearas.com"
  }
}
```

Yazı sayfası (`/blog/hello-world`):

```json
{
  "@context": "https://schema.org",
  "@type": "BlogPosting",
  "@id": "https://www.emrearas.com/blog/hello-world#post",
  "url": "https://www.emrearas.com/blog/hello-world",
  "mainEntityOfPage": "https://www.emrearas.com/blog/hello-world",
  "headline": "Merhaba Dünya",
  "description": "İlk yazı ve dosya tabanlı yayın sisteminin tanıtımı",
  "inLanguage": "tr-TR",
  "datePublished": "2026-07-24T16:40:00+03:00",
  "dateModified": "2026-07-24T16:40:00+03:00",
  "author": {
    "@type": "Person",
    "@id": "https://www.emrearas.com/#person",
    "name": "Rıza Emre ARAS",
    "url": "https://www.emrearas.com"
  },
  "publisher": {
    "@type": "Person",
    "@id": "https://www.emrearas.com/#person",
    "name": "Rıza Emre ARAS",
    "url": "https://www.emrearas.com"
  },
  "isPartOf": { "@id": "https://www.emrearas.com/blog#blog" },
  "keywords": ["Blog", "Açık Kaynak", "Mimari", "Merhaba Dünya!"],
  "image": "https://www.emrearas.com/assets/blog/hello-world/cover.tr.png"
}
```

## Lisans

Bu site ve kaynak kodu, GNU Affero General Public License sürüm 3.0 veya sonrası (AGPL-3.0-or-later) kapsamında sunulmaktadır.

## Açık Kaynak

| Kaynak                        | Adres                                                                                          |
| ----------------------------- | ---------------------------------------------------------------------------------------------- |
| Kişisel Hesap                 | [github.com/remrearas](https://github.com/remrearas)                                           |
| Organizasyon (ARAS-Workspace) | [github.com/ARAS-Workspace](https://github.com/ARAS-Workspace)                                 |
| emrearascom-www (Bu Site)     | [github.com/ARAS-Workspace/emrearascom-www](https://github.com/ARAS-Workspace/emrearascom-www) |

--------------------------------------------------------------------------------

**path:** /blog/how-to-works-site-agent · **locale:** tr · **en:** https://www.emrearas.com/blog/how-to-works-site-agent/llms.txt?locale=en

# Site Ajanı Nasıl Çalışıyor?

[Merhaba Dünya](/blog/hello-world) yazısında bu blogun nasıl çalıştığını anlatmıştım. Bu yazıda sitenin bir başka parçasını ele alacağım: [AI sayfasında](/ai) sizi karşılayan site ajanı.

Ajan, bu site hakkında sorularınızı cevaplayan bir sohbet asistanıdır. Projelerimi, yazılarımı ve teknik mimariyi bilir, iki dilde konuşur ve herkese açıktır. Bu yazının konusu ise ajanın kendisi değil, arkasında duran ve onu düşük maliyetle ayakta tutan sistemdir.

## Site Ajanı Nedir?

Ajan [AI sayfasında](/ai) yaşar. Cevapları **Anthropic**'in `claude-haiku-4-5` modeli üretir. Hesap açmanız, giriş yapmanız veya bir şey ödemeniz gerekmez. Tek istenen, konuşmaya başlamadan önce bir kez insan olduğunuzu doğrulamanızdır (**Cloudflare Turnstile**).

Herkese açık ve ücretsiz bir yapay zeka ajanı sunmak, mühendislik açısından iddialı bir iştir. Her mesaj gerçek bir maliyet üretir. Bu maliyetin geliştirici veya ajanın sahibi tarafından üstlenilmesi gerekir.

Bu yüzden sistemin tasarımındaki her karar iki sorunun cevabıdır:

- Ziyaretçiye pürüzsüz bir deneyim nasıl verilir?
- Bu deneyim kötüye kullanıma karşı nasıl sürdürülebilir kılınır?

## Nasıl Çalışıyor?

Sistem beş katmandan oluşur. Her katmanın tek bir işi vardır ve hiçbiri diğerinin işini üstlenmez:

- **Sohbet Arayüzü** ([ai-chat](https://github.com/ARAS-Workspace/emrearascom-www/tree/372b44e4940024942cca8d985f36b2efea5b315b/src/shared/components/ai-chat)). **IBM Carbon** tasarım sisteminin sohbet bileşeni üzerine kuruludur ve tamamen tarayıcınızda çalışır.
- **Cloudflare Turnstile**. Oturum başına tek insan doğrulaması yapar. Karşılığında **Worker** size kısa ömürlü, imzalı bir oturum anahtarı verir; sonraki her mesaj bu anahtarla gelir. Burada güvenlik ile kullanıcı deneyimi adil bir şekilde dengelenmiştir; bu uyarlamadan çıkarılacak asıl ders de budur.
- **Worker** ([workers/ai-worker](https://github.com/ARAS-Workspace/emrearascom-www/tree/372b44e4940024942cca8d985f36b2efea5b315b/workers/ai-worker)). Sistemin omurgasıdır. Oturumu doğrular, mesajı sınar, konuşma zincirini kontrol eder, cevabı size akıtır ve turu kayda geçirir.
- **AI Gateway**. **Worker** ile model arasında duran **Cloudflare** katmanıdır. Model anahtarı yalnızca burada saklanır ve isteğe çıkış anında eklenir. Harcama tavanları, hız sınırı ve içerik korumaları da burada işler.
- **D1**. Konuşma kayıtlarının durduğu veritabanıdır. Her tur, bir sonraki bölümde anlatacağım zincirin bir bloğu olarak buraya yazılır.

### Bir Mesajın Yolculuğu

Gönder düğmesine bastığınız andan cevabın son kelimesine kadar olan yol şudur:

1. Mesajınız, oturum anahtarınızla birlikte **Worker**'a ulaşır.
2. **Worker** anahtarın imzasını ve süresini doğrular. Anahtar yoksa veya süresi geçmişse konuşma yeni bir doğrulamaya döner.
3. Mesaj sınanır: boyutu ve biçimi sınırlar içinde olmalıdır.
4. Konuşma geçmişinizin özeti, sunucudaki zincirle karşılaştırılır. Geçmiş oynanmışsa istek daha model devreye girmeden reddedilir.
5. İstek **AI Gateway** üzerinden geçer. İçerik korumaları ve harcama tavanları burada uygulanır, gizli model anahtarı isteğe burada eklenir.
6. **Claude** cevabı üretmeye başlar ve cevap tarayıcınıza kelime kelime akar.
7. Cevap tamamlanınca tur, konuşma zincirine yeni bir blok olarak eklenir. Kayıt ancak bu yazma işlemi bittikten sonra kapanır.

```mermaid
sequenceDiagram
  participant V as Ziyaretçi
  participant W as Worker
  participant G as AI Gateway
  participant C as Claude
  participant D as D1
  V->>W: Mesaj + Oturum Anahtarı
  W->>W: Doğrulama ve Zincir Kontrolü
  W->>G: İstek (Anahtarsız)
  G->>G: Korumalar ve Tavanlar
  G->>C: İstek (Saklı Anahtar Eklenir)
  C-->>W: Yanıt Akışı
  W-->>V: Kelime Kelime Yanıt
  W->>D: Turu Zincire Yaz
```

## Konuşmanın Bütünlüğü: Hash Zinciri

Sistemin bence en ilginç parçası burasıdır. Ajanla yaptığınız her konuşma kaydedilir; bunu [Gizlilik Bildirimi](/privacy) sayfasında açıkça yazdım.

Bu yapı, sistemin ön yüzünde ek ve manipüle edilebilir bir yüzey oluşturacak bir değer tutmadan, konuşmaların bütün halinde ve oturum bazında ayrılmış olarak kaydedilmesini sağlar.

Bunu mümkün kılan, kayıtların birbirine bağlanma biçimidir. Her tur bir bloktur ve her blok üç özet taşır:

- **block\_hash**. Bloğun tüm içeriğinin SHA-256 özeti.
- **prev\_hash**. Önceki bloğun özeti. Zinciri kuran bağ budur.
- **context\_hash**. O ana kadarki konuşma bağlamının özeti. Bir konuşmanın kimliği ve sürekliliği budur.

Bir bloğun içeriği sonradan değiştirilirse özeti artık saklanan değerle eşleşmez ve ondan sonraki her bloğun bağı kopar. Değişiklik gizlenemez, ancak görünür hale gelir. Kaydın değeri de tam olarak budur: konuşmanın o gün, o haliyle geçtiğinin kanıtı ve konuşmaların birbirinden sistematik olarak ayrıldığının ispatıdır.

Bu tasarımın iki güzel yan etkisi vardır. Birincisi, konuşmanın sürekliliğini ne bir çerez ne de IP adresiniz belirler; bağlamın özeti belirler. Ağ değiştirdiğinizde, örneğin telefonunuz baz istasyonları arasında gezerken, konuşmanız kesintisiz sürer. İkincisi, uydurma bir geçmişle gelmek işe yaramaz: zincirde karşılığı olmayan bir bağlam, daha model devreye girmeden reddedilir ve tek bir token harcanmaz.

Aynı konuşmayı iki sekmeden sürdürürseniz zincir dallanır. Kayıt bu yüzden düz bir liste değil, bir ağaçtır ve okunurken sıra numarasına göre değil, `prev_hash` izi sürülerek okunur. Bu doğrulamayı yapan araç da açık kaynak kod deposunda yer alır: [tools/ai-dashboard](https://github.com/ARAS-Workspace/emrearascom-www/tree/372b44e4940024942cca8d985f36b2efea5b315b/tools/ai-dashboard), her bloğu yeniden hash'leyip saklanan değerle karşılaştırır, ardından mesajları okunabilir bir arayüz üzerinde sunar.

## Sınırlar ve Korumalar

Ücretsiz bir ucun sürdürülebilir olması, sınırlarının açık olmasına bağlıdır:

- **Harcama Tavanları**. Günlük ve aylık tavanlar vardır. Tavana ulaşıldığında ajan yeni istekleri kibarca geri çevirir ve ertesi gün kaldığı yerden devam eder.
- **Hız Sınırı**. İstekler dakikalık bir pencereyle sınırlıdır.
- **İçerik Korumaları**. Her istek modele ulaşmadan önce moderasyondan geçer. Uygunsuz kategorilere giren istekler hiç işlenmez, cevaplar ise işaretlenerek izlenir.
- **Veri Koruması**. Finansal numara gibi hassas veriler taşıyan mesajlar işlenmez. Böyle bir mesaj ne modele gider ne de kayda geçer; kendi verinizi korumanın en kestirme yolu, onu hiç almamaktır.
- **Boyut Sınırları**. Tek bir mesajın ve konuşmanın toplam uzunluğunun sınırı vardır. Sınıra ulaşan konuşma yeni bir konuşmaya devredilir.

Bu sınırların hiçbiri **Worker** tarafına ek kural yükü getirmez. Hepsi **AI Gateway** katmanında işlenir. **Worker** yalnızca kendi işini yapar. Sınırların amacı ajanı kısıtlamak değil, herkese açık bir ucu güvenle açık tutabilmektir.

## Gizlilik

Ajanla yaptığınız konuşmalar, performansı ölçebilmek ve çıktıları gözlemleyebilmek için kaydedilir. Neyin kaydedildiğini, neyin kaydedilmediğini ve kayıtlarınızın silinmesini nasıl isteyebileceğinizi [Gizlilik Bildirimi](/privacy) sayfasında bulabilirsiniz. Kısa özet şudur: tarayıcınızdaki geçmiş sizindir ve tek düğmeyle silinir; sunucudaki kayıt ise yukarıda anlattığım zincirin kendisidir.

## Ajanın Bilgi Kaynağı: llms.txt

Ajanın site hakkında bildiği her şey, sitenin makine-okunur metninden gelir. [Merhaba Dünya](/blog/hello-world) yazısında anlattığım üretim hattı, her sayfanın bir `llms.txt` sürümünü türetir ve hepsini tek bir belgede birleştirir. Ajanın her konuşmada önüne konan metin, [llms-full.txt](/llms-full.txt) adresinde herkese açık duran metnin aynısıdır. Burada verimli ve yalın bir yöntem tercih edilmiştir; çünkü sitenin içeriği `llms-full.txt` üzerinden yeterince görünür durumdadır. Kolay ve hızlı erişilebilir küçük bir veri bütünü, beraberinde doğal avantajlar getirir. Yeni bir yazı yayınlandığında bu dosya yeniden üretilir ve ajan, siteyle aynı anda güncellenmiş olur.

## Lisans

Bu site ve kaynak kodu, GNU Affero General Public License sürüm 3.0 veya sonrası (AGPL-3.0-or-later) kapsamında sunulmaktadır.

## Açık Kaynak

| Kaynak                                            | Adres                                                                                                                      |
| ------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Kişisel Hesap                                     | [github.com/remrearas](https://github.com/remrearas)                                                                       |
| Organizasyon (ARAS-Workspace)                     | [github.com/ARAS-Workspace](https://github.com/ARAS-Workspace)                                                             |
| emrearascom-www (Bu Site)                         | [github.com/ARAS-Workspace/emrearascom-www](https://github.com/ARAS-Workspace/emrearascom-www)                             |
| Worker                                            | [workers/ai-worker](https://github.com/ARAS-Workspace/emrearascom-www/tree/main/workers/ai-worker)                         |
| React Arayüz Bileşeni                             | [src/shared/components/ai-chat](https://github.com/ARAS-Workspace/emrearascom-www/tree/main/src/shared/components/ai-chat) |
| AI Dashboard (Sohbet Geçmişi ve Zincir Doğrulama) | [tools/ai-dashboard](https://github.com/ARAS-Workspace/emrearascom-www/tree/main/tools/ai-dashboard)                       |

--------------------------------------------------------------------------------

**path:** /privacy · **locale:** tr · **en:** https://www.emrearas.com/privacy/llms.txt?locale=en

# Gizlilik Bildirimi

Bu bildirim yalnızca **/ai** sayfasındaki site ajanını kapsar. Sitenin geri kalanı
statik olarak sunulur; orada çerez, oturum veya kayıt yoktur.

## Genel Bakış

Site ajanına yazdığınız her soru ve aldığınız her cevap **kaydedilir**. Bu bir yan
etki değil, tasarımın kendisidir: kayıtlar birbirine hash zinciriyle bağlanır ve
konuşmanın sonradan değiştirilmediğini kanıtlanabilir kılar. Aynı tasarım şunu da
açık eder: bu ajanla yaptığınız konuşmalar tarafımda okunabilir hâlde durur. Bir
soru sormadan önce bunu bilmenizi isterim.

## Mimari

| Bileşen              | Nerede çalışır | Ne görür                       |
| -------------------- | -------------- | ------------------------------ |
| Sohbet arayüzü       | Tarayıcınız    | Yazdıklarınız, konuşma geçmişi |
| Cloudflare Turnstile | Cloudflare     | İnsan doğrulaması              |
| Worker               | Cloudflare     | Mesajlar, IP adresiniz         |
| AI Gateway           | Cloudflare     | Modele giden istekler, maliyet |
| Claude (Anthropic)   | Anthropic      | Konuşma ve site içeriği        |
| D1 veritabanı        | Cloudflare     | Konuşma kayıtları              |

## Kaydedilen Veriler

Her tur için veritabanına şunlar yazılır:

- **Sorunuz ve ajanın cevabı**, olduğu gibi
- **`ip_hash`** — IP adresinizin SHA-256 özeti
- Konuşmanın dili, kullanılan model, token sayıları, yanıt süresi, zaman damgası
- Zincir doğrulaması için üç hash değeri

### `ip_hash` Hakkında Açık Olayım

IP adresiniz düz metin olarak saklanmaz, ancak saklanan özet **tuzsuz** bir
SHA-256'dır. IPv4 adres uzayı 2³² olduğu için bu özet, veritabanına erişimi olan
biri tarafından **geri çevrilebilir**. Bunu bir anonimleştirme olarak sunmuyorum.

Bu değer benim için bir belirteçtir: bir konuşmanın farklı adreslerden sürdürülüp
sürdürülmediğini görmemi sağlar. O an internete çıktığınız cihazı doğrudan
tanımlayan veriyi olduğu gibi kaydetmek yerine, iyi niyetle maskelenmiş hâlini
tutuyorum.

## Kaydedilmeyenler

- Çerez kullanılmaz, tarayıcınıza tanımlayıcı yazılmaz
- Analitik, izleme pikseli veya üçüncü taraf reklam betiği yoktur
- Hesap, e-posta veya isim istenmez
- Ziyaretçi başına kullanım sayacı tutulmaz

## Tarayıcınızda Kalanlar

Konuşma geçmişiniz `localStorage`'da, yalnızca sizin cihazınızda tutulur.
Sohbetin üst çubuğundaki **yeni konuşma** düğmesi bunu siler. Sunucudaki kayıt bu
işlemden etkilenmez.

Oturum anahtarı bellekte tutulur ve sekmeyi kapattığınızda kaybolur; hiçbir yere
yazılmaz.

## Konuşmalar Nasıl Sürdürülür

Sürekliliği IP adresiniz veya bir çerez değil, konuşmanın kendisinin hash'i
belirler. Bu yüzden ağ değiştirdiğinizde konuşma kesilmez.

## Üçüncü Taraflar

| Hizmet     | Rolü                                           | Gizlilik politikası                                                       |
| ---------- | ---------------------------------------------- | ------------------------------------------------------------------------- |
| Cloudflare | Barındırma, Turnstile, Workers, D1, AI Gateway | [cloudflare.com/privacypolicy](https://www.cloudflare.com/privacypolicy/) |
| Anthropic  | Modeli çalıştırır                              | [anthropic.com/legal/privacy](https://www.anthropic.com/legal/privacy)    |

## Açık Kaynak

Bu sayfanın anlattığı her şey denetlenebilir: kaynak kodda görünen yapı, canlı
üretim ortamında çalışanın kendisidir.

[github.com/ARAS-Workspace/emrearascom-www](https://github.com/ARAS-Workspace/emrearascom-www)

## İletişim

Kayıtlarınızın silinmesini isterseniz veya sorularınız varsa:
[r.emrearas@proton.me](mailto:r.emrearas@proton.me)
