Altı ay önce bu, bir backend geliştirici, bir DevOps mühendisi ve iki hafta gerektiriyordu. Bugün ise tek bir cümle ve Claude yeterli. İşte tam mimari - ve çoğu geliştiricinin bunu henüz çözemediğinin nedeni.
Çoğu insanın yapay zekaya dair zihinsel modeli yanlış.
Şöyle düşünüyorlar: Yapay zeka asistanı → sen soru sorarsın → o cevap verir.
2026'daki gerçeklik: Yapay zeka ajanı → sen bir sistem tanımlarsın → o, o sistemi inşa eder, dağıtır ve ortamına bağlar. Bir prototip değil. Bir kod parçası değil. Çalışan bir uygulama.
Bu değişimin bir adı var: Üretken Uygulama Mimarisi. Ve bunu pratik hale getiren yığın - Claude + Obsidian + MCP - şu an herkesin kullanımına açık.
1. Üretken Uygulama Mimarisi aslında ne anlama geliyor
Geleneksel yazılım geliştirme:
1Fikir → Şartname → Tasarım → Ön yüz geliştirme → Arka yüz geliştirme2→ Veritabanı kurulumu → API entegrasyonu → Test → Dağıtım3Süre: haftalar. Maliyet: binlerce dolar.
Üretken Uygulama Mimarisi:
1Fikir → Komut → Çalışan sistem2Süre: dakikalar. Maliyet: API token'ları.
Yapay zeka ajanı sadece kod yazmaz. Perde arkasında tam bir Ajan Döngüsü çalıştırır:
Adım 1 - Ayrıştırma
Soyut talebiniz ("bir araba yıkama için CRM kur") düzinelerce atomik alt göreve bölünür: veritabanı şeması, UI bileşenleri, bildirim mantığı, kimlik doğrulama akışı, API uç noktaları.
Adım 2 - MCP ile ortam haritalama
Model Bağlam Protokolü aracılığıyla ajan, hangi araçlara erişimi olduğunu anında anlar - dosya sisteminiz, yüklü paketler, çalışan hizmetler, mevcut API'ler.
Adım 3 - Yinelemeli inşa ve test
Ajan kodu yazar, çalıştırır, derleme hatalarını yakalar, düzeltir ve sistem doğru çalışana kadar - otonom olarak - yeniden test eder.
Adım 4 - Bağlamsal dağıtım
Çıktı, kod içeren bir metin dosyası değildir. Canlı bir yerel ortam veya dağıtılabilir bir web uygulamasıdır.
Geliştiricilere yardımcı olan bir araç ile yapı boru hattını tamamen değiştiren bir sistem arasındaki fark budur.
2. Claude motor olarak - üç dağıtım modu
Mod 1 - Claude Artifacts
Komuttan çalışan uygulamaya giden en hızlı yol. Claude'dan bir şey inşa etmesini istediğinizde, etkileşimli bir Artifact penceresi açar ve siz izlerken gerçek zamanlı olarak eksiksiz bir web uygulamasını (React, HTML, JavaScript) bir araya getirir, derler ve çalıştırır.
Artifact içinde çalışan uygulamayla etkileşime girebilir, doğal dilde üzerinde iyileştirmeler yapabilir ve tüm arşivi dışa aktarabilirsiniz.
Üretime hazır bir finans takipçisi üreten komut:
1Aşağıdaki özelliklere sahip bir kişisel finans takip uygulaması oluştur:23ÖZELLİKLER:4- İşlem kaydı (kategorilerle ekleme/düzenleme/silme)5- İlerleme çubuklarıyla aylık bütçe görünümü6- CoinGecko API'sinden canlı fiyat çeken kripto portföy takipçisi7- Gerçek zamanlı güncellenen net değer hesaplaması8- Karanlık mod geçişi910TEKNİK GEREKSİNİMLER:11- Tek dosyalı React uygulaması12- Sadece useState + useEffect (harici durum yönetimi yok)13- Stil için Tailwind CSS14- Genel API'lerden veri çekme (kimlik doğrulama gerektirmez)15- Mobil uyumlu1617VERİ:18- Oturumlar arasında localStorage'a kaydet19- İşlemleri CSV olarak dışa aktar2021Çıktı: dağıtıma hazır, kendi kendine yeten eksiksiz uygulama.
Claude Artifacts'ın döndürdüğü şey - eksiksiz bir React uygulaması:
1import { useState, useEffect } from "react";23const CATEGORIES = ["Housing","Food","Transport","Entertainment","Health","Savings","Income","Crypto","Other"];4const CRYPTO_IDS = { BTC: "bitcoin", ETH: "ethereum", SOL: "solana" };56export default function FinanceTracker() {7 const [transactions, setTransactions] = useState(() =>8 JSON.parse(localStorage.getItem("transactions") || "[]")9 );10 const [cryptoPrices, setCryptoPrices] = useState({});11 const [form, setForm] = useState({ description:"", amount:"", category:"Other", type:"expense", date:"" });12 const [darkMode, setDarkMode] = useState(false);1314 useEffect(() => {15 const ids = Object.values(CRYPTO_IDS).join(",");16 fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`)17 .then(r => r.json())18 .then(data => {19 const prices = {};20 Object.entries(CRYPTO_IDS).forEach(([sym, id]) => { prices[sym] = data[id]?.usd || 0; });21 setCryptoPrices(prices);22 });23 }, []);2425 useEffect(() => {26 localStorage.setItem("transactions", JSON.stringify(transactions));27 }, [transactions]);2829 const addTransaction = () => {30 if (!form.description || !form.amount) return;31 setTransactions(prev => [...prev, { ...form, id: Date.now(), amount: parseFloat(form.amount),32 date: form.date || new Date().toISOString().split("T")[0] }]);33 setForm({ description:"", amount:"", category:"Other", type:"expense", date:"" });34 };3536 const totalIncome = transactions.filter(t => t.type === "income").reduce((s,t) => s + t.amount, 0);37 const totalExpenses = transactions.filter(t => t.type === "expense").reduce((s,t) => s + t.amount, 0);38 const netWorth = totalIncome - totalExpenses;3940 const bg = darkMode ? "#0D0D0D" : "#F9F7F4";41 const card = darkMode ? "#1A1A1A" : "#FFF";42 const text = darkMode ? "#F0F0F0" : "#1A1A1A";43 const border = darkMode ? "#2A2A2A" : "#E8E8E8";4445 return (46 <div style={{ minHeight:"100vh", background:bg, color:text, fontFamily:"system-ui, sans-serif" }}>47 <div style={{ maxWidth:800, margin:"0 auto", padding:"24px 16px" }}>4849 <div style={{ display:"flex", justifyContent:"space-between", marginBottom:24 }}>50 <div>51 <h1 style={{ fontSize:22, fontWeight:500, margin:0 }}>Finance Tracker</h1>52 <p style={{ margin:"4px 0 0", fontSize:13, color: netWorth >= 0 ? "#22C55E" : "#EF4444" }}>53 Net worth: ${netWorth.toFixed(2)}54 </p>55 </div>56 <button onClick={() => setDarkMode(!darkMode)}57 style={{ padding:"8px 14px", borderRadius:8, border:`1px solid ${border}`,58 background:card, color:text, cursor:"pointer" }}>59 {darkMode ? "Light" : "Dark"}60 </button>61 </div>6263 <div style={{ display:"grid", gridTemplateColumns:"1fr 1fr", gap:10, marginBottom:20 }}>64 {[["Income","#22C55E",totalIncome],["Expenses","#EF4444",totalExpenses]].map(([label,color,val]) => (65 <div key={label} style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:14 }}>66 <p style={{ margin:0, fontSize:12, color:"#999" }}>{label}</p>67 <p style={{ margin:"4px 0 0", fontSize:20, fontWeight:600, color }}>${val.toFixed(2)}</p>68 </div>69 ))}70 </div>7172 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, padding:16, marginBottom:20 }}>73 <div style={{ display:"grid", gridTemplateColumns:"2fr 1fr 1fr", gap:8, marginBottom:8 }}>74 <input placeholder="Description" value={form.description}75 onChange={e => setForm(p => ({ ...p, description: e.target.value }))}76 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />77 <input type="number" placeholder="Amount" value={form.amount}78 onChange={e => setForm(p => ({ ...p, amount: e.target.value }))}79 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }} />80 <select value={form.type} onChange={e => setForm(p => ({ ...p, type: e.target.value }))}81 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>82 <option value="expense">Expense</option>83 <option value="income">Income</option>84 </select>85 </div>86 <div style={{ display:"grid", gridTemplateColumns:"2fr auto", gap:8 }}>87 <select value={form.category} onChange={e => setForm(p => ({ ...p, category: e.target.value }))}88 style={{ padding:"9px 12px", borderRadius:8, border:`1px solid ${border}`, background:bg, color:text, fontSize:13 }}>89 {CATEGORIES.map(c => <option key={c}>{c}</option>)}90 </select>91 <button onClick={addTransaction}92 style={{ padding:"9px 20px", borderRadius:8, background:"#E8692A",93 color:"#fff", border:"none", cursor:"pointer", fontSize:13, fontWeight:500 }}>94 Add95 </button>96 </div>97 </div>9899 <div style={{ background:card, border:`1px solid ${border}`, borderRadius:10, overflow:"hidden" }}>100 <p style={{ margin:0, padding:"12px 16px", borderBottom:`1px solid ${border}`, fontSize:13, fontWeight:500 }}>101 Transactions ({transactions.length})102 </p>103 {transactions.slice().reverse().map(t => (104 <div key={t.id} style={{ display:"flex", justifyContent:"space-between",105 alignItems:"center", padding:"11px 16px", borderBottom:`1px solid ${border}` }}>106 <div>107 <p style={{ margin:0, fontSize:13, fontWeight:500 }}>{t.description}</p>108 <p style={{ margin:"2px 0 0", fontSize:12, color:"#999" }}>{t.category} · {t.date}</p>109 </div>110 <span style={{ fontSize:14, fontWeight:600, color: t.type==="income" ? "#22C55E" : "#EF4444" }}>111 {t.type==="income" ? "+" : "-"}${t.amount.toFixed(2)}112 </span>113 </div>114 ))}115 </div>116 </div>117 </div>118 );119}
Uygulamanın tamamı bu. Tek bir komut. Claude Artifacts içinde anında çalışır.
Mod 2 - Claude + MCP (yerel dağıtım)
MCP (Model Bağlam Protokolü), Claude'a yerel ortamınıza doğrudan erişim sağlar. Tek bir komut sadece kod üretmekle kalmaz - sabit diskinizde klasörler oluşturur, terminal aracılığıyla paketler yükler, yapılandırma dosyaları yazar ve yerel bir sunucu başlatır.
Claude'u dosya sisteminize bağlayan MCP yapılandırması:
1{2 "mcpServers": {3 "filesystem": {4 "command": "npx",5 "args": [6 "-y",7 "@modelcontextprotocol/server-filesystem",8 "/Users/yourname/Projects"9 ]10 },11 "terminal": {12 "command": "npx",13 "args": ["-y", "@modelcontextprotocol/server-terminal"]14 },15 "sqlite": {16 "command": "npx",17 "args": [18 "-y",19 "@modelcontextprotocol/server-sqlite",20 "--db-path",21 "/Users/yourname/Projects/app.db"22 ]23 }24 }25}
Bu yapılandırma etkinken, tek bir komut:
1Bir araba yıkama işletmesi için yerel bir CRM sistemi kur ve dağıt.23Projeyi ~/Projects/carwash-crm/ konumunda oluştur.4Bağımlılıkları otomatik olarak yükle.5Aşağıdaki tablolarla SQLite veritabanı kur:6- customers (ad, telefon, e-posta, araç, notlar)7- visits (musteri_id, tarih, hizmet, fiyat, durum)8- staff (ad, rol, program)910Aşağıdaki özelliklere sahip bir web arayüzü oluştur:11- Müşteri arama ve profilleri12- Müşteri başına ziyaret geçmişi13- Aylara göre gelir gösterge tablosu14- SMS hatırlatma sistemi (Twilio entegrasyonu, sadece yapılandırma)1516Tamamlandığında geliştirme sunucusunu başlat.17Hazır olduğunda localhost URL'sini bildir.
Claude bunu MCP aracılığıyla uçtan uca yürütür - dizin yapısını oluşturur, Node paketlerini yükler, veritabanı şemasını yazar, UI'yi kurar ve sunucuyu başlatır. Bir localhost URL'si elde edersiniz.
Mod 3 - Şirket standartlarıyla Claude Projects
UI kitinizi, tasarım token'larınızı, API dokümantasyonunuzu ve güvenlik gereksinimlerinizi bir kez Claude Project'e yükleyin. Claude'un bundan sonra ürettiği her sistem, dahili yığınınıza otomatik olarak uyum sağlar.
1[Claude Project bağlamı şunları içerir:]2- design-system.md (renkler, tipografi, boşluk)3- api-standards.md (kimlik doğrulama kalıpları, hata kodları)4- security-policy.md (giriş doğrulama kuralları, CORS yapılandırması)5- stack.md (React 18, TypeScript, Tailwind, Prisma, PostgreSQL)67Komut:8"E-posta doğrulaması ve gönderimde otomatik Notion veritabanı girişi9içeren bir müşteri kayıt formu oluştur."1011Çıktı: yığınınızla tam olarak eşleşen, üretime hazır kod -12temizlik gerektirmez.
3. Obsidian, yapay zeka komuta merkezi olarak
2026'da Obsidian bir not alma uygulaması değildir. Birikmiş bilgi tabanınızın, inşa ettiğiniz her sistem için bağlam katmanı haline geldiği kişisel bir yapay zeka komuta merkezidir.
Mimari değişim: bilgi hazineniz artık bir depolama alanı değil. RAG (Alma Arttırılmış Üretim) - yapay zeka ajanlarının herhangi bir görevi yürütmeden önce sorguladığı canlı bir bilgi tabanı.
Bunu çalıştıran eklenti yığını:
Smart Connections - tüm bilgi hazinenizi dizine ekler ve her yapay zeka çağrısında ilgili notları bağlam olarak gönderir.
Obsidian Copilot - bilgi hazinenizi doğrudan Claude API'sine bağlar. Bir kez yapılandırın:
12 "provider": "anthropic",3 "model": "claude-opus-4-8",4 "apiKey": "YOUR_ANTHROPIC_KEY",5 "systemPrompt": "Sen bir sistem mimarısın. Kullanıcının eksiksiz bilgi hazinesine bağlam olarak erişimin var. Sistemler kurarken, mevcut notlarına, geçmiş kararlarına ve yerleşik kalıplarına başvur. Çıktı: çalışan kod + Obsidian dosya yapısı.",6 "contextWindow": {7 "includeActiveFile": true,8 "includeLinkedFiles": true,9 "includeRecentFiles": 10,10 "includeFolders": ["Projects", "Systems", "Decisions"]11 }12}
Sistem tasarım arayüzü olarak Canvas
Tek bir komut, Claude'un tüm sistem mimarisini birbirine bağlı bloklar halinde yerleştirdiği etkileşimli bir Obsidian Canvas'ı oluşturur.
1Obsidian Canvas'da komut:2"Twitter hesabım için bir içerik üretim hattı tasarla.3Haftada 3 makale yayınlıyorum ve 5 sponsorlu anlaşmayı yönetiyorum.4Mevcut içerik takvimi notlarıma başvur."56Çıktı: Aşağıdaki bağlantılı bloklara sahip Canvas:7→ İçerik fikri oluşturma (ilgi notlarınızdan çeker)8→ Taslak → İnceleme → Yayınlama iş akışı9→ Son tarih uyarılarıyla sponsor takibi10→ Analiz gösterge tablosu11→ Otomatik çapraz paylaşım mantığı12→ Her blok ilgili Obsidian dosyasına bağlanır
Claude'un yapılandırılmış bir dosya olarak oluşturduğu Canvas çıktısı:
1{2 "nodes": [3 {4 "id": "ideation",5 "type": "file",6 "file": "Systems/ContentPipeline/Ideation.md",7 "x": 0, "y": 0, "width": 300, "height": 200,8 "color": "1"9 },10 {11 "id": "draft",12 "type": "file",13 "file": "Systems/ContentPipeline/Draft.md",14 "x": 400, "y": 0, "width": 300, "height": 200,15 "color": "3"16 },17 {18 "id": "sponsors",19 "type": "file",20 "file": "Systems/ContentPipeline/SponsorTracker.md",21 "x": 0, "y": 300, "width": 300, "height": 200,22 "color": "5"23 },24 {25 "id": "analytics",26 "type": "file",27 "file": "Systems/ContentPipeline/Analytics.md",28 "x": 400, "y": 300, "width": 300, "height": 200,29 "color": "6"30 }31 ],32 "edges": [33 {34 "id": "e1",35 "fromNode": "ideation", "fromSide": "right",36 "toNode": "draft", "toSide": "left",37 "label": "approved concepts"38 },39 {40 "id": "e2",41 "fromNode": "sponsors", "fromSide": "right",42 "toNode": "draft", "toSide": "bottom",43 "label": "brief integration"44 }45 ]46}
4. Tam gizlilik için yerel LLM'ler
Hassas veriler için - müşteri sistemleri, finansal araçlar, dahili araçlar - bir bulut API'si yerine yerel bir model üzerinden yönlendirme yaparsınız. Makinenizden sıfır veri çıkar.
1# Ollama'yı yükle2curl -fsSL https://ollama.com/install.sh | sh34# Kodlama yapabilen bir model çek5ollama pull llama3.2:latest6# veya daha güçlü kod üretimi için:7ollama pull qwen2.5-coder:32b89# Yerel sunucuyu başlat10ollama serve11# localhost:11434 adresinde çalışır
Obsidian Copilot'u yerel uç noktayı kullanacak şekilde yapılandırın:
1{2 "provider": "ollama",3 "model": "qwen2.5-coder:32b",4 "baseUrl": "http://localhost:11434",5 "systemPrompt": "Sen, MCP aracılığıyla kullanıcının dosya sistemine erişimi olan yerel bir sistem kurucusun. Tam çalışan sistemler kur. Açık talimat olmadan harici API'lere asla veri gönderme."6}
Yerel model + MCP köprüsü:
1import requests2import json3from pathlib import Path4from watchdog.observers import Observer5from watchdog.events import FileSystemEventHandler67OBSIDIAN_INBOX = Path.home() / "Obsidian" / "AI-Inbox"8PROJECTS_DIR = Path.home() / "Projects"9OLLAMA_URL = "http://localhost:11434/api/generate"1011class InboxWatcher(FileSystemEventHandler):12 """13 Obsidian AI-Inbox klasörünü izle.14 Yeni bir .md dosyası göründüğünde, onu bir kurulum komutu olarak ele al.15 Yerel LLM'ye ilet -> MCP aracılığıyla yürüt -> geri bildirim yap.16 """1718 def on_created(self, event):19 if not event.src_path.endswith(".md"):20 return2122 prompt_file = Path(event.src_path)23 prompt = prompt_file.read_text()2425 print(f"[Inbox] Yeni komut: {prompt_file.name}")26 self.execute_prompt(prompt, prompt_file.stem)2728 def execute_prompt(self, prompt: str, project_name: str):29 response = requests.post(OLLAMA_URL, json={30 "model": "qwen2.5-coder:32b",31 "prompt": f"""Sen bir sistem kurucusun.32 Bu sistemi kur: {prompt}3334 Aşağıdakileri içeren bir JSON planı çıktısı ver:35 {{36 "project_dir": "göreceli yol",37 "files": [38 {{"path": "göreceli yol", "content": "dosya içeriği"}}39 ],40 "commands": ["npm install", "vb"],41 "summary": "ne inşa edildi"42 }}""",43 "stream": False44 })4546 plan = json.loads(response.json()["response"])47 project_dir = PROJECTS_DIR / plan["project_dir"]48 project_dir.mkdir(parents=True, exist_ok=True)4950 for file_spec in plan["files"]:51 file_path = project_dir / file_spec["path"]52 file_path.parent.mkdir(parents=True, exist_ok=True)53 file_path.write_text(file_spec["content"])54 print(f"[Build] Oluşturuldu: {file_path}")5556 result_file = OBSIDIAN_INBOX / f"{project_name}-result.md"57 result_file.write_text(58 f"# Kurulum Tamamlandı: {project_name}\n\n"59 f"**Konum:** {project_dir}\n\n"60 f"**Özet:** {plan['summary']}\n\n"61 f"**Oluşturulan dosyalar:** {len(plan['files'])}\n"62 )63 print(f"[Done] Sonuç Obsidian'a yazıldı")6465if __name__ == "__main__":66 OBSIDIAN_INBOX.mkdir(exist_ok=True)67 observer = Observer()68 observer.schedule(InboxWatcher(), str(OBSIDIAN_INBOX), recursive=False)69 observer.start()70 print(f"[Watching] {OBSIDIAN_INBOX}")7172 try:73 while True:74 import time; time.sleep(1)75 except KeyboardInterrupt:76 observer.stop()77 observer.join()
Obsidian AI-Inbox'ınıza bir kurulum komutuyla bir .md dosyası bırakın. Köprü onu alır, yerel model üzerinden yönlendirir, sisteminizi Projects klasörünüzde kurar ve Obsidian'a bir tamamlanma notu yazar.
5. Eksiksiz iş akışı - fikirden dağıtılan sisteme
1ADIM 1 - Girdi2Obsidian'da, AI panelinizde şunu yazın:3"Kripto entegrasyonu ve aylık bütçe takibi4ile kişisel finans sistemi."5Oluştur'a basın.67ADIM 2 - Bağlam birleştirme8Smart Connections eklentisi bilgi hazinenizi tarar.9Son 3 aydaki finans notlarınızı bulur.10Bunları Claude API'sine bağlam olarak gönderir.1112ADIM 3 - Mimari13Claude (Opus 4.8) sistemi tasarlar:14- Veritabanı şeması15- UI bileşenleri16- API entegrasyonları17- Dosya yapısı1819ADIM 4 - Kurulum20Claude (Sonnet 5) MCP aracılığıyla uygular:21- ~/Projects/finance-tracker/ oluşturur22- Bağımlılıkları yükler23- Tüm dosyaları yazar24- localhost:3000'de geliştirme sunucusunu başlatır2526ADIM 5 - Sonuç27Obsidian şu klasörü oluşturur: Finance System/28İçinde: bağlantılı gösterge tabloları, yapılandırma notları29ve çalışan uygulamaya doğrudan bağlantı.
- adımdan çalışan uygulamaya kadar geçen toplam süre: 4-12 dakika.
Bu değişimin temsil ettiği şey
Bu, kod yazmanın daha hızlı bir yolu değil.
Fikir ile uygulama arasında farklı bir ilişki.
Ne inşa edebileceğinizin sınırı eskiden teknik beceri ve zaman idi. Geliştirici olmayan biri bir CRM kuramazdı. Tek bir geliştirici aynı anda beş sistem kuramazdı. Bir ekip, haftalar yerine saatler içinde teslimat yapamazdı.
Tüm bu üç sınırlama da ortadan kalktı.
Yeni sınırlama, düşünce netliğidir - tam olarak neye ihtiyacınız olduğunu tanımlama, iyi bir çıktının neye benzediğini anlama ve onu iyileştirme yeteneği. Bu, teknik bir beceri değil, bir düşünme becerisidir.
Üretken Uygulama Mimarisi geliştiricileri gereksiz kılmaz. Sistemler halinde düşünme yeteneğini - bir şeyi inşa etmeden önce neye ihtiyacınız olduğu üzerinde akıl yürütme - onu uygulayan kodu yazma yeteneğinden çok daha değerli kılar.
Yığın burada. Modeller yetenekli. Geriye kalan tek değişken, onunla inşa mı ediyorsunuz yoksa inşa eden insanlar hakkında mı okuyorsunuz.
Bu makale, Temmuz 2026 itibarıyla Claude, Obsidian ve MCP'de mevcut olan yetenekleri açıklamaktadır. Belirli eklenti sürümleri ve API yapılandırmaları değişebilir. Uygulamadan önce her zaman güncel dokümantasyonu kontrol edin.
Okuduğunuz için teşekkürler.





