97 lines
7.7 KiB
Markdown
97 lines
7.7 KiB
Markdown
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.
|