// agilEspresso — sahte içerik (Agile temalı, gerçekçi)

const SHOTS = [
  {
    id: 1,
    number: "#agilEspresso01",
    title: "Kahve Soğumadan Karar Ver",
    pull: "Ristretto", // çok kısa
    strength: 0.35,
    readSec: 45,
    category: "Karar Verme",
    tldr: "Bir toplantıda karar çıkmıyorsa, toplantıyı uzatmak kararı iyileştirmez — sadece kararsızlığı kurumsallaştırır.",
    body: [
      "Agile'ın kalbinde 'yeterince iyi, şimdi' vardır. Mükemmel kararı beklerken rakipleriniz üç iterasyon önde olur.",
      "Pratik kural: 70% bilgiyle karar ver, 30%'u iterasyonla tamamla. Geri dönüşü olan kararlarda hızlı ol; olmayan (one-way door) kararlarda yavaşla.",
      "Sprint Planning'de 'daha fazla araştırma' cümlesi duyduğunda kronometre başlat. 15 dakikada karar çıkmıyorsa, karar yok demektir — spike aç, bir sonraki sprint'e ertele."
    ],
    source: "Bezos, One-way vs Two-way Doors"
  },
  {
    id: 2,
    number: "#agilEspresso02",
    title: "Daily Stand-up Statü Toplantısı Değildir",
    pull: "Doppio",
    strength: 0.6,
    readSec: 90,
    category: "Scrum",
    tldr: "Stand-up'ta yöneticiye rapor veriyorsan yanlış yapıyorsun. Takıma engelleri söylüyorsan doğru yapıyorsun.",
    body: [
      "Daily'nin amacı senkronizasyon. 'Dün şunu yaptım, bugün şunu yapacağım' üçüncü kişide anlatılan bir özgeçmiş değil — takımın sprint hedefine doğru birlikte yürümesi.",
      "Üç sorunun modern hali: Sprint hedefine yaklaştık mı? Kim takıldı? Birlikte neyi açabiliriz?",
      "15 dakikadan uzun sürüyorsa parking lot kullan. Teknik tartışmayı Daily'ye taşımak, herkesin 14 dakikasını çalmaktır."
    ],
    source: "Scrum Guide (2020)"
  },
  {
    id: 3,
    number: "#agilEspresso03",
    title: "Şeffaflık Yoksa Scrum Yoktur",
    pull: "Espresso",
    strength: 0.8,
    readSec: 120,
    category: "Scrum",
    tldr: "Sorunları, gecikmeleri veya hataları gizlersek (şeffaflık olmazsa), onları inceleyemeyiz (inspection) ve düzeltemeyiz (adaptation).",
    body: [
      "Scrum'ın temeli 'Deneysellik'tir: Şeffaflık → İnceleme → Uyarlama. Üçü birlikte çalışır, biri eksikse sistem çöker.",
      "Red status'u yeşile boyayan bir burn-down'dan kimseye fayda yok. Yanlış sinyal, doğru karardan her zaman daha pahalıdır.",
      "Kötü haberi erken vermek, projeyi kurtarmanın ilk adımıdır. Organizasyon kötü haberi cezalandırıyorsa, sorun Agile'da değil — sistemdedir."
    ],
    source: "Scrum Guide (2020)"
  },
  {
    id: 4,
    number: "#agilEspresso04",
    title: "MVP, Eksik Ürün Demek Değildir",
    pull: "Lungo",
    strength: 0.5,
    readSec: 75,
    category: "Ürün",
    tldr: "MVP = Minimum Viable Product. Viable = yaşayabilir. Tekerleği eksik araba değil; kaykay.",
    body: [
      "Henrik Kniberg'in ünlü çiziminde: tekerleği olmayan bir arabanın parçalarını teslim etmek MVP değildir. Kaykay teslim etmek MVP'dir — kullanıcı bir yerden bir yere gider.",
      "Soru şu: 'Ürünün özünü kullanıcıya en küçük formunda nasıl teslim ederim?' — 'Tam ürünün hangi parçasını çıkarırsam?' değil.",
      "MVP'nin amacı öğrenmektir, satmak değil. 'Bu fikir yaşıyor mu?' sorusunun cevabı."
    ],
    source: "Kniberg, Making Sense of MVP"
  },
  {
    id: 5,
    number: "#agilEspresso05",
    title: "Retrospective'siz Sprint, Kahvesiz Sabahtır",
    pull: "Macchiato",
    strength: 0.45,
    readSec: 60,
    category: "Takım",
    tldr: "Retro'yu atlarsan, aynı hataları farklı sprint'lerde tekrar edersin. Süreç öğrenmez; takım öğrenir.",
    body: [
      "Sprint bitti, demo yapıldı, yeni sprint başlıyor — ve kimse 'ne öğrendik?' diye sormuyor. Bu, ilerleme değil; dönmedir.",
      "İyi retro: somut 1-2 aksiyon, bir sahip, bir sonraki sprint'te kontrol. 'Daha iyi iletişim kurmalıyız' aksiyon değildir.",
      "Psikolojik güven yoksa retro olmaz, tiyatro olur. Takım gerçek sorunları konuşamıyorsa, yönetici odadan çıkmalı."
    ],
    source: "Derby & Larsen, Agile Retrospectives"
  },
  {
    id: 6,
    number: "#agilEspresso06",
    title: "En Pahalı Bilgi, Geç Gelen Geri Bildirimdir",
    pull: "Espresso",
    strength: 0.85,
    readSec: 110,
    category: "Geri Bildirim",
    tldr: "Bir hatayı gereksinim aşamasında düzeltmek 1 birim, geliştirme aşamasında 10 birim, canlı ortamda 100 birim maliyetlidir.",
    body: [
      "Boehm's Curve: hata ne kadar geç fark edilirse, düzeltme maliyeti üstel artar. Bu yüzden testleri sola kaydır (shift-left).",
      "Sprint Review'lar ve sık teslimatlar, 'yanlış şeyi yapma' riskini en ucuza kapatmanın yoludur. Stakeholder'ı 3 ay beklet, 3 ay'lık yanlış iş al.",
      "Müşteri geri bildirimi bir maliyet kalemi değil; en değerli tasarım belgesidir."
    ],
    source: "Boehm's Curve (Software Engineering Economics)"
  },
  {
    id: 7,
    number: "#agilEspresso07",
    title: "Velocity Bir Hedef Değil, Bir Ölçüdür",
    pull: "Ristretto",
    strength: 0.4,
    readSec: 50,
    category: "Metrik",
    tldr: "Velocity'yi artırmaya çalışan takım, sayıyı değil yalanı artırır. Story point şişer, değer şişmez.",
    body: [
      "Velocity = ölçü. Ölçüyü hedefe dönüştürdüğünüz an, Goodhart's Law devreye girer: ölçü bozulur.",
      "Yönetici velocity grafiği istiyorsa iki soru sor: 'Bu grafik hangi kararı verdirecek?' ve 'Aynı kararı daha iyi hangi metrik verdirir?'",
      "Daha sağlıklı metrikler: teslimat sıklığı, lead time, fail/pass oranı, happiness index."
    ],
    source: "Goodhart's Law"
  },
  {
    id: 8,
    number: "#agilEspresso08",
    title: "WIP Limit: Daha Az Başla, Daha Çok Bitir",
    pull: "Doppio",
    strength: 0.55,
    readSec: 70,
    category: "Kanban",
    tldr: "Aynı anda 5 iş başlatmak, hiçbirini bitirmemenin hızlı yoludur. Multitasking bir yetenek değil; bir vergidir.",
    body: [
      "Little's Law: lead time = WIP / throughput. WIP'i düşür, teslimat hızlanır. Matematiksel.",
      "Kanban tahtasında 'In Progress' sütununun bir üst limiti olmalı. Limit dolduğunda yeni iş almak yasak — önce bitir.",
      "Context switching her geçişte 15-20 dakika kayıp. 3 işe paralel koşan bir kişi, aslında %60 kapasiteyle çalışan tek kişidir."
    ],
    source: "Anderson, Kanban"
  },
  {
    id: 9,
    number: "#agilEspresso09",
    title: "Definition of Done, Takımın Onurudur",
    pull: "Espresso",
    strength: 0.75,
    readSec: 85,
    category: "Kalite",
    tldr: "DoD yazılı değilse, 'done' demek yalandır. Her geliştirici farklı bir 'done' anlar.",
    body: [
      "Definition of Done: testler yazıldı mı, code review yapıldı mı, dökümantasyon güncellendi mi, staging'de çalışıyor mu?",
      "Zamanla genişleyen bir liste olmalı: güvenlik taraması, performans testi, erişilebilirlik kontrolü...",
      "DoD eksik bir iş 'done' sütununa geçerse, borç birikir. Technical debt'in %80'i bu şekilde doğar."
    ],
    source: "Scrum Guide (2020)"
  }
];

const ARTICLES = [
  {
    id: "a1",
    title: "Scrum, Seremoni Değildir — Bir Öğrenme Motorudur",
    excerpt: "Takımınız Daily, Planning, Review ve Retro'yu takvime koyduysa Scrum yapıyorsunuz sanıyor olabilirsiniz. Aslında yapmanız gereken, bu toplantıların amacına bakmak.",
    category: "Scrum",
    readMin: 8,
    date: "14 Nis 2026",
    author: "ag/e editör"
  },
  {
    id: "a2",
    title: "Estimation Savaşları: Story Point mu, Saat mi, Hiçbiri mi?",
    excerpt: "Story point'in amacı kesinlik değil, göreli büyüklük. #NoEstimates hareketi ise tamamen vazgeçmeyi öneriyor. İkisi arasında bir orta yol var mı?",
    category: "Metrik",
    readMin: 12,
    date: "09 Nis 2026",
    author: "M. Karaca"
  },
  {
    id: "a3",
    title: "Uzaktan Çalışmada Retrospective'i Yeniden Düşünmek",
    excerpt: "Sticky note'lu whiteboard'dan Miro'ya geçtik, ama retro'nun ruhunu kaybettik mi? Asenkron retro deneyimlerim ve bir şablon.",
    category: "Takım",
    readMin: 6,
    date: "02 Nis 2026",
    author: "D. Arslan"
  },
  {
    id: "a4",
    title: "Product Owner'ın Gerçek İşi Neyi Hayır Demektir",
    excerpt: "Backlog'u büyütmek kolay. Önceliklendirmek, yani 49 şeye hayır deyip 1 şeye evet demek — asıl iş bu.",
    category: "Ürün",
    readMin: 10,
    date: "28 Mar 2026",
    author: "ag/e editör"
  },
  {
    id: "a5",
    title: "Sprint Goal Yoksa, Sadece İş Listesi Var",
    excerpt: "Sprint başında bir hedef cümle kuramıyorsanız, yapacağınız iş toplamı bir sprint değil — sadece bir takvim dilimidir.",
    category: "Scrum",
    readMin: 5,
    date: "21 Mar 2026",
    author: "S. Yılmaz"
  },
  {
    id: "a6",
    title: "Teknik Borç: Yönetmeyi Bilmiyorsak, O Bizi Yönetir",
    excerpt: "Her sprint'in %20'sini teknik borca ayıran takımlar, ayırmayanlardan iki kat daha hızlı teslimat yapıyor. Matematiksel, sezgisel değil.",
    category: "Kalite",
    readMin: 11,
    date: "15 Mar 2026",
    author: "M. Karaca"
  }
];

const CATEGORIES = [
  { name: "Scrum", count: 14, hue: 18 },
  { name: "Kanban", count: 8, hue: 32 },
  { name: "Ürün", count: 11, hue: 280 },
  { name: "Takım", count: 9, hue: 220 },
  { name: "Metrik", count: 7, hue: 200 },
  { name: "Karar Verme", count: 6, hue: 340 },
  { name: "Kalite", count: 5, hue: 160 },
  { name: "Geri Bildirim", count: 4, hue: 40 }
];

Object.assign(window, { SHOTS, ARTICLES, CATEGORIES });
