Wombat, SvelteKit ve MongoDB ile yazılmış hafif bir yorum platformudur. Tek bir widget script'i ile herhangi bir siteye gömülebilir; panelden yorumlar yönetilir ve kullanıcılar kendi sitelerini görebilir.
- Hafif widget ve gömme kolaylığı
- Markdown + DOMPurify ile güvenli içerik render'ı
- Thread yapısı ile yanıt verme desteği
- Emoji reaksiyonları
- Admin panelinde proje bazlı yorum yönetimi
- Admin kullanıcılar için dashboard istatistikleri
- Admin rol yönetimi
- Cookie tabanlı güvenli oturum açma
- Yorum ve reaksiyonlar için oran sınırlama
- SvelteKit
- MongoDB
- TypeScript
- Marked
- DOMPurify
- Depoyu klonlayın.
git clone <repo-url> cd wombat
- Bağımlılıkları yükleyin.
npm install
- MongoDB çalıştırın.
.envdosyasını oluşturun.
MONGODB_URI=mongodb://127.0.0.1:27017
MONGODB_DB_NAME=wombat
JWT_SECRET=super-long-random-secretİlk kullanıcı hesabını /auth ekranından oluşturun, sonra MongoDB'de users koleksiyonundaki ilgili kayda is_admin: true verin.
npm run devKontrol:
npm run checkÜretim build'i:
npm run buildWidget build'i:
npm run build:widget- Kullanıcı
/authekranından giriş yapar veya hesap oluşturur. /dashboardaltında projelerini görür.- Bir proje içinde yorumları onaylar, siler ve yanıtlar.
- Widget,
/api/commentsüzerinden yorumları çeker ve yeni yorumları aynı endpoint'e gönderir. - Reaksiyonlar aynı API üzerinden yönetilir.
- Kullanıcı giriş yapmadıysa
/auth'a yönlendirilir. - Proje sayfaları, kullanıcının sahip olmadığı
project_idiçin açılmaz. is_admin = trueolan kullanıcılar dashboard ana sayfasında ek analiz kartları görür.is_admin = trueolan kullanıcılar admin yönetim kartını görür.
Dashboard içindeki Settings sekmesinde üretilen örnek snippet şuna benzer:
<div id="wombat_thread"
data-host="https://your-domain.com"
data-app-id="PROJECT_ID"
data-page-id="PAGE_ID"
data-page-url="PAGE_URL"
data-page-title="PAGE_TITLE"
></div>
<script async defer src="https://your-domain.com/widget.js"></script>Ana koleksiyonlar:
usersprojectsthreadscommentscomment_reactionsabuse_limits
status:pending,approved,spamis_admin: admin yorumlarını ayırmak için kullanılırparent_id: yanıt ağacı oluşturur
- Her yorum için emoji reaksiyonlarını tutar
- Aynı kullanıcı/cihaz için aynı emoji tekrar eklenirse toggle mantığıyla kaldırılabilir
- Tüm yorum render'ı Markdown + DOMPurify ile temizlenir.
- Yorum gönderiminde input normalizasyonu uygulanır.
- Widget API'si origin uyumu kontrol eder.
- Dashboard tarafında proje sahipliği kontrol edilir.
- Dış bağlantılarda
rel="noreferrer noopener"kullanılır. - Yorum ve reaksiyon endpoint'lerinde IP bazlı oran sınırlama uygulanır.
- Admin rol değişiklikleri yalnızca mevcut adminlerce yapılabilir.
src/routes/api/comments/+server.ts: yorum ve reaksiyon API'sisrc/routes/dashboard: panel sayfalarısrc/lib/widget: gömülebilir widgetsrc/lib/server: MongoDB, auth ve rate-limit yardımcıları
appIdilepageIdeşleşiyor mu kontrol edin.- Yorumun
approveddurumunda olduğundan emin olun. - Widget'ın aynı origin'den yorumları çektiğini doğrulayın.
- Kullanıcının
is_adminalanıtrueolmalı.
Bu proje için henüz açık bir lisans tanımlı değil. İsterseniz uygun bir OSS lisansı ekleyebiliriz.