Files
ares/belgeler/admin_panel.md
Beyhan Oğur 4d92991817 first commit
2026-04-26 21:30:42 +03:00

7.7 KiB
Raw Blame History

You are an AI developer assistant. Your task is to generate a complete admin panel scaffold (HTML templates, static assets and server-side route stubs) for a Go Fiber project. Use only the following frontend libraries already available in the project dependencies: Alpine.js, Bootstrap 5, HTMX, jQuery. Do not add other frameworks. Produce code artifacts described in the "Outputs" section below.

Constraints & requirements (önemli)

  • Kullanılan frontend kütüphaneleri: Alpine.js (v3), HTMX, Bootstrap 5, jQuery — bunları proje /public üzerinden kullan.
  • Tema: Koyu ve aydın (dark/light) destekli olacak. Kullanıcı temayı değiştirdiğinde tercih localStorage'da saklansın ve sayfa yenilendiğinde korunmalı.
  • Layout: Sol sabit (desktop) sidebar; mobilde off-canvas veya slide-in davranışı. Üstte sticky header (navbar) — hep görünür. Ana içerik HTMX ile parçalar halinde yüklensin (partials/fragments).
  • Login sayfası: Cloudflare Turnstile ile korumalı. Turnstile için sitekey ve secret key placeholder kullanılacak (örneğin: YOUR_TURNSTILE_SITEKEY, YOUR_TURNSTILE_SECRET). Login formu HTMX ile POST gönderecek, sunucu Turnstile doğrulaması yapacak.
  • Accessibility: ARIA nitelikleri eklensin, klavye navigasyonu çalışsın, renk kontrastı erişilebilir seviyede olsun.
  • Responsive: Desktop / tablet / mobile uyumlu olmalı.
  • Minimal JS: Alpine.js ile UI state yönetimi (tema toggle, mobil sidebar), HTMX ile partial yükleme, küçük helper JS dosyası için jQuery veya vanilla kullanılabilir. Büyük bundler veya build pipeline gerektirmeyecek.
  • Security: CSRF, XSS ve session güvenliği için sunucu tarafı notları verilecek (CSRF token uygulaması önerisi, Turnstile server-side doğrulama, secure cookie flags, rate limiting).
  • Dosya/dizin yapısı: templates/ (HTML şablonları), public/css, public/js, public/assets. Server tarafı Go Fiber rotaları ve basit handler açıklamaları verilecek (kod değil; hangi endpoint ne döner).

Görsel / UX istekleri

  • Tema değişimi için hem simge hem metin olacak (ör. güneş/ay). Geçiş animasyonu küçük (0.2s - 0.35s).
  • Sidebar: ikon + etiket, aktif öğe vurgulu, mümkünse collapse/expand (yalnızca genişlik daraltıldığında).
  • Header: sol marka, ortada opsiyonel breadcrumb (isteğe bağlı), sağda tema toggle ve kullanıcı dropdown.
  • İçerik alanı: kart bazlı, boşluklar (padding/margin) dengeli.
  • Animasyonlar: HTMX swap sırasında fade veya slide geçişi (kısa).
  • Renk paleti: net iki palet tanımı (aydın için açık nötr arka plan + mavi aksan; koyu için koyu mavi/şeftali aksan). Renkler CSS custom properties (CSS değişkenleri) ile tanımlansın.

Girdi (input)

  • ./public Alpine.js, Bootstrap, HTMX, jQuery (mevcut).
  • Kullanıcı sağlayacak: Cloudflare Turnstile sitekey/secret (placeholder bırakılacak).
  • Sunucu: Go Fiber (kullanıcı Fiber projesine kolayca entegre edebilsin).

Outputs — AI'nin üretmesi gerekenler (tam liste)

  1. Temel layout şablonu (templates/layout.html veya .tmpl):

    • ./public/assets (Bootstrap CSS/JS, HTMX, Alpine, jQuery, Turnstile script).
    • Body: sticky header, sol sidebar, main content container (#main-content) — HTMX hedefi.
    • Tema yönetimi için Alpine veri nesnesi referansları (tema toggle, mobile sidebar kontrol).
    • Ana layout'ta HTMX ile fragment yüklemeye uygun linkler (hx-get, hx-target="#main-content", hx-swap).
  2. Login şablonu (templates/login.html):

    • Cloudflare Turnstile widget (data-sitekey placeholder).
    • Form HTMX ile POST atacak (hx-post="/login", hx-target="#login-feedback" vb.).
    • Başarı/hata fragment'leri için sunucu tarafı cevap formatı belirtilecek.
  3. Örnek HTMX fragment'leri (templates/fragments/*):

    • dashboard fragment
    • users list fragment
    • settings fragment (her fragment minimal içerik, HTMX swap ile çalışacak biçimde)
  4. public/js/main.js (küçük açıklama, içerik oluşturulacak):

    • Alpine tema manager yapısı (isDark reactive, save/load localStorage, toggle fonksiyonları).
    • Mobile sidebar toggle fonksiyonları.
    • HTMX üzerinden fragment yüklenirken küçük loading indicator veya class ekleme.
    • Turnstile ile integration notu (widget render ve token gönderimi; token'ın login formu ile nasıl dahil olacağı).
  5. public/css/theme.css:

    • CSS custom properties hem light hem dark için.
    • Sidebar, header, card stilleri, responsive medya sorguları.
    • Küçük animasyonlar (fade, transition).
  6. Sunucu tarafı: Go Fiber rotaları listesi ve davranış açıklamaları (kod değil, endpoint + beklenen request/response):

    • GET /login -> login şablonunu döndür
    • POST /login -> Turnstile token doğrulaması + credentials doğrulama; başarılıysa session cookie oluştur ve /admin yönlendir (HTMX için fragment veya redirect)
    • GET /admin -> layout render (veya layout + default fragment)
    • GET /admin/content/dashboard -> dashboard fragment (HTMX hedefi)
    • GET /admin/content/users -> users fragment
    • GET /admin/content/settings -> settings fragment
    • GET /logout -> oturumu sonlandır
    • admin middleware ye agit tum rotalar
    • (Opsiyonel) POST /api/users/* gibi API uç noktaları (JSON) — HTMX yerine AJAX gerekeceğinde kullanılacak
  7. Güvenlik & operasyonel notlar (dokümantasyon/metin):

    • Turnstile: server-side doğrulama nasıl yapılır (istek: secret ve token ile Cloudflare API endpoint çağrısı; doğrulama şartı).
    • CSRF: HTMX formlarında CSRF token nasıl geçilir (hidden input veya header); Fiber için örnek header adı ve cookie ilişkisi (kod değil açıklama).
    • Session yönetimi: secure, httpOnly, SameSite=strict/ Lax önerisi.
    • Rate limiting önerisi (ör. login için).
    • Input validation and output escaping reminder.
  8. Acceptance criteria / test senaryoları:

    • Tema toggle yapıldığında localStorage güncellenmeli ve sayfa yenilendiğinde tercih korunmalı.
    • Sidebar linkine tıklandığında HTMX ile fragment yüklensin, header sabit kalsın.
    • Mobilde sidebar toggle düzgün çalışsın ve overlay kapanışı sağlansın.
    • Login formu Turnstile widget üretiyor; form gönderildiğinde Sunucu Turnstile token'ı doğruluyor — geçerse oturum açma gerçekleşiyor, geçmezse hata mesajı.
    • Erişilemeyen bir fragment istenirse HTMX hedefinde uygun hata gösterimi (alert/flash) gelsin.
    • Temel a11y kontrolü: tüm interaktif öğeler klavye ile erişilebilir olsun, img/ikonlar için alt metin/aria-label.

Ek istekler / tercih edilen çıktı biçimi

  • Üretilen dosyaları dosya isimleriyle ve kısa açıklamalarıyla listelerken KOD VERMEYİN — sadece hangi dosyayı ve ne içermesi gerektiğini net maddelemeyle verin (ama AI kod da üretirse ayrı bir adımda bunu isteyebilirim).
  • Turnstile sitekey/secret için placeholder kullanın ve kullanıcıya nerede değiştireceğini açıkça belirtin.
  • HTMX fragment response biçimi: tam HTML fragment (sadece main-content içeriği) veya JSON+HTML toggles; tercihen saf HTML fragment kullanılsın.
  • Her dosya için kısa "örnek içerik açıklaması" verin (ör. dashboard fragment: 3 adet statistic card ve bir tablo).

Çıktı teslim formatı

  • Lütfen üretim çıktısını şu şekilde organize et:
    • "Files to create" listesi (path + kısa açıklama)
    • "Server endpoints" listesi (method + path + beklenen davranış)
    • "Güvenlik & deployment notları"
    • "Acceptance tests"
  • Tekrar ediyorum: BU PROMPT sadece kılavuzdur — şu an yalnızca prompt dosyasını istiyorum, KOD YOK. Eğer kod oluşturmaya hazırsan, ayrı bir istekte bulunacağım.

Not: Kullanıcı adı ve mevcut package.json bağımlılıklarını unutma: Alpine.js, Bootstrap 5, htmx, jquery. Cloudflare Turnstile sitekey/secret işaretlerini placeholder bırak.