Son aylarda kendi mimari blogum için sıfırdan yazdığım PHP tabanlı CMS'i açık kaynak olarak GitHub'a yükledim. Belki birinin işine yarar diye paylaşıyorum, eleştirilerinize/önerilerinize açığım.
Kısaca ne? Hazır CMS'lerden (WordPress, Ghost, vb.) sıkıldım. Mimari ve restorasyon yazıları için "magazine atelier" estetiğinde, hızlı, sade ve tamamen elimde olan bir altyapı istedim. Sonuç: framework kullanmayan, PHP 8.2+ üzerine kurulu, MySQL ile çalışan, paylaşımlı hosting'de bile sorunsuz çalışan bir CMS.
Canlı görmek için:odogan.com.tr
Kaynak kodu:github.com/mimarodogan/odogan

Neden Yine Bir CMS Daha?
WordPress'in eklenti karmaşası, Ghost'un Node.js bağımlılığı, statik generator'ların dinamik özellik eksikliği... Kendi ihtiyaçlarıma göre yazmak daha temiz oldu. Özellikle:
- Magazine grid + featured + editörün seçimi gibi yayıncılık odaklı düzen
- Türkçe içeriğe özel: Ateşman okunabilirlik puanı, doğru karakter encoding
- cPanel/paylaşımlı hosting friendly Node.js/Docker gerekmiyor
- Atelier estetiği serif tipografi, § paragraf işareti, kobalt aksent
İçerik Editörü:
- WYSIWYG zengin metin editörü
- Slash komutları (/alıntı, /tablo, /görsel Notion tarzı)
- Footnote sistemi (akademik [^1] syntax)
- Outline panel (yazarken yan tarafta H2/H3 live)
- Co-author / çoklu yazar
- Series (dizi yazılar)
- Auto-save + revision history
- Quick edit modal
- Markdown + sanitized HTML dual format
- Otomatik XML sitemap (posts, projects, authors, images)
- IndexNow protokolü (Bing/Yandex anında bildirim)
- llms.txt (AI search engine optimizasyonu)
- JSON-LD @graph (Article, Person, Organization, FAQ, ImageGallery)
- OG image otomatik üreteç
- SEO skoru + Ateşman okunabilirlik (canlı, debounced)
- Internal link önerisi (FULLTEXT search tabanlı)
- Reading progress + table of contents

Güvenlik:
- Argon2id password hashing
- TOTP 2FA (RFC 6238)
- CSRF middleware (global)
- Rate limiting (login, register, password reset)
- HSTS + CSP + X-Frame-Options + Permissions-Policy
- File upload polyglot sanitization
- Forgot password flow + email change pending pattern
- KVKK Cookie Consent + Consent Mode V2 (GDPR uyumlu)
- Build pipeline: PurgeCSS + cssnano + Stylelint
- JS pipeline: ESLint + Prettier + Terser + source maps
- AVIF + WebP + JPEG fallback (<picture>)
- BlurHash placeholder (lazy image loading)
- Brotli + gzip + tag-based cache invalidation
- Critical CSS desteği
- prefers-reduced-motion global
- Modal focus traps
- aria-pressed, aria-current, aria-live
- Tablo <th scope> + caption
- :focus-visible outline tutarlılığı

Teknoloji Yığını
- Backend: PHP 8.2+, MySQL 8.0+ (framework YOK)
- Frontend: Vanilla JS (33 modül), CSS partials → Terser/cssnano
- Cache: File-based (Redis opsiyonel)
- Mail: Brevo (transactional + newsletter)
- Error tracking: Sentry
- Hosting: cPanel / paylaşımlı (LiteSpeed / Apache)
Bonus: İlginç Olabilecek Özellikler
- Proje portfolyo + Leaflet interaktif harita (yapı tipi filter chip)
- Sözlük modülü alfabetik akordeon + FULLTEXT arama
- Yazar başvuru sayfası (multi-step wizard)
- Yorum sistemi (threaded, moderasyon, admin email)
- Etkileşim clap, bookmark, follow author, emoji reactions, quote-to-tweet
- Newsletter (Brevo, double opt-in, unsubscribe token)
- Backup CLI DB + uploads otomatik yedek (cron destekli)
- Migration runner (admin panelden veya CLI'dan)

Kullanım Hızlı Başlangıç
git clone https://github.com/mimarodogan/odogan cd odogan composer install npm install && npm run build cp .env.example .env # DB credentials doldur php database/migrate.php php -S localhost:8000 router.phpLisans
MIT istediğin gibi kullan, fork'la, modifiye et, satışa koy. Sadece LICENSE dosyasını koruman yeterli. Atıf zorunlu değil ama yapılırsa sevinirim.
Geri Bildirim
Henüz yeni public oldu. Eleştirilerinizi, bug raporlarınızı, PR'larınızı bekliyorum. Özellikle:
- Kod kalitesi (PHP 8.2 idiomatik mi?)
- Güvenlik açıkları (responsible disclosure için profile'da mail var)
- Performans (TTFB, LCP iyileştirme önerileri)
- Eksik özellik fikirleri
Teşekkürler 🌿
Linkler:
🌐 odogan.com.tr
🐙 github.com/mimarodogan/odogan
👤 github.com/mimarodogan