Özellikler • Kurulum • Ekran Görüntüleri • Mimari • API • Katkıda Bulunun
Knowhy LMS, şirket içi eğitim ihtiyaçlarını karşılamak için tasarlanmış, modern ve hafif bir Öğrenme Yönetim Sistemidir. Hibrit video sistemi sayesinde hem yerel sunucuda barındırılan hassas eğitim videolarını hem de YouTube üzerindeki içerikleri tek bir platformda yönetebilirsiniz.
┌─────────────────────────────────────────────────────────────────┐
│ │
│ 📚 Kurslar → 📦 Modüller → 🎬 Dersler │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────────────────┐ │
│ │ React │ ←→ │ Node.js │ ←→ │ PostgreSQL │ │
│ │ Vite │ │ Express │ │ + Prisma ORM │ │
│ └─────────┘ └─────────┘ └─────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
- Hiyerarşik Yapı: Kurslar → Modüller → Dersler şeklinde organize içerik
- Sürükle-Bırak Sıralama: Modül ve ders sıralamasını kolayca değiştirin
- Taslak/Yayın Modu: Kursları hazır olana kadar taslak olarak tutun
- Thumbnail Desteği: Kurs ve ders kapak görselleri
┌────────────────────────────────────────────────────────────┐
│ VIDEO TİPLERİ │
├────────────────────────────────────────────────────────────┤
│ │
│ 📁 LOKAL VİDEO 🎬 YOUTUBE EMBED │
│ ───────────── ───────────────── │
│ • Sunucuda barındırılır • YouTube ID ile embed │
│ • Range streaming • YouTube Player API │
│ • Hassas içerikler için • Bant genişliği tasarrufu│
│ • Tam kontrol • Otomatik kalite ayarı │
│ │
└────────────────────────────────────────────────────────────┘
- Otomatik Kayıt: Her 15 saniyede bir izleme pozisyonu kaydedilir
- Kaldığı Yerden Devam: Video kaldığı yerden otomatik başlar
- Tamamlama Durumu: Ders ve kurs bazında tamamlama yüzdeleri
- Toplam İzleme Süresi: Kullanıcı bazında toplam çalışma süresi
| Rol | Yetkiler |
|---|---|
| Admin | Tüm sistem yönetimi, kullanıcı onayı, raporlar |
| Eğitmen | Kurs oluşturma, düzenleme, öğrenci takibi |
| Öğrenci | Kurslara kayıt, video izleme, yorum yapma |
- Zaman Damgalı Yorumlar: Videonun belirli anlarına yorum yapın
- Yanıt Sistemi: Yorumlara yanıt verin, tartışmalar başlatın
- Dosya Ekleri: Derslere PDF, DOCX gibi dokümanlar ekleyin
- Departman Bazlı Raporlar: Hangi departman ne kadar eğitim aldı?
- Kurs Tamamlama Oranları: Kurs bazında başarı metrikleri
- Kullanıcı İstatistikleri: Bireysel ilerleme takibi
- Excel Export: Raporları dışa aktarın
- JWT Tabanlı Auth: Access + Refresh token sistemi
- Rol Bazlı Erişim (RBAC): Endpoint bazında yetkilendirme
- Şifre Hashleme: bcrypt ile güvenli şifre saklama
- Kullanıcı Onay Sistemi: Admin onayı ile kayıt
|
|
|
Aşağıdaki ekran görüntüleri platform/ klasöründen alınmıştır.
|
Giriş
|
Öğrenci Paneli
|
|
Öğrenci Ders Ekranı
|
Öğrenci Profili
|
|
Eğitmen: Kurs Ekleme (1)
|
Eğitmen: Kurs Ekleme (2)
|
|
Eğitmen: Öğrenci Yönetimi
|
Admin Ana Ekran
|
|
Admin: Yönetim Paneli
|
Admin: Kullanıcı Yönetimi
|
|
Admin: Raporlar
|
Admin: Ayarlar
|
- Node.js 20 veya üzeri
- Docker & Docker Compose
- Git
# 1. Projeyi klonlayın
git clone https://github.com/knowhycodata/knowhy-lms.git
cd knowhy-lms
# 2. Environment dosyasını oluşturun
cp backend/.env.example backend/.env
# 3. Docker ile başlatın
docker-compose up -d
# 4. Veritabanı migration'ları çalıştırın
docker-compose exec backend npx prisma migrate deploy
# 5. (Opsiyonel) Örnek veri yükleyin
docker-compose exec backend npx prisma db seedUygulama şu adreslerde çalışacaktır:
- Frontend: http://localhost
- Backend API: http://localhost:3000
- PostgreSQL: localhost:5432
# Backend kurulumu
cd backend
npm install
cp .env.example .env
npx prisma generate
npx prisma migrate dev
npm run dev
# Frontend kurulumu (yeni terminal)
cd frontend
npm install
npm run dev# backend/.env
DATABASE_URL="postgresql://user:password@localhost:5432/knowhy_lms"
JWT_SECRET="your-super-secret-jwt-key"
JWT_REFRESH_SECRET="your-refresh-token-secret"
PORT=3000
NODE_ENV=development┌─────────────────────────────────────────────────────────────────────────┐
│ KNOWHY LMS MİMARİSİ │
├─────────────────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Admin │ │Eğitmen │ │ Öğrenci │ │
│ └────┬────┘ └────┬────┘ └────┬────┘ │
│ │ │ │ │
│ └───────────────────┼───────────────────┘ │
│ │ │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ FRONTEND (React + Vite) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Pages │ │Components│ │ Hooks │ │ Services │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ Tailwind CSS + shadcn/ui + Lucide Icons │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ │ REST API (HTTP/JSON) │
│ ▼ │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ BACKEND (Node.js + Express) │ │
│ │ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ Routes │→ │Middleware│→ │Controller│→ │ Services │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
│ │ │ │
│ │ JWT Auth + RBAC + Validation + Error Handling │ │
│ └───────────────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────────┼───────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ PostgreSQL │ │ File System │ │ YouTube │ │
│ │ (Prisma) │ │ (Videos) │ │ (External) │ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────────────┘
User ─────────────────┬─────────────────────────────────────┐
│ │ │
│ 1:N │ 1:N │ 1:N
▼ ▼ ▼
Course ──────► Module ──────► Lesson ◄────── Progress ◄─────┘
│ │
│ 1:N │ 1:N
▼ ▼
Enrollment Comment ◄──── Comment (replies)
│
│ 1:N
▼
Attachment
Detaylı mimari dokümantasyonu için: docs/ARCHITECTURE.md
| Endpoint | Metod | Açıklama |
|---|---|---|
/api/auth/register |
POST | Yeni kullanıcı kaydı |
/api/auth/login |
POST | Giriş yap, token al |
/api/auth/refresh |
POST | Access token yenile |
/api/auth/logout |
POST | Çıkış yap |
/api/auth/me |
GET | Profil bilgisi |
| Endpoint | Metod | Açıklama |
|---|---|---|
/api/courses |
GET | Kurs listesi |
/api/courses/:id |
GET | Kurs detayı |
/api/courses |
POST | Kurs oluştur (Eğitmen) |
/api/courses/:id |
PUT | Kurs güncelle |
/api/courses/:id/enroll |
POST | Kursa kayıt ol |
| Endpoint | Metod | Açıklama |
|---|---|---|
/api/videos/:lessonId/token |
POST | Video izleme token'ı |
/api/videos/:lessonId/stream |
GET | Video streaming |
/api/progress/:lessonId |
PUT | İlerleme kaydet |
/api/progress/stats/me |
GET | Kullanıcı istatistikleri |
| Endpoint | Metod | Açıklama |
|---|---|---|
/api/comments/lesson/:lessonId |
GET | Ders yorumları |
/api/comments/lesson/:lessonId |
POST | Yorum ekle |
/api/comments/:id |
DELETE | Yorum sil |
knowhy-lms/
├── backend/
│ ├── prisma/
│ │ ├── schema.prisma # Veritabanı şeması
│ │ ├── migrations/ # DB migration'ları
│ │ └── seed.ts # Örnek veri
│ ├── src/
│ │ ├── config/ # Konfigürasyon
│ │ ├── controllers/ # Route handler'ları
│ │ ├── middlewares/ # Auth, validation, error
│ │ ├── routes/ # API route tanımları
│ │ ├── services/ # Business logic
│ │ ├── utils/ # Yardımcı fonksiyonlar
│ │ └── app.ts # Express uygulaması
│ └── uploads/ # Video/dosya storage
├── frontend/
│ ├── src/
│ │ ├── components/ # React bileşenleri
│ │ │ ├── ui/ # shadcn/ui bileşenleri
│ │ │ ├── VideoPlayer.tsx
│ │ │ ├── CommentSection.tsx
│ │ │ └── Layout.tsx
│ │ ├── pages/ # Sayfa bileşenleri
│ │ ├── hooks/ # Custom React hooks
│ │ ├── services/ # API çağrıları
│ │ └── lib/ # Utility fonksiyonlar
│ └── public/ # Statik dosyalar
├── docs/ # Dokümantasyon
├── docker-compose.yml # Docker yapılandırması
├── LICENSE # Apache 2.0 lisansı
└── README.md # Bu dosya
Katkılarınızı bekliyoruz! Lütfen CONTRIBUTING.md dosyasını okuyun.
- Projeyi fork edin
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Değişikliklerinizi commit edin (
git commit -m 'feat: add amazing feature') - Branch'i push edin (
git push origin feature/amazing-feature) - Pull Request açın
feat: yeni özellik
fix: hata düzeltme
docs: dokümantasyon
style: kod formatı
refactor: kod yeniden yapılandırma
test: test ekleme
chore: genel bakım
Bu proje Apache License 2.0 altında lisanslanmıştır.
Copyright 2024 Knowhy LMS Contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Bu projede kullanılan açık kaynak kütüphanelere ve topluluklarına teşekkür ederiz:
Made with ❤️ for better learning experiences











