İçeriğe geç
nitorel
7 GÜNSistemine başlaİlk sistemini yedi günde kur
Öğren
YazılarKaynaklı yazı dizileriKavramlarKavram kasası, formatlarSistemlerYöntemler, iş akışlarıKütüphaneKitaplar, kaynaklar
Kullan
AraçlarTarafsız araç atlasıNot DenetçisiÜcretsiz kontrol ↗nitoreldumpZihnini boşalt ↗nitorelhabitAlışkanlık takibi ↗
HakkındaŞablonlar 1 ücretsiz
kasa/yazilar/affine/08-affine-blog-cms.md

Rehber · Not 114Deneyim

AFFiNE'i CMS gibi kullanmak: kendi bloglarını nasıl kurdular?

AFFiNE ekibi kendi blogunu bir dönem AFFiNE çalışma alanından üretmek için AFFiNE Reader, Markdown dönüşümü, Next.js/Nuxt, GitHub Actions ve statik çıktı adımlarını kullandı. Yazının güncellemeleri public workspace girişinin sonradan kaldırıldığını ve token gerektiğini de söylüyor. Bu yüzden kaynak güncel kurulum tarifi olarak kullanılmamalı; editör ile yayın tarafını ayıran iyi bir mimari vaka.

Yazan Ahmet Canal · 5 Ekim 2026

[[affine]][[cms]][[mimari]]
Okuma
4 dk
Yayın
5 Ekim 2026
Geri bağlantı
1
Kaynak
2
İçindekiler · 14 bölüm
Önceki sistemİlk mimariMetadata problemiEski yazıları nasıl taşıdılar?İlk yaklaşım neden değişti?Public workspace neden kritik bir uyarı?Bugün bu vakadan ne almalıyız?1. Yazma yüzeyi2. İçerik sözleşmesi3. Dönüşüm4. Kanonik build girdisi5. YayınNitorel açısından dersNe zaman AFFiNE'i CMS gibi düşünmek mantıklı?
Bilgi ağı · 4 bağlantılı not
Dizi · 8 / 24AFFiNE’i Adım Adım Kullanmak
  1. 01AFFiNE nedir? Belge, tahta ve veritabanı tek çalışma alanında
  2. 02AFFiNE'de yazı ve tahta aynı çalışmada
  3. 03AFFiNE MCP: Claude ve Cursor notlarını okuyabilirse ne değişir?
  4. 04AFFiNE'e veri taşımak: Notion, Obsidian, OneNote ve Bear
  5. 05AFFiNE 2026: 0.25, 0.26 ve 0.27 ile ne değişti?
  6. 06AFFiNE nasıl çalışıyor? BlockSuite, CRDT ve local-first mimarinin kökeni
  7. 07AFFiNE'i seçmeden önce: güçlü tarafları, sınırları ve 2026 gerçekliği
  8. 08AFFiNE'i CMS gibi kullanmak: kendi bloglarını nasıl kurdular?
  9. 09AFFiNE local-first: veri gerçekten nerede başlıyor?
  10. 10AFFiNE Cloud, yerel çalışma ve self-host: hangisini seçmelisin?
  11. 11AFFiNE self-host: Docker ile kendi sunucunda çalıştırmak ne kazandırır?
  12. 12AFFiNE self-host etmeden önce: yedek, güncelleme ve geri dönüş planı
  13. 13AFFiNE'de veri yaşam döngüsü: içe aktarma, çalışma, senkronizasyon ve çıkış
  14. 14AFFiNE Database: notları tabloya sıkıştırmadan yapılandırmak
  15. 15AFFiNE Calendar View: Database kayıtlarını takvimde görmek
  16. 16AFFiNE takvim entegrasyonları: Google Calendar ve CalDAV ne yapıyor?
  17. 17AFFiNE AI: bilgi tabanına yapay zekâ eklenince ne değişiyor?
  18. 18AFFiNE BYOK: kendi AI API anahtarını kullanmak ne kazandırıyor?
  19. 19AFFiNE MCP kullanım senaryoları: Claude, Cursor ve ChatGPT notlarına nasıl erişir?
  20. 20AFFiNE'den çıkmak kolay mı? Vendor lock-in testi
  21. 21AFFiNE mobil: iOS ve Android günlük bilgi sistemi için yeterli mi?
  22. 22AFFiNE 2022'den 2026'ya nasıl değişti?
  23. 23AFFiNE kullanmalı mısın? 30 günlük karar testi
  24. 24AFFiNE yedekleme ve kurtarma: sync varken neden yine yedek gerekir?
Kısaca

AFFiNE ekibi kendi blogunu AFFiNE'de yazılan içerikten üretmek için klasik bir CMS kurmadı. AFFiNE çalışma alanını **yazma yüzeyi**, bir reader/dönüştürme adımını **çıkarma yolu**, Markdown'ı **ara biçim**, Next.js ve daha sonra Nuxt/Vercel'i **yayın sistemi** olarak kullandı. Yazının sonraki güncellemesi public workspace seçeneğinin arayüzden kaldırıldığını ve API okuması için oturum token'ı gerektiğini söylüyor. Dolayısıyla bu metni 2026 için kopyalanacak kurulum tarifi olarak değil, **içerik üretim vakası** olarak okumak gerekir.

Bu yazı, AFFiNE ekibinin kendi ürününü üretim sürecinde nasıl kullandığını anlatıyor.

Önceki sistem

Teknik yazıda eski blog şu şekilde tarif ediliyor:

  • Next.js,
  • GitHub deposunda statik Markdown dosyaları,
  • dosya yolu ve adından route üretme,
  • frontmatter içinde metadata,
  • build sırasında statik sayfaya dönüştürme.

Bu düzen teknik ekip için anlaşılır.

Fakat içerik yazan herkesin:

  • Markdown,
  • Git,
  • GitHub

bilmesi gerekir.

Ekip AFFiNE'i burada bir **authoring interface** olarak kullanmak istedi.

Yani site motorunu AFFiNE'e çevirmekten çok, yazı yazma yüzeyini AFFiNE'e taşıdılar.

İlk mimari

Yazının ilk sürümünde public workspace içeriği AFFiNE API üzerinden okunuyordu.

AFFiNE Reader kabaca şu işi yapıyordu:

  1. çalışma alanındaki sayfa listesini oku,
  2. her sayfadaki blokları al,
  3. blok içeriğini Markdown'a dönüştür,
  4. tek sayfalık Markdown çıktısı oluştur.

Sonra web uygulaması bu çıktıyı HTML'e dönüştürüyordu.

Bu zincir önemli:

**AFFiNE → blok verisi → Markdown → site**

Markdown burada yazarın doğrudan düzenlediği kanonik dosya rolünü üstlenmiyor; yayın akışındaki **ara temsil** olarak kullanılıyor.

Metadata problemi

Blog, gövde metninden daha fazla veri gerektirir.

Şunlar gerekir:

  • başlık,
  • yazar,
  • etiket,
  • slug,
  • yayın durumu,
  • tarih,
  • kapak.

Ekip eski Markdown frontmatter'ını AFFiNE içeriğinde de kullanmaya devam etti. Böylece yazı yüzeyi değişse bile yayın sisteminin metadata sözleşmesi korunabildi.

Bu iyi bir içerik mimarisi dersi:

**Editör değişebilir. Yayın sözleşmesini editöre gömmemek gerekir.**

Eski yazıları nasıl taşıdılar?

Yaklaşık 50 eski Markdown yazısını elle kopyalamak yerine otomasyon kullandılar.

Yazıdaki tarihsel akış:

  1. dağınık klasörlerdeki `index.md` dosyalarını tek dizinde toplamak,
  2. klasör slug'larını dosya adına dönüştürmek,
  3. frontmatter alanlarını yeni sisteme uyarlamak,
  4. AFFiNE'e yükleme sürecini otomatikleştirmek.

O dönemde uygun resmî API olmadığı için Playwright ile tarayıcı etkileşimini otomatikleştiren bir importer kullanılmış.

Bugün bu otomasyonu aynen kopyalamak doğru olmaz.

Asıl ders:

**Migration, içerik taşımak kadar metadata ve kimlik taşımaktır.**

Slug bozulursa SEO değişir. Publish state bozulursa taslak yayımlanır. Görsel ilişkisi bozulursa makale eksilir.

İlk yaklaşım neden değişti?

Yazının 22 Ocak 2024 güncellemesi doğrudan üretim deneyiminden gelen iki problem anlatıyor.

İlk kurulumda blog sayfaları AFFiNE'den dinamik/ISR benzeri biçimde okunuyordu. Ekip bunun zaman zaman güvenilmez olduğunu ve API sunucusuna beklenmedik trafik üretebildiğini söylüyor.

Sonra iki aşamalı modele geçiyorlar:

  1. GitHub Action, AFFiNE çalışma alanından içerikleri çekip Markdown dosyaları üretir ve repoya yazar.
  2. Repo değişince Vercel build'i statik siteyi yeniden üretir.

Zincir artık:

**AFFiNE → GitHub Action → cache Markdown → Git repo → Vercel build**

Bu daha sıkıcı görünebilir.

Ama üretimde sıkıcı çoğu zaman iyidir.

Ara dosya sayesinde:

  • kaynağın anlık erişilebilirliğine bağımlılık azalır,
  • build girdisi gözle görülebilir,
  • değişiklik Git geçmişine girer,
  • yayın ile editör arasına tampon eklenir.

Public workspace neden kritik bir uyarı?

Aynı güncelleme, public workspace seçeneğinin daha sonra ürün arayüzünden kaldırıldığını söylüyor.

Belgeyi API üzerinden okumak için oturum token'ı kullanılması gerekiyordu ve bu token'ın süresi dolabiliyordu.

Bu, eski teknik yazıları neden körlemesine kurulum rehberi olarak kullanamayacağımızın iyi örneği.

Bir entegrasyon üç şeye bağlı olabilir:

  • ürün özelliği,
  • auth modeli,
  • API davranışı.

Üçünden biri değişince "çalışan örnek" tarihsel belgeye dönüşür.

Bugün bu vakadan ne almalıyız?

Koddan çok mimari ayrımı al.

1. Yazma yüzeyi

Yazarın rahat ettiği yer.

AFFiNE olabilir. Obsidian olabilir. Google Docs olabilir.

2. İçerik sözleşmesi

Başlık, slug, durum, tarih, kaynaklar, ilişkiler.

Bu sözleşme editörden mümkün olduğunca bağımsız olmalı.

3. Dönüşüm

Editör verisini yayın biçimine çeviren adım.

4. Kanonik build girdisi

Markdown/JSON gibi diff alınabilir bir ara çıktı faydalı olabilir.

5. Yayın

Statik site veya uygulama build'i.

Bu ayrım sayesinde içerik editörü değiştiğinde bütün yayın sistemi değişmek zorunda kalmaz.

Nitorel açısından ders

Nitorel'in bugünkü içerik sistemi Git deposundaki Markdown dosyalarını kullanıyor.

Bu vaka "Nitorel'i AFFiNE'e taşıyalım" demiyor.

Tam tersine şu kuralı güçlendiriyor:

**Yazma deneyimi ile production kanonik kaynağı ayrı tutulabilir.**

Bir gün AFFiNE, başka bir editör ya da bir AI ajanı taslak üretme yüzeyi olursa bile production'a giden içerik:

  • şeması doğrulanmış,
  • kaynakları açık,
  • diff alınabilir,
  • build edilebilir

bir ara çıktıdan geçebilir.

Bu, araç bağımlılığını azaltır.

Ne zaman AFFiNE'i CMS gibi düşünmek mantıklı?

Şu durumda:

  • içerik ekibi AFFiNE'de zaten çalışıyor,
  • teknik ekip dönüşüm pipeline'ını sahiplenebiliyor,
  • özel metadata ve build akışı kurmaya değer hacim var,
  • içerik ile görsel düşünme aynı workspace'te tutuluyor.

Şu durumda gereksiz:

  • on yazılık kişisel blog,
  • düz Markdown zaten rahat,
  • bakım yapacak teknik kapasite yok,
  • "bir editör daha az olsun" hedefleniyor.

AFFiNE'in kendi blog deneyi, **üretim sisteminde nerede sınır çizilmesi gerektiğini** gösteriyor.

Editör kullanıcıya rahat bir yazma yüzeyi sunabilir; build ise doğrulanabilir ve kararlı bir girdiye ihtiyaç duyar. İki ihtiyacı ayrı tasarlamak sistemi daha dayanıklı yapar.

Bu yazıda geçen araçlar

AFFiNEBelge, beyaz tahta ve veritabanını aynı sayfada birleştiren açık kaynak çalışma alanı.Freemium · Yerel + senkron

Araçlar örnek içindir; hiçbiri zorunlu değil. Karşılaştırma için araç atlasına bak.

Kaynaklar

Kaynak profili2 web

  1. Xiao, P. (2025, 3 Mart). *Using AFFiNE as your own blog — technical*. AFFiNE Blog. affine.pro/blog/using-affine-as-a-blog-technical web
  2. AFFiNE. (2026, 19 Temmuz). *AFFiNE Open Source: From the First Year to 2026*. affine.pro/blog/one-year-of-open-source web

Deneyim: Editöryal pratik ve kitaplara dayanıyor; birincil araştırma içermiyor. Türler kaynak metninden otomatik çıkarılır. Tüm kaynaklar ve onları anan yazılar Kütüphane’de.

Ahmet Canal

Ahmet Canal

Dijital ürünler geliştiriyor, bilgi mimarisi ve sistem tasarımı üzerine çalışıyorum. Nitorel’i, notlarımı ihtiyaç duyduğum anda yeniden bulma derdinden yola çıkarak yazıyorum.

kaynak-notlari/kaynak-notu-affine-blog-cms.md#kaynak-notu
Kasana al

Bu notu [[kasana]] al.

Yazının özeti, başlıkları, devam yazıları ve kaynakları Obsidian’a hazır bir kaynak notu olarak iner. “Kendi notum” bölümünü sen doldurursun; okuduğun yazı böylece kasanda bir bağlantıya dönüşür.

Kasan yok mu? Ücretsiz Starter Vault
gelen-kutusu/haftalik-not.md#bülten · haftada bir
Bülten

Haftada bir not, gelen kutuna [[bağlansın]].

Yeni yazılar ve uygulanabilir tek bir fikir. Reklam yok, istediğin an tek tıkla ayrılırsın.

← Önceki bölümAFFiNE'i seçmeden önce: güçlü tarafları, sınırları ve 2026 gerçekliğiSonraki bölüm →AFFiNE local-first: veri gerçekten nerede başlıyor?
Bu yazıya bağlananlar
←AFFiNE resmi kaynak haritası: hangi yazı neyi kanıtlıyor?AFFiNE
Bu ağda devam et
→AFFiNE nasıl çalışıyor? BlockSuite, CRDT ve local-first mimarinin kökeniAFFiNE→AFFiNE nedir? Belge, tahta ve veritabanı tek çalışma alanındaAFFiNE→AFFiNE'i seçmeden önce: güçlü tarafları, sınırları ve 2026 gerçekliğiAFFiNE→AFFiNE resmi kaynak haritası: hangi yazı neyi kanıtlıyor?AFFiNE
OKUMA İLERLEMESİ0%
İÇİNDEKİLER14
Önceki sistemİlk mimariMetadata problemiEski yazıları nasıl taşıdılar?İlk yaklaşım neden değişti?Public workspace neden kritik bir uyarı?Bugün bu vakadan ne almalıyız?1. Yazma yüzeyi2. İçerik sözleşmesi3. Dönüşüm4. Kanonik build girdisi5. YayınNitorel açısından dersNe zaman AFFiNE'i CMS gibi düşünmek mantıklı?
Bilgi ağı5 not · 7 bağ
bu notAFFiNE nasıl çalışıyor? BlockSuite, CRDT ve local-first mimarinin kökeni…nasıl çalışıy…AFFiNE nedir? Belge, tahta ve veritabanı tek çalışma alanında…nedirAFFiNE'i seçmeden önce: güçlü tarafları, sınırları ve 2026 gerçekliğiAFFiNE'i seçme…AFFiNE resmi kaynak haritası: hangi yazı neyi kanıtlıyor?…resmi kaynak…

→ verdiği← gelen↔ karşılıklı

AFFiNE'i CMS gibi kullanmak: kendi bloglarını nasıl kurdular?Bir notun üstüne gel; bağlarını gör.
BU AĞDA DEVAM ET
01AFFiNE nasıl çalışıyor? BlockSuite, CRDT ve local-first mimarinin kökeni02AFFiNE nedir? Belge, tahta ve veritabanı tek çalışma alanında03AFFiNE'i seçmeden önce: güçlü tarafları, sınırları ve 2026 gerçekliği04AFFiNE resmi kaynak haritası: hangi yazı neyi kanıtlıyor?
Tüm yazılara dön ↗
[[Zettelkasten]][[İkinci Beyin]][[PARA]][[Evergreen notlar]][[Atomik not]][[İçerik Haritası]][[Aşamalı özetleme]][[Haftalık gözden geçirme]][[Obsidian]][[Geri bağlantılar]][[Zettelkasten]][[İkinci Beyin]][[PARA]][[Evergreen notlar]][[Atomik not]][[İçerik Haritası]][[Aşamalı özetleme]][[Haftalık gözden geçirme]][[Obsidian]][[Geri bağlantılar]]
nitorel

Notlarını bir işe yarasın diye tutanlar için. Kişisel bilgi yönetimi üzerine Türkçe yöntemler, rehberler ve sistemler.

İlk notunu bağla
KeşfetBaşlangıçYazılarKavramlarMarkdown SözlüğüFormat Rehberi
UygulaSistemlerAraçlarNot Denetçisi ↗nitoreldump ↗Kütüphane
NitorelHakkındaŞablonlarBülten arşiviDeğişikliklerKünyeİletişim
İçerikler CC BY 4.0 · © 2026 Nitorel · Ürünler ve marka unsurları hariç. Ahmet Canal tarafından tasarlanmıştır. RSS
GizlilikÇerezlerKVKKKoşullarİade
İstanbul --:--Başa dön
Nitorel.