<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Blog | Ferhat Atagün</title>
    <link>https://ferhatatagun.com/blog</link>
    <description>Software, AI tools (MCP, GPT, Cursor) and frontend notes.</description>
    <language>en</language>
    <lastBuildDate>Wed, 09 Sep 2026 22:06:12 GMT</lastBuildDate>
    <atom:link href="https://ferhatatagun.com/blog/feed.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>Two AI vulnerabilities that never throw an exception</title>
    <link>https://ferhatatagun.com/blog/two-ai-vulnerabilities-that-never-throw</link>
    <description>An insurance claim auto-approves when it should escalate. An agent emails a customer&apos;s itinerary to an address nobody typed. Neither system logs an error. Schema drift (LLM05) and indirect prompt injection via tool results (LLM01) are different OWASP categories wearing the same shape: a syntactically valid response that is semantically wrong, invisible to every monitoring tool built around exceptions.</description>
    <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/two-ai-vulnerabilities-that-never-throw</guid>
  </item>
  <item>
    <title>Hiç exception fırlatmayan iki yapay zeka açığı</title>
    <link>https://ferhatatagun.com/blog/hic-exception-firlatmayan-iki-yapay-zeka-acigi</link>
    <description>Bir sigorta talebi eskale edilmesi gerekirken otomatik onaylanıyor. Bir agent, kimsenin yazmadığı bir adrese müşterinin seyahat planını yolluyor. İki sistem de hata loglamıyor. Şema kayması (LLM05) ve tool sonuçları üzerinden dolaylı prompt injection (LLM01), aynı şeklin iki farklı OWASP kategorisi giymiş hali: sözdizimsel olarak geçerli ama anlamsal olarak yanlış bir yanıt, exception etrafında kurulu her monitoring&apos;e görünmez.</description>
    <pubDate>Tue, 08 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/hic-exception-firlatmayan-iki-yapay-zeka-acigi</guid>
  </item>
  <item>
    <title>Your context window bills you every turn</title>
    <link>https://ferhatatagun.com/blog/your-context-window-bills-you-every-turn</link>
    <description>Auto-compaction feels like losing your context, but the raw usage numbers from three real Claude Code sessions say the opposite: 1.99 billion tokens read from cache against 62 million written, a 32:1 ratio, and four compactions that each reset a bill that had been climbing since turn one. Compaction isn&apos;t the tax. It&apos;s the tax getting paid off.</description>
    <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/your-context-window-bills-you-every-turn</guid>
  </item>
  <item>
    <title>Bağlam biriktirilmez, her turda yeniden faturalanır</title>
    <link>https://ferhatatagun.com/blog/baglam-her-turda-yeniden-faturalanir</link>
    <description>Otomatik compaction bağlamı kaybetmek gibi hissettiriyor, ama üç gerçek Claude Code oturumundan çıkan ham usage verisi tam tersini söylüyor: cache&apos;ten okunan 1,99 milyar token, cache&apos;e yazılan 62 milyona karşı, 32:1 oran, ve her biri birinci turdan beri tırmanan faturayı sıfırlayan dört compaction. Compaction vergi değil. Verginin ödenme anı.</description>
    <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/baglam-her-turda-yeniden-faturalanir</guid>
  </item>
  <item>
    <title>The failures that don&apos;t throw</title>
    <link>https://ferhatatagun.com/blog/the-failures-that-dont-throw</link>
    <description>One call in forty comes back with “HIGH” instead of “high”, your switch falls through to the default branch, and the permissive branch auto-approves what the model flagged as maximum risk. Nothing errors. Schema failures are distributional, a single compliance percentage averages over the only distinction that matters, and zero failures in fifty runs is not a zero failure rate.</description>
    <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/the-failures-that-dont-throw</guid>
  </item>
  <item>
    <title>Patlamayan hatalar</title>
    <link>https://ferhatatagun.com/blog/patlamayan-hatalar</link>
    <description>Kırk çağrının biri “high” yerine “HIGH” dönüyor, switch default dalına düşüyor, ve izin veren dal modelin maksimum risk dediği şeyi otomatik onaylıyor. Hiçbir şey hata vermiyor. Şema hataları dağılımsaldır, tek bir uyum yüzdesi önemli olan tek ayrımın üstünden ortalama alır, ve elli çalıştırmada sıfır hata sıfır hata oranı demek değildir.</description>
    <pubDate>Tue, 01 Sep 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/patlamayan-hatalar</guid>
  </item>
  <item>
    <title>Çalıştığında değil, onlar değiştirebildiğinde bitti</title>
    <link>https://ferhatatagun.com/blog/degistirebildiklerinde-bitti</link>
    <description>En çok düşündüğüm deployment başarısız olmadı — UAT&apos;yi geçti, canlıya çıktı, ve altı ay sonra kimse ona bir kez bile dokunmamıştı. Bir sistem çalışmayı bıraktığında ölmez; değiştirilmeyi bıraktığında ölür, ve isteklere cevap verirken aylarca ölü kalabilir. Devir teslim dokümantasyon değildir: bir ekibin bir değişiklik yapıp güvenli olduğunu bilip bilemediğidir.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/degistirebildiklerinde-bitti</guid>
  </item>
  <item>
    <title>İkinci müşteri ne yaptığını söyler</title>
    <link>https://ferhatatagun.com/blog/ikinci-musteri-ne-yaptigini-soyler</link>
    <description>Forward-deployed iş SaaS şeklini tersine çeviriyor — çok müşteriye genişlik yerine tek müşteriyle derinlik — ve bu, ürün keşfinden hızlı yetenek üretip hangilerinin genelleşeceğini anlamanın yolunu vermiyor. İki müşterinin aynı özelliği istemesi sinyal değil. Ona aynı alttaki kısıtla varması sinyal, ve en güçlü kanıt istek bile değil: zaten elleriyle kurdukları geçici çözüm.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/ikinci-musteri-ne-yaptigini-soyler</guid>
  </item>
  <item>
    <title>The second customer tells you what you actually built</title>
    <link>https://ferhatatagun.com/blog/the-second-customer</link>
    <description>Forward-deployed work inverts the SaaS shape — depth with one customer instead of breadth across many — which produces capabilities faster than product discovery does and no way to tell which ones generalise. Two customers asking for the same feature isn&apos;t the signal. Two customers arriving at it through the same underlying constraint is, and the strongest evidence isn&apos;t the request at all: it&apos;s the workaround they already built by hand.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/the-second-customer</guid>
  </item>
  <item>
    <title>You&apos;re not done when it works. You&apos;re done when they can change it.</title>
    <link>https://ferhatatagun.com/blog/done-when-they-can-change-it</link>
    <description>The deployment I think about most didn&apos;t fail — it passed UAT, went live, and six months later nobody had touched it once. A system doesn&apos;t die when it stops working; it dies when it stops being changed, and it can be dead for months while still answering requests. Handover isn&apos;t documentation: it&apos;s whether a team can make a change and know it was safe.</description>
    <pubDate>Mon, 31 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/done-when-they-can-change-it</guid>
  </item>
  <item>
    <title>“That library will hurt performance” is not a number</title>
    <link>https://ferhatatagun.com/blog/that-library-will-hurt-performance</link>
    <description>Every performance tool reports what a page costs right now. None of them answer the question the meeting is actually about, which is what it would cost without the thing you&apos;re arguing over — so the argument gets settled by whoever sounds most confident. A 410 KB image that loads after LCP is worth zero points; a 124 KB render-blocking script is worth eleven. Sorting by file size sends teams to fix the wrong thing.</description>
    <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/that-library-will-hurt-performance</guid>
  </item>
  <item>
    <title>“Performansı bozar” dediğin şey bir sayı değil</title>
    <link>https://ferhatatagun.com/blog/performansi-bozar-dedigin-sayi-degil</link>
    <description>Bütün performans araçları sayfanın şu anki maliyetini raporluyor. Hiçbiri toplantının asıl konusu olan “o şey olmasa ne olurdu” sorusuna cevap vermiyor — ve karar, elinde sayı olmadığı için daha kendinden emin konuşana kalıyor. LCP’den sonra yüklenen 410 KB’lık bir görsel sıfır puan; 124 KB’lık render-blocking bir script on bir puan. Dosya boyutuna göre sıralamak ekipleri yanlış şeyi düzeltmeye gönderiyor.</description>
    <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/performansi-bozar-dedigin-sayi-degil</guid>
  </item>
  <item>
    <title>Teslim ettiğin şey prompt değil. Eval.</title>
    <link>https://ferhatatagun.com/blog/teslim-edilen-prompt-degil-eval</link>
    <description>Her saha rehberi inşa etmeden önce eval&apos;lerini tanımla diyor — ve müşteri sahasındaki üçüncü günde etiketli verin, alan uzmanlığın ve birinin ekranından aldığın beş örnekten başka bir şeyin yok. Tavsiye doğru, çerçeve yanlış. “Bu iyi mi?” ground truth ister. “Bu değişti mi?” sadece dondurulmuş bir snapshot ister, ve ona bu öğleden sonra sahip olabilirsin.</description>
    <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/teslim-edilen-prompt-degil-eval</guid>
  </item>
  <item>
    <title>The deliverable isn&apos;t the prompt. It&apos;s the eval.</title>
    <link>https://ferhatatagun.com/blog/the-eval-is-the-deliverable</link>
    <description>Every field guide says define your evals before you build — and on day three at a customer site you have no labelled data, no domain expertise, and five examples off someone&apos;s screen. The advice is right; the framing is wrong. &quot;Is this good?&quot; needs ground truth. &quot;Did this change?&quot; needs only a frozen snapshot, and that one you can have this afternoon.</description>
    <pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/the-eval-is-the-deliverable</guid>
  </item>
  <item>
    <title>Kazara bir forward-deployed engineer saha çantası kurmuşum</title>
    <link>https://ferhatatagun.com/blog/kazara-fde-saha-cantasi</link>
    <description>Bir yıl önce bir SDK&apos;yı silip yerine 150 satır yazdım ve bunu bir bundler hikâyesi sandım. Meğer adını hiç koymadan bir deployment problemi çözüyormuşum. Beş aracın her mimari kararına geri dönüp baktığımda hepsinin altında aynı dile getirilmemiş kısıt vardı: kurulacak bir şey yok, sınırdan çıkan veri yok, savunulacak bağımlılık yok.</description>
    <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/kazara-fde-saha-cantasi</guid>
  </item>
  <item>
    <title>I accidentally built a forward-deployed engineer&apos;s field kit</title>
    <link>https://ferhatatagun.com/blog/accidental-fde-field-kit</link>
    <description>I dropped the Anthropic SDK for 150 lines of TypeScript and called it a bundler problem. It wasn&apos;t. Browser-only, BYOK, no backend, minimal dependencies — the constraints I picked out of preference turn out to be the exact constraints of working inside someone else&apos;s regulated environment. What five tools look like when you finally name the rule you were following.</description>
    <pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/accidental-fde-field-kit</guid>
  </item>
  <item>
    <title>Kimsenin modeli patlamadı. Arayüz patladı.</title>
    <link>https://ferhatatagun.com/blog/kimsenin-modeli-patlamadi</link>
    <description>Kurumsal AI pilotları %70–90 oranında başarısız olurken forward-deployed engineer ilanları %800 arttı. Kanonik başarı hikâyesi 6–8 haftalık entegrasyonun ardından dört aylık adoption çalışması, ve raporlanan kazanma koşulu %98 adoption — doğruluk değil. Adoption sayısı bir arayüz sayısıdır, ve rol ona göre kadrolanmıyor.</description>
    <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/kimsenin-modeli-patlamadi</guid>
  </item>
  <item>
    <title>Nobody&apos;s model failed. The interface did.</title>
    <link>https://ferhatatagun.com/blog/nobodys-model-failed</link>
    <description>Enterprise AI pilots fail at 70–90% while forward-deployed engineer postings jump 800%. The canonical success story is 6–8 weeks of integration followed by four months of adoption work, and the reported win condition is 98% adoption — not accuracy. An adoption number is an interface number, and the role isn&apos;t staffed against that.</description>
    <pubDate>Sun, 09 Aug 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/nobodys-model-failed</guid>
  </item>
  <item>
    <title>Google&apos;un göremediği bir blog yayınladım</title>
    <link>https://ferhatatagun.com/blog/google-un-goremedigi-blog</link>
    <description>Sitemdeki her yazı tarayıcıda iyi görünüyordu — ama `curl` çekince yazı gövdesi boştu. Marked `onMount` içinde parse oluyor, prerender iskelet görüyor, arama motorları hiçbir şey indekslemiyordu. Düzeltme, ortaya çıkardığı üç ikincil hata, ve hiç kazanmadığım doğrulama alışkanlığı.</description>
    <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/google-un-goremedigi-blog</guid>
  </item>
  <item>
    <title>How I shipped a blog Google couldn&apos;t see</title>
    <link>https://ferhatatagun.com/blog/how-i-shipped-a-blog-google-couldnt-see</link>
    <description>Every post on my site rendered fine in a browser — but `curl` showed the article body was empty. Marked was being parsed inside onMount, so prerender saw a skeleton and search engines indexed nothing. The fix, the three secondary failures it uncovered, and the verification habit I should have had.</description>
    <pubDate>Sun, 14 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/how-i-shipped-a-blog-google-couldnt-see</guid>
  </item>
  <item>
    <title>What I learned shipping four open-source Claude dev-tools in two weekends</title>
    <link>https://ferhatatagun.com/blog/four-tools-in-two-weekends</link>
    <description>A meta post on the four-tool Claude dev-tool suite: why the SDK breaking was the constraint that made the work possible, the &quot;one tool per insight&quot; decomposition, why BYOK + browser-only is a credibility multiplier, and the four things I would front-load if starting over.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/four-tools-in-two-weekends</guid>
  </item>
  <item>
    <title>İki hafta sonunda dört açık kaynak Claude dev-tool shiplerken neler öğrendim</title>
    <link>https://ferhatatagun.com/blog/iki-hafta-sonu-dort-tool</link>
    <description>Dört tool&apos;lu Claude dev-tool suite&apos;i üzerine meta yazı: SDK&apos;nın kırılması neden işi mümkün kılan kısıt oldu, &quot;içgörü başına bir tool&quot; ayrıştırması, BYOK + tarayıcı-only neden güvenilirlik çarpanı, ve yeniden başlasam önden yapacağım dört şey.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/iki-hafta-sonu-dort-tool</guid>
  </item>
  <item>
    <title>See the prompt before you ship it</title>
    <link>https://ferhatatagun.com/blog/see-the-prompt-before-you-ship-it</link>
    <description>Token cost, context-window position, and prompt-caching layout are all knowable from the prompt alone — you don&apos;t need to send the request. A worked example where &apos;feels about the same&apos; was hiding a 6.3× input-length difference, and the pre-flight habit that catches it.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/see-the-prompt-before-you-ship-it</guid>
  </item>
  <item>
    <title>Prompt&apos;u shiplemeden önce gör</title>
    <link>https://ferhatatagun.com/blog/prompt-shipping-once-onunu-gor</link>
    <description>Token cost, context-window pozisyonu ve prompt-caching layout&apos;u — hepsi prompt&apos;tan tek başına bilinebilir. &quot;Yaklaşık aynı&quot; hissinin gizlediği 6.3× input-uzunluk farkını yakalayan pre-flight alışkanlığı.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/prompt-shipping-once-onunu-gor</guid>
  </item>
  <item>
    <title>Prompt&apos;un daha iyi değil. Sadece daha iyi hatırlıyorsun.</title>
    <link>https://ferhatatagun.com/blog/prompt-secimi-his-degil-olcum</link>
    <description>Çoğu ekip prompt&apos;u hisle iterate edip hafızayla shipliyor. Minimum işe yarayan karşılaştırma: aynı input üzerinde iki prompt&apos;u paralel çalıştırıp output, latency ve cost&apos;u yan yana görmek — side-by-side&apos;ın sıralı versiyonun göremediği şey.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/prompt-secimi-his-degil-olcum</guid>
  </item>
  <item>
    <title>Tek bir tool yazmadan önce sandbox&apos;ı kur</title>
    <link>https://ferhatatagun.com/blog/tek-bir-tool-yazmadan-once-sandbox</link>
    <description>Çoğu agent ekibi önce tool&apos;ları yazıyor, sonra tasarımın yanlış olduğunu keşfediyor. Tool yanıtlarını mock&apos;la, loop&apos;u el ile rol-yap, kötü tool tasarımlarını codebase&apos;ine dokunmadan on beş dakikada öldür.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/tek-bir-tool-yazmadan-once-sandbox</guid>
  </item>
  <item>
    <title>Claude agent&apos;larını trace replay ile debug ediyorum</title>
    <link>https://ferhatatagun.com/blog/claude-agent-debug-trace-replay</link>
    <description>Agent trace&apos;leri garip bir çalışmayı debug etmek için gereken her şeyi içeriyor, ama wall of nested JSON olarak saklanıyor. Yeniden çerçeveleme: onları döküman olarak okumayı bırak, kararların timeline&apos;ı olarak izle. Bir editörde 30 dakika alan bug&apos;lar 30 saniyede bariz oluyor.</description>
    <pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/claude-agent-debug-trace-replay</guid>
  </item>
  <item>
    <title>Prompt caching is the cheapest Claude optimization. Nobody measures it.</title>
    <link>https://ferhatatagun.com/blog/prompt-caching-nobody-measures</link>
    <description>Every Claude response carries cache-hit data. Most apps log it nowhere — and pay for it. Why hit ratio is the metric nobody graphs, and the four-field log line that pays for itself in a week.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/prompt-caching-nobody-measures</guid>
  </item>
  <item>
    <title>Your prompt isn&apos;t better. You just remember it being better.</title>
    <link>https://ferhatatagun.com/blog/stop-choosing-prompts-by-vibes</link>
    <description>Most teams iterate on prompts by feel and ship by memory. The minimum useful comparison is two prompts in parallel, surfacing output, latency and cost on the same input — what side-by-side reveals that sequential never does.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/stop-choosing-prompts-by-vibes</guid>
  </item>
  <item>
    <title>Build the sandbox before you write a single tool</title>
    <link>https://ferhatatagun.com/blog/build-the-sandbox-first</link>
    <description>Most agent teams write the tools first, then discover the design was wrong. Mock the tool responses, role-play the loop by hand, and kill the bad tool designs in fifteen minutes — before they touch your codebase.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/build-the-sandbox-first</guid>
  </item>
  <item>
    <title>How I debug Claude agents by replaying their trace</title>
    <link>https://ferhatatagun.com/blog/debug-claude-agents-by-replaying-traces</link>
    <description>Agent traces contain everything you need to debug a weird run, but they&apos;re stored as walls of nested JSON. The reframe: stop reading them as documents, start watching them as timelines of decisions. Bugs that take 30 minutes in an editor become obvious in 30 seconds.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/debug-claude-agents-by-replaying-traces</guid>
  </item>
  <item>
    <title>Tarayıcıda Claude&apos;a streaming çağrı — SDK olmadan</title>
    <link>https://ferhatatagun.com/blog/tarayicida-claude-streaming-sdk-siz</link>
    <description>Resmi Anthropic SDK&apos;sını tarayıcı tarafına almak için neden uğraşmadığım ve onu replace eden ~150 satır TypeScript: tool-use destekli SSE parser&apos;ı, temiz iptal, anlamlı hatalar.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/tarayicida-claude-streaming-sdk-siz</guid>
  </item>
  <item>
    <title>Prompt caching, Claude&apos;un en ucuz optimizasyonu. Kimse ölçmüyor.</title>
    <link>https://ferhatatagun.com/blog/prompt-caching-kimsenin-olcmedigi</link>
    <description>Her Claude response&apos;u cache-hit verisi taşıyor. Çoğu uygulama bunu hiçbir yere loglamıyor — ve bunun bedelini ödüyor. Kimsenin grafiklemediği hit oranı metriği, ve kendini bir haftada amorti eden dört alanlı log satırı.</description>
    <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/prompt-caching-kimsenin-olcmedigi</guid>
  </item>
  <item>
    <title>Building a streaming Claude client in the browser — without the SDK</title>
    <link>https://ferhatatagun.com/blog/browser-only-claude-streaming</link>
    <description>Why I skipped the official Anthropic SDK for browser work, and the ~150 lines of TypeScript that replaced it: a hand-rolled SSE parser with tool-use support, clean aborts, and meaningful errors.</description>
    <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/browser-only-claude-streaming</guid>
  </item>
  <item>
    <title>Gerçekten işe yarayan kurallar ve komutlar</title>
    <link>https://ferhatatagun.com/blog/ise-yarayan-kurallar-ve-komutlar</link>
    <description>.cursorrules ve slash komutlarını unutulmuş değil faydalı hale getirmek: teoriden değil acıdan başla, listeyi kısa tut, gerçek kullanımdan iterasyon yap.</description>
    <pubDate>Sat, 18 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/ise-yarayan-kurallar-ve-komutlar</guid>
  </item>
  <item>
    <title>Rules and Commands That Actually Stick</title>
    <link>https://ferhatatagun.com/blog/rules-and-commands-that-stick</link>
    <description>How to make .cursorrules and slash commands useful instead of forgotten: start from pain, keep the list short, iterate from real usage.</description>
    <pubDate>Sat, 18 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/rules-and-commands-that-stick</guid>
  </item>
  <item>
    <title>Neden Bazen Sadece Boş Ekrana Bakıyorum</title>
    <link>https://ferhatatagun.com/blog/neden-bazen-sadece-bos-ekrana-bakiyorum</link>
    <description>Hiçbir tuşa basmadan ekrana bakmak da işin parçası. Verimlilik kültürüne ters bir itiraf.</description>
    <pubDate>Sun, 12 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/neden-bazen-sadece-bos-ekrana-bakiyorum</guid>
  </item>
  <item>
    <title>Bitmemiş Projeler Mezarlığım ve Neden Rahatım</title>
    <link>https://ferhatatagun.com/blog/bitmemis-projeler-mezarligim</link>
    <description>Yarım kalan side project&apos;ler başarısızlık mı? Bence bazen sadece keşfin kendisi.</description>
    <pubDate>Sun, 05 Jan 2025 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/bitmemis-projeler-mezarligim</guid>
  </item>
  <item>
    <title>&quot;Best Practice&quot; Dediklerimizin Yarısı Ezber</title>
    <link>https://ferhatatagun.com/blog/best-practice-dedigin-yarisi-ezber</link>
    <description>DRY, test coverage, yorum yazmak… Kurallar bağlam olmadan anlamsız. Cesur bir tez.</description>
    <pubDate>Fri, 20 Dec 2024 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/best-practice-dedigin-yarisi-ezber</guid>
  </item>
  <item>
    <title>Yapay Zeka ile Yazılım Geliştirme: MCP, GPT ve Cursor</title>
    <link>https://ferhatatagun.com/blog/yapay-zeka-ve-yazilim-gelistirme-2024</link>
    <description>LLM araçları, Model Context Protocol (MCP) ve Cursor ile günlük geliştirme pratiğinde nasıl daha verimli olunur.</description>
    <pubDate>Sun, 01 Dec 2024 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/yapay-zeka-ve-yazilim-gelistirme-2024</guid>
  </item>
  <item>
    <title>Model Context Protocol (MCP) Nedir?</title>
    <link>https://ferhatatagun.com/blog/mcp-model-context-protocol-nedir</link>
    <description>MCP, AI asistanlarının dosya sistemine, API&apos;lere ve araçlara güvenli erişimini standartlaştıran açık protokol.</description>
    <pubDate>Fri, 15 Nov 2024 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/mcp-model-context-protocol-nedir</guid>
  </item>
  <item>
    <title>Cursor IDE ve Prompt Mühendisliği</title>
    <link>https://ferhatatagun.com/blog/cursor-ide-ve-prompt-muhendisligi</link>
    <description>Cursor’da @dosya, @web kullanımı, net talimatlar ve .cursorrules ile daha tutarlı ve verimli AI kullanımı.</description>
    <pubDate>Fri, 01 Nov 2024 00:00:00 GMT</pubDate>
    <guid isPermaLink="true">https://ferhatatagun.com/blog/cursor-ide-ve-prompt-muhendisligi</guid>
  </item>
  </channel>
</rss>