8 dk

Çevrimiçi Kurs Web Uygulaması Oluşturun: Dersler, İlerleme, Sertifikalar

Dersler, sınavlar, ilerleme takibi, sertifikalar ve yönetici paneli ile online bir kurs web uygulaması planlayın ve oluşturun—veri modelleri, UX, güvenlik ve lansman ipuçları dahil.

Çevrimiçi Kurs Web Uygulaması Oluşturun: Dersler, İlerleme, Sertifikalar

Platform Hedeflerini ve MVP Kapsamını Tanımlayın

Teknoloji yığını seçmeden veya UI ekranları tasarlamadan önce “bitti”nin ne demek olduğunu netleştirin. Bir çevrimiçi kurs platformu basit bir ders kütüphanesinden kohortlu, notlandırmalı ve entegrasyonlu tam bir LMS’e kadar her şey olabilir. İlk işiniz bunu daraltmak.

Bu kimin için?

Öncelikle ana kullanıcılarınızı ve her birinin ne yapabilmesi gerektiğini adlandırın:

  • Öğrenciler: kayıt olma (veya erişim alma), dersleri tüketme, sonraki dersi görme ve kursu bitirme.
  • Eğitmenler: kurs/ders oluşturma ve öğrenenlerin nasıl ilerlediğini anlama.
  • Yöneticiler: kullanıcıları yönetme, erişim sorunlarını çözme ve içeriği denetleme.

Pratik bir test: bir rolü tamamen kaldırırsanız ürün hâlâ çalışır mı? Evet ise, o rolün özellikleri muhtemelen lansmandan sonra eklenmelidir.

Temel sonuçları tanımlayın

İlk sürüm için, öğrenenlerin gerçekten hissettiği sonuçlara odaklanın:

  • Derslere erişim (izleme/okuma) ve net bir “sonraki ders” yolu.
  • İlerleme oturumlar/cihazlar arasında hatırlanır.
  • Tamamlama tanınır (ve isteğe bağlı olarak bir sertifika tetikler).

Diğer her şey—sınavlar, tartışmalar, indirmeler, kohortlar—eğitim modeliniz için elzem değilse bekleyebilir.

MVP kapsamı: önce ne gönderilir, sonra ne eklenir

Temiz bir MVP genellikle şunları içerir:

  • Kurs + ders sayfaları, temel bir kurs oluşturucu ve öğrenci panosu
  • Basit ilerleme takibi (ör. dersi tamamla olarak işaretleme)
  • Temel bir sertifika uygunluk kuralı (ör. tüm gerekli dersleri tamamla)

Sonrası için saklayın: gelişmiş değerlendirmeler, otomasyon iş akışları, entegrasyonlar, çoklu eğitmen gelir payları.

Erken başarı metriklerini seçin

Hedeflerinize uyan 3–5 metrik seçin:

  • Kurs tamamlama oranı
  • 7/30 günlük öğrenen tutma
  • Kayıt/katılmadan sonra “ilk derse ulaşma süresi”
  • 100 öğrenen başına destek talepleri (özellikle giriş/erişim sorunları)
  • Sertifika verme oranı (sertifikalar önemliyse)

Bu metrikler, özellik istekleri biriktiğinde kapsam kararlarını dürüst tutar.

Kullanıcı Rollerii ve Temel İş Akışları

Net kullanıcı rolleri, bir çevrimiçi kurs platformunu inşa etmeyi kolaylaştırır ve bakımını çok daha yönetilebilir kılar. Kim ne yapabilir diye erken karar verirseniz, ödeme, sertifikalar veya yeni içerik türleri eklediğinizde acı veren yeniden yazımlardan kaçınırsınız.

Üç temel rol

Çoğu kurs web uygulaması üç rol ile başlayabilir: Öğrenci, Eğitmen ve Yönetici. Sonradan rolleri bölebilirsiniz (ör. “Öğretim Asistanı” veya “Destek”), ama bu üçü temel iş akışlarını karşılar.

Öğrenci iş akışı: sürtünmesiz öğrenme

Bir öğrencinin yolu zahmetsiz hissetmeli:

  • Kurslara göz atma (arama, kategoriler, önizlemeler)
  • Kaydolma (ücretsiz veya ücretli)
  • Öğrenmeye başlama (bir dersi açma, video/metin/sınav tüketme)
  • Kaldığı yerden devam etme (devam düğmesi, son ders durumu)

Tasarımın kilit detayı: “kaldığı yerden devam etme”, ürünün her kurs için bir öğrencinin son etkinliğini (açtığı son ders, tamamlama durumu, zaman damgaları) hatırlamasını gerektirir. İleri düzey ilerleme takibini erteleseniz bile, bu durumu baştan planlayın.

Eğitmen iş akışı: içerik oluşturma ve sonuçları izleme

Eğitmenlerin iki büyük yeteneğe ihtiyacı vardır:

  1. Dersleri oluşturma ve yönetme: bir kurs ana hattı oluşturma, ders ekleme/düzenleme, varlık yükleme (PDF, slayt) ve mevcut kayıtları bozmadan içeriği yeniden sıralama.
  2. Öğrenen ilerlemesini görme: kaç öğrencinin başlayıp tamamladığını veya bir derste nerede bırakıldığını görme.

Pratik bir kural: eğitmenler genellikle ödemeleri, kullanıcı hesaplarını veya platform düzeyindeki ayarları düzenleyememelidir. Onları içerik ve kurs düzeyindeki içgörülerle odaklı tutun.

Yönetici iş akışı: platform kontrolü ve destek

Yöneticiler operasyonel görevlerle ilgilenir:

  • Kullanıcıları yönetme (rol değişiklikleri, hesap kurtarma)
  • Kursları yönetme (onaylama/yayınlama/yayından kaldırma, politika sorunlarını ele alma)
  • Ödemeleri/iade işlemlerini yönetme (monetize ediliyorsa)
  • Destek sorunlarını çözme (kayıt/erişim düzeltmeleri)

Rol tabanlı izinleri erken eşleyin

Kodu yazmadan önce izinleri basit bir matris olarak yazın. Örneğin: “Sadece yöneticiler bir kursu silebilir”, “Eğitmenler yalnızca kendi kurslarındaki dersleri düzenleyebilir” ve “Öğrenciler yalnızca kayıtlı oldukları kurslardaki derslere erişebilir.” Bu tek egzersiz güvenlik açıklarını önler ve gelecekteki veri taşımalarını azaltır.

Kurs ve Ders Özellikleri (Öğrenenlerin Gerçekten İhtiyacı Olanlar)

Öğrenenler platformunuzu yönetici ayarlarına göre değil, bir kursu ne kadar hızlı bulabildiklerine, ne elde edeceklerini anlayabildiklerine ve dersler arasında sorunsuz ilerleyebildiklerine göre yargılar. MVP’niz net yapı, güvenilir bir ders deneyimi ve basit, öngörülebilir tamamlama kurallarına odaklanmalı.

İnsanların nasıl öğrendiğine uygun bir kurs yapısı

Tarama açısından kolay bir hiyerarji ile başlayın:

  • KursModüller/BölümlerDersler
  • Dersler video, metin veya karma olabilir
  • Bir kursa veya belirli bir derse eklenen indirmeleri (PDF, şablonlar) destekleyin
  • Öğrenmeyi güçlendiriyorsa hafif sınavlar/ödevler ekleyin (sadece gösteriş için değil)

Yazar deneyimini basit tutun: modül/dersleri yeniden sırala, görünürlüğü (taslak/yayın) ayarla ve öğrenci olarak önizle.

Kurs kataloğu + iniş sayfaları: “Bu benim için mi?” sorusunu yanıtlayın

Katalogunuzun üç temel şeyi olmalı: arama, filtreler ve hızlı gezinti.

Yaygın filtreler: konu/kategori, seviye, süre, dil, ücretsiz/ücretli ve “devam eden”. Her kursun bir iniş sayfası olmalı: öğrenme çıktıları, müfredat, önkoşullar, eğitmen bilgisi ve nelerin dahil olduğu (indirmeler, sertifika, sınavlar).

Ders oynatıcı: bırakmayı önleyen küçük detaylar

Video dersler için öncelik verin:

  • Oynatma hızı (0.75×–2×)
  • Altyazılar/transkriptler (yönetimi ve yüklemeyi sağlayın)
  • Kaldığı yerden devam etme

Opsiyonel ama değerli:

  • Zaman damgasına bağlı notlar
  • Yer imleri (bir anı kaydet ve sonra dön)

Metin dersleri başlıkları, kod bloklarını ve temiz bir okuma düzenini desteklemeli.

İlerlemeyi inşa etmeden önce “tamamlama”yı tanımlayın

Ders türüne göre tamamlama kurallarını kararlaştırın:

  • Video: ≥ X% izlendi (ör. %90) veya sona gelindi
  • Metin: manuel olarak tamamlandı olarak işaretlendi (otomatik kaydırma dikkatle kullanılmalı)
  • Sınav/ödev: gönderildi, geçildi veya değerlendirildi

Ardından kurs tamamlama kuralını belirleyin: tüm gerekli derslerin tamamlanması ya da isteğe bağlı derslerin hariç tutulması. Bu seçimler ilerleme çubuklarını, sertifikaları ve destek taleplerini etkiler—bu yüzden erken açık olun.

İlerleme Takibi: Kurallar, Olaylar ve Kenar Durumları

İlerleme takibi, öğrenenlerin momentum hissettiği alan ve destek taleplerinin sık başladığı yerdir. UI’yi inşa etmeden önce her seviyede (ders, modül, kurs) “ilerleme”nin ne anlama geldiğine dair kuralları yazın.

İlerleme kurallarını tanımlayın (ders → modül → kurs)

Ders seviyesinde net bir tamamlama kuralı seçin: bir “tamamla” düğmesi, videonun sonuna gelme, bir sınavı geçme veya bunların kombinasyonu. Ardından toplayın:

  • Modül ilerlemesi = modüldeki tamamlanan derslerin yüzdesi (veya ders türüne göre ağırlıklandırılmış)
  • Kurs ilerlemesi = modüller genelindeki toplam tamamlama

İsteğe bağlı derslerin sayılıp sayılmayacağını açıkça belirtin. Sertifikalar ilerlemeye bağlıysa, belirsizlik istemezsiniz.

Doğru olayları izleyin

Güvenilir ve analiz edilebilir küçük bir olay seti kullanın:

  • started (ilk kez bir dersi açtıklarında)
  • last_viewed zaman damgası (geri döndüklerinde güncellenir)
  • completed (tamamlama kuralı karşılandığında)
  • quiz_passed (deneme sayısını ve geçme/kalma bilgisini saklayın)

Olayları hesaplanan yüzdelerden ayrı tutun. Olaylar gerçekleri temsil eder; kurallar değişirse yüzdeler yeniden hesaplanabilir.

Erken ele almanız gereken kenar durumları

Dersleri yeniden ziyaret etme: bir öğrenci içeriği tekrar açtığında tamamlamayı sıfırlamayın—sadece last_viewed güncellensin. Kısmi izleme: video için eşikler (ör. %90) ve kaldıkları konumu saklama düşünün. Çevrimdışı notlar sunuyorsanız, notları bağımsız (sonra senkronize) tutun; bunları tamamlama sinyali olarak kullanmayın.

Öğrenci panosu: “sonraki adımı” görünür kılın

İyi bir öğrenci panosu şunu gösterir: güncel kurs, sonraki ders, son görüntüleme ve basit bir tamamlama yüzdesi. Bir “Devam Et” düğmesi ekleyin ve bir sonraki tamamlanmamış öğeye (ör. /courses/{id}/lessons/{id}) derin bağlantı verin. Bu, şık grafiklerden daha fazla ayrılmayı azaltır.

Sertifikalar: Uygunluk, PDF Üretimi ve Doğrulama

Sertifikalar basit görünür (“PDF indir”), ama kurallar, güvenlik ve destekle bağlantılıdır. Onları erken tasarlarsanız, “Her şeyi bitirdim — neden sertifikam yok?” gibi sinirli e-postalardan kaçınırsınız.

Uygunluk kuralları (açıkça belirtin)

Sistemin tutarlı olarak değerlendirebileceği sertifika kriterlerini seçin:

  • Yalnızca tamamlama: tüm gerekli dersler tamamlandığında sertifika verilir.
  • Sınav eşiği: genel bir skor gerektir (ör. %80) veya belirli sınavları geçmeyi şart koş.
  • Eğitmen onayı: projeler veya kohort kurslar için yararlı; bir “İnceleme iste” adımı ve onay durumu ekleyin.

Son kararı bir anlık görüntü olarak saklayın (uygun mu/e, sebep, zaman damgası, onaylayan) böylece sonuç dersler düzenlense bile değişmez.

Sertifikada bulunması gerekenler

Her sertifika kaydına en az şu alanları koyun ve PDF’de gösterin:

  • Öğrencinin tam adı (profilinde girildiği şekliyle)
  • Kurs adı (opsiyonel olarak eğitmen/organizasyon)
  • Veriliş tarihi (ve gerekiyorsa son kullanım/bitiş tarihi)
  • Benzersiz sertifika ID (insan tarafından okunabilir ve aranabilir)

Bu benzersiz ID destek, denetim ve doğrulama için temel olur.

PDF + doğrulama sayfası (ikisini birlikte kullanın)

Pratik bir yaklaşım PDF indirme artı paylaşılabilir bir doğrulama sayfasıdır (ör. /certificates/verify/<certificateId>).

PDF’yi tutarlı olsun diye sunucu tarafında bir şablondan üretin. Kullanıcılar “İndir”e tıkladığında ya dosyayı döndürün ya da geçici bir bağlantı sağlayın.

Kolay tahrifi önleyin

İstemci tarafından üretilen PDF’lerden ve düzenlenebilir HTML indirmelerinden kaçının. Bunun yerine:

  • PDF’leri sunucu tarafında (veya güvenilir bir PDF hizmetinde) oluşturun
  • Doğrudan indirmeler için kısa süreli imzalı URL’ler kullanın
  • Denetim günlükleri tutun (verildi, indirildi, iptal edildi, yeniden verildi)

Son olarak, dolandırıcılık veya iadeler önemliyse iptal etme yolunuz olmalı ve doğrulama sayfası mevcut durumu açıkça göstermeli.

Veri Modeli ve Depolama Temelleri

Hazır olduğunda webin ötesine geçin
Öğrenciler hareket halindeyken daha iyi bir deneyime ihtiyaç duyduğunda platformunuzu Flutter ile mobil uygulamaya genişletin.

Temiz bir veri modeli, kurs uygulamanızı yeni ders türleri, sertifikalar, kohortlar eklerken bile genişletilebilir kılar ve her değişikliği bir veritabanı geçişine dönüştürmez. Küçük bir tablo/collection setiyle başlayın ve hangi veriyi durum olarak saklayacağınızı, hangisini türetebileceğinizi kasıtlı olarak ayırın.

Temel varlıklar (ölçeklenebilecek minimum)

En azından şunlara ihtiyacınız olacak:

  • users: profil, e-posta, rol, durum.
  • courses: başlık, açıklama, yayın durumu, sahibi/eğitmen.
  • lessons: course_id, sıra, tür (video/makale/sınav), gerekli bayrağı.
  • enrollments: user_id, course_id, durum, started_at, completed_at.
  • progress: user_id, course_id, lesson_id, tamamlama durumu, zaman damgaları.
  • certificates: user_id, course_id, certificate_id, issued_at, verification_code.

Kurs yapısını (dersler, sıra, gereksinimler) kullanıcı aktivitesinden (ilerleme) ayrı tutun. Bu ayrım raporlama ve güncellemeleri çok daha basit yapar.

İlerleme ve raporlama: özetler için model

“Kursta tamamlama” ve “kohort bazlı ilerleme” gibi raporlara ihtiyacınız olacağını varsayın. Kohortları ilk günde başlatmasanız bile, daha sonra gruplayabilmek için enrollments.cohort_id (null olabilir) gibi opsiyonel alanlar ekleyin.

Panolar için her sayfa yüklemede tüm progress satırlarını tarayarak sayımlardan kaçının. Bir ders tamamlandığında güncellenen hafif bir enrollments.progress_percent alanı veya analiz için gece oluşturulan bir özet tablosu düşünün.

Video ve indirmeler için depolama

Büyük dosyaları (videolar, PDF’ler, indirmeler) nesne depolamada (ör. S3 uyumlu) saklayın ve CDN üzerinden dağıtın. Veritabanında yalnızca meta veriyi saklayın: dosya URL/yolu, boyut, içerik türü ve erişim kuralları. Bu veritabanını hızlı ve yedeklemeleri yönetilebilir tutar.

Erken eklenmesi gereken indeksler

Sürekli çalıştıracağınız sorgular için indeks ekleyin:

  • progress (user_id, course_id) öğrenci panosu için
  • progress (user_id, lesson_id) “bu ders tamamlandı mı?” kontrolleri için
  • enrollments (course_id, status) eğitmen/yönetici görünümleri için
  • certificates (verification_code) genel doğrulama aramaları için

Mimari ve Teknoloji Yığını (Sürdürülebilir Tutun)

Sürdürülebilir bir mimari, en yeni çerçeveyi kovalamaktan çok, ekibinizin yıllarca güvenle dağıtabileceği bir yığını seçmekle ilgilidir. Bir kurs platformu için “sıkıcı” seçimler genellikle kazanır: tahmin edilebilir dağıtım, net sorumluluk ayrımı ve ürüne uyan bir veritabanı modeli.

Çoğu ekip için basit bir yığın

Pratik bir temel şu şekildedir:

  • Ön uç: React (Next.js) veya Vue (Nuxt) hızlı, bileşen tabanlı UI için.
  • Arka uç: Node.js (NestJS/Express) veya Python (Django/FastAPI) düz API’ler ve geniş ekosistem için.
  • Veritabanı: PostgreSQL ilişkisel veriler (kurslar, dersler, kayıtlar, ilerleme, sertifikalar) için.

Ekip küçükse, temiz sınırları olan bir “monolit” genellikle mikroservislerden daha kolaydır. Modülleri (Courses, Progress, Certificates) ayrı tutarak yine de gelecekte evriltebilirsiniz.

Eğer erken iterasyonları hızlandırmak ve kod kilitlenmesine takılmamak istiyorsanız, Koder.ai gibi bir hızlandırıcı platform ilk sürümü prototip ve dağıtmak için yardımcı olabilir: sohbette iş akışlarını tanımlarsınız, planlama adımında rafine edersiniz ve deploy edilebilen veya kaynak kodu olarak dışa aktarılabilen bir React + Go + PostgreSQL uygulaması üretilir.

API yaklaşımı: REST vs GraphQL

Her ikisi de iyi çalışır. Ürününüz ve ekibinizin alışkanlıklarına göre seçin:

  • REST anlaşılması, cache’lenmesi ve debug edilmesi en kolay seçenektir. Tipik uç noktalar şunlar olabilir:
    • GET /courses, GET /courses/:id
    • GET /lessons/:id
    • POST /progress/events (tamamlama, sınav gönderimi, video izlenme)
    • POST /certificates/:courseId/generate
    • GET /certificates/:id/verify
  • GraphQL karmaşık panolar (öğrenci panosu, yönetici paneli) için fazla veri çekmeyi azaltabilir, ancak şema ve resolver karmaşıklığı getirir.

İyi bir uzlaşma: temel iş akışları için REST, panolar zorlaşıyorsa ileride GraphQL eklemek.

Uzun süren işler için arka plan görevleri

Kurs platformları web isteğini engellememesi gereken işleri barındırır. Başlangıçtan kuyruğa/işçi kurulumunu kullanın:

  • Video işleme/transkoding (upload kabul ediyorsanız)
  • PDF sertifika üretimi
  • E-posta gönderimi (hoşgeldin, tamamlanma bildirimleri, makbuzlar)

Yaygın desenler: Redis + BullMQ (Node), Celery + Redis/RabbitMQ (Python) veya yönetilen bir kuyruk servisi. İş yüklerinde sadece ID’leri taşıyın (tam nesne değil) ve işleri idempotent yapın ki tekrar denemeler güvenli olsun.

Gün birincisi: kayıt ve izleme

Dağıtımdan önce hafif gözlemlenebilirlik kurun:

  • Yapısal loglar (istek ID, kullanıcı ID, kurs ID, iş ID)
  • Hata takibi (ön/arka uç) gerçek hataları görmeniz için
  • Performans izleme yavaş istekler ve sorgular için
  • İş izleme kuyruk derinliği, yeniden denemeler ve dead-letter hataları için

Hatta küçük panolar bile “sertifika iş hataları” veya “ilerleme olaylarında ani artış” gibi uyarılarla lansman haftasında saatler kazandırır.

Kayıtlar ve Ödemeler (Parayla Sunuyorsanız)

Canlı betayı çevrimiçi alın
İlk sürümünüzü hızlıca dağıtın ve beta geri bildirimleriyle detayları iyileştirin.

Para almaya başladığınız anda iki soruya temiz cevap verebilmeniz gerekir: kim kayıtlı ve neye erişmeye hakkı var. Bu yüzden monetizasyona geçtiğinizde bunun için net bir modeliniz olsun.

Kayıt seçenekleri: destekleyebileceğinizi seçin

Çoğu kurs uygulaması bir veya iki modelle başlar ve sonra genişler:

  • Ücretsiz kayıt: onboarding ve pazarlama için harika.
  • Tek seferlik satın alma: en basit ücretli seçenek; erişim genellikle “ömür boyu” olarak verilir (ne demek olduğunu tanımlayın).
  • Abonelik: katalog erişimi abonelik süresince; yenilemeler, başarısız ödemeler ve iptallerle ilgilenmeyi gerektirir.
  • Kuponlar (opsiyonel): faydalı ama son kullanma, maksimum kullanım, birleştirme gibi kenar durumlar ekler.

Kayıt kaydınızı her modeli temsil edecek şekilde tasarlayın (ödenen tutar, para birimi, satın alma türü, başlangıç/bitiş tarihleri).

Ödemeler: yeniden icat etmeyin, entegre edin

Bir ödeme sağlayıcısı kullanın (Stripe, Paddle vb.) ve yalnızca gerekli ödeme meta verisini saklayın:

  • Sağlayıcı müşteri ID’si
  • Checkout/session ID
  • Ödeme/charge ID (veya fatura/abonelik ID)
  • Tutar, para birimi, zaman damgaları, durum

Ham kart verisi saklamaktan kaçının—sağlayıcı PCI uyumluluğunu yönetsin.

Satın alma sonrası erişim: haklar (entitlements)

Erişim, uygulamada çeşitli yerlere serpiştirilmiş “ödeme başarılı” bayraklarına dayanmak yerine kayıtlara bağlı haklarla verilmeli.

Pratik bir desen:

  • Ödeme olayı (webhook) kayıt durumunu günceller.
  • Kayıt haklar verir (kurs erişimi, paket erişimi, abonelik katalogu).
  • Her ders/kurs isteği hakları kontrol eder.

Fiyat katmanları sunuyorsanız, bunun ürün sayfanızla tutarlı olduğundan emin olun. Uygulama ayrıntıları ve webhook tuzakları için okuyucuları ilgili dokümantasyona yönlendirmeyin — kendi entegrasyon notlarınızı tutun.

Güvenlik, Gizlilik ve Erişim Kontrolü

Güvenlik, bir çevrimiçi kurs platformunda sonra eklenen bir özellik değildir. Ödemeleri, sertifikaları, özel öğrenci verilerini ve eğitmenlerin fikri mülkiyetini etkiler. Neyse ki, tutarlı bir küçük kural seti çoğu gerçek dünya riskini kapsar.

Kimlik doğrulama: kullanıcılar nasıl giriş yapar

Bir login yöntemle başlayın ve onu güvenilir kılın.

  • E-posta + şifre varsayılan. Şifreleri güçlü hashing ile saklayın (örn. bcrypt/argon2) ve şifre sıfırlamayı etkinleştirin.
  • Magic link destek taleplerini azaltır ama link süresi ve tek kullanımlık olma konusunda sıkı olun.
  • SSO (opsiyonel) (Google/Microsoft veya SAML) daha sonra kurumsal alıcılar isterse ekleyin.

Oturum yönetimini anlaşılır yapın: kısa ömürlü oturumlar, gerekirse yenileme mantığı ve “tüm cihazlardan çıkış yap” seçeneği.

Yetkilendirme: her hassas eylemi kontrol edin

Yetkilendirmeyi her yerde uygulanan bir kural olarak ele alın—UI, API ve veri erişim desenleri dahil.

Tipik roller:

  • Yönetici: kullanıcıları, kursları, ödemeleri ve platform ayarlarını yönetir.
  • Eğitmen: kendi kurslarını oluşturur/düzenler, kendi öğrencilerini görür.
  • Öğrenci: kayıtlı içeriklere erişir, ödev gönderir, sertifika indirir.

Her hassas uç nokta şu soruları yanıtlamalı: Bu kim? Ne yapmaya izinli? Hangi kaynak üzerinde? Örneğin, “Eğitmen bir dersi yalnızca kursun sahibi ise düzenleyebilir.”

Kurs içeriğini koruma (aşırı mühendislik yapmadan)

Videolar/dosyalar barındırıyorsanız, bunları herkese açık URL olarak göndermeyin.

  • Kısa süreli imzalı medya URL’leri kullanın (dakikalar, günler değil).
  • İndirmeler, girişler ve sertifika doğrulama uç noktaları için oran sınırlama uygulayın.
  • Edge’de hız sınırlama, bot tespiti ve gerekirse PDF üzerine filigran gibi temel anti-scraping önlemleri ekleyin.

Gizlilik: daha az toplayın, daha kısa saklayın

Saklanan kişisel veriyi minimumda tutun: isim, e-posta ve ilerleme genellikle yeterlidir.

Saklama kurallarını tanımlayın (ör. yasal olarak izinliyse X aydan sonra pasif hesapları sil) ve kullanıcıların veri dışa aktarımı/silme istemlerine izin verin. Yönetici eylemleri için denetim günlükleri tutun, ancak tam ders içeriği, tokenlar veya şifreleri kaydetmeyin.

Ödemelerle uğraşıyorsanız, o verileri izole edin ve ham kart bilgilerini hiç saklamayın.

Öğrenme için UX: Tamamlama, Motivasyon ve Erişilebilirlik

Bir kurs uygulaması, öğrenenlerin hızlı başlayabildiği, yerlerini koruyabildiği ve istikrarlı bir momentum hissettiği zaman başarılı olur. UX, sürtünleri azaltmalı (sonraki dersi bulmak, neyin “tamam” sayıldığını anlamak) ve farklı cihazlar ve yetenekler için kapsayıcı kalmalı.

Mobil öncelikli ders deneyimi

Dersleri önce küçük ekranlar için tasarlayın: okunabilir tipografi, yeterli satır aralığı ve yatay kaydırma gerektirmeyen düzen.

Derslerin hızlı hissettirmesini sağlayın. Medyayı optimize edin; ilk içerik hızlı yüklensin ve ağır eklentileri (indirmeler, transkriptler) çekirdek ders yüklendikten sonra yükleyin.

Kaldığı yerden devam etmek zorunludur: kurs sayfasında ve ders oynatıcıda “Kaldığın yerden devam et” gösterin. Video/ses için son konumu ve metin dersleri için son okunan yeri saklayın ki birkaç saniyede geri dönülebilsin.

İlerlemeyi görünür (ve anlamlı) yapın

Öğrenenler ilerlemeyi belirgin gördüğünde motive olur:

  • Tamamlanan derslerde tik işaretleri
  • Kurs düzeyinde basit bir yüzde tamamlama
  • Net “Sonraki adım” istemi (örn. “Ders 4’ü Başlat” veya “Sınava gir”)

Karmaşık durumları önleyin. Eğer tamamlama birden fazla eyleme bağlıysa (izleme süresi + sınav + ödev), derste küçük bir kontrol listesi gösterin ki öğrenciler eksik olanı tam olarak bilsin.

Hafif kutlama unsurları kullanın: kısa bir onay mesajı, bir modülün kilidinin açılması veya “Bitirmeye X ders kaldı” hatırlatıcısı—yararlı ama rahatsız etmeyen.

Erişilebilirlik işe gömülü olsun

Erişilebilirliği bir süs değil temel UX olarak ele alın:

  • Video için altyazılar ve ses ağırlıklı dersler için transkriptler
  • Tam klavye navigasyonu (ders oynatıcı kontrolleri dahil)
  • Güçlü renk kontrastı ve renk dışı göstergeler (ikon + metin)
  • Okunabilir düzen: tutarlı başlıklar, kısa paragraflar ve taranabilir boşluk

Ayrılmayı önleyen destek

Öğrenciler takılacak. Öngörülebilir bir yol sağlayın:

  • Kurs ve ders ekranlarından erişilebilen bir yardım/SSS sayfası (ör. /help)
  • Beklenen yanıt süresini belirten basit bir iletişim formu
  • Faturalama yardımı veya iade talebi yeri, gerçek politikanızla uyumlu

Test, Analitik ve Beta Lansman Kontrol Listesi

Temiz bir veri modeliyle başlayın
Kayır, ilerleme ve sertifikalar için evrilmeye açık bir Go API + PostgreSQL veri modeli oluşturun.

Bir çevrimiçi kurs platformunu test ve geri bildirim döngüsü olmadan göndermek, “dersim tamamlandı ama kurs tamamlanmadı” gibi destek talepleriyle sonuçlanır. İlerleme, sertifikalar ve kayıt iş mantığı gerçek test kapsamı hak eder.

İnsanların öğrenme biçimine uygun testler

İlerleme kuralları etrafında birim testleriyle başlayın; bunlar yeni ders türleri eklerken veya tamamlama kriterlerini değiştirirken kolayca bozulur. Kenar durumlarını kapsayın:

  • Öğrenci dersleri sırayla tamamlamadan
  • Ders güncellendikten sonra tamamlamanın korunup korunmadığı
  • Yeniden denemeler ve sıfırlamalar (özellikle sertifikalar varsa)

Ardından kayıt akışları için entegrasyon testleri ekleyin: kayıt ol → kaydol → derslere eriş → kursu bitir → sertifika oluştur. Ödemeyi destekliyorsanız en az bir başarılı akış ve bir hata/yeniden deneme senaryosu test edin.

Gerçeği anlatan seed verisi

Panoları ve raporlamayı doğrulamak için gerçekçi seed verisi oluşturun. Bir küçük kurs ve modüller, sınavlar, isteğe bağlı dersler ve birden fazla eğitmen içeren “gerçekçi” bir kurs UI boşluklarını hızlıca ortaya çıkarır.

Gerçekten kullanacağınız analitik olayları

Analitik olaylarını dikkatle izleyin ve isimlendirin. Başlangıç için kullanılabilir set:

  • lesson_started
  • lesson_completed
  • course_completed
  • certificate_issued
  • certificate_verified

Ayrıca bağlam yakalayın (course_id, lesson_id, user_role, device) ki ayrılma nedenlerini teşhis edebilin ve değişikliklerin etkisini ölçün.

Beta lansmanı: küçük, yapılandırılmış ve dürüst

Tam lansmandan önce bir avuç kurs oluşturucusu ve öğrenenden oluşan küçük bir beta çalıştırın. Oluşturuculara bir kontrol listesi verin (kurs oluştur, yayımla, düzenle, öğrenci ilerlemesini gör) ve karışık gelen yerleri anlatmalarını isteyin. Kurulum süresini ve içerik hatalarını azaltan düzeltmeleri önceliklendirin—bunlar benimsenmeyi engelleyen noktalar olacaktır.

İsterseniz beta sırasında destek yükünü azaltmak için /status gibi hafif bir “Bilinen sorunlar” sayfası yayımlayın.

Hızlı yinelemeler yapıyorsanız güvenli geri alma süreçlerini dahil edin. Örneğin, Koder.ai anlık görüntüler ve geri alma destekler; tamamlama kurallarını veya sertifika üretimini değiştirirken hızlı bir kaçış yolu sağlar.

Lansmandan Sonra Ölçekleme ve Yol Haritası

MVP’yi göndermek gerçek ürün işinin başladığı andır: hangi kursların trafik alacağı, öğrenenlerin nerede ayrıldığı ve yöneticilerin neyle vakit geçirdiğini öğreneceksiniz. Yeniden inşa etmeden önce kademeli ölçekleme planı yapın.

Erken işe yarayan performans önlemleri

Büyük altyapı değişikliklerinden önce basit kazanımlarla başlayın:

  • Az değişen kurs sayfalarını cache’leyin (iniş sayfaları, ders ana hatları). Eğitmen güncellemesi yayınlandığında cache’i temizleyin.
  • Katalogları ve arama sonuçlarını sayfalayın.
  • Görselleri optimize edin (yüklemede yeniden boyutlandırma, modern formatlar, lazy-load). Bu, “video yavaş” veya “sayfa açılmıyor” destek taleplerini azaltır.

Medya dağıtımı

Video ve büyük dosyalar genellikle ilk ölçekleme darboğazıdır.

Statik varlıklar için CDN kullanın ve indirmeler/indirilebilir kaynaklar için aynı. Video için uyarlanabilir akış hedefleyin ki mobil veya düşük bağlantı hızındaki kullanıcılar da akıcı oynatma alsın. Başlangıçta temel dosya barındırma ile başlasanız bile, medya dağıtımını yükseltmeyi mümkün kılan bir yol seçin.

Günlük operasyonlar için yönetici araçları

Kullanım arttıkça operasyonel araçlar da önem kazanır.

Öncelik verin:

  • İçerik denetimi (işaretleme, gizleme, inceleme)
  • Kullanıcı destek araçları (güvenli taklit/impersonation, davet yeniden gönderme, gerektiğinde ilerlemeyi sıfırlama)
  • Denetim kaydı (kim bir dersi değiştirdi, kim sertifika verdi, kim iade yaptı)

Yol haritası fikirleri (hazır olduğunuzda ekleyin)

Stabil dersler ve ilerleme takibi kurulduktan sonra iyi sonraki adımlar:

  • Kohortlar başlangıç tarihleri ve ortak tempo ile
  • Canlı oturumlar (takvim, hatırlatmalar, katılım takibi)
  • Dersle ilişkili tartışma panoları
  • Çok dillilik (çevrilmiş başlıklar, altyazılar ve yerelleştirilmiş sertifikalar)

Her birini kendi mini-MVP’si gibi ele alın ve açık başarı metrikleri koyun ki büyüme kontrollü ve sürdürülebilir olsun.

SSS

Çevrimiçi kurs web uygulaması için MVP neler içermeli?

Öncelikle minimum öğrenme çıktıları tanımlayın:

  • Öğrenciler net bir sırada derslere erişebilmeli ("sonraki ders").
  • İlerleme oturumlar/cihazlar arasında hatırlanmalı.
  • Tamamlama tanınmalı (opsiyonel olarak sertifika ile).

Eğer bir özellik doğrudan bu çıktılara hizmet etmiyorsa (ör. tartışmalar, karmaşık sınavlar, derin entegrasyonlar), öğretim modeliniz için merkezi değilse lansmandan sonraya erteleyin.

Başlangıçta hangi kullanıcı rollerine ihtiyacım var ve her biri ne yapabilmeli?

Pratik bir başlangıç seti:

  • Öğrenci: içeriğe kayıt/erişim, kaldığı yerden devam etme, dersleri tamamlama.
  • Eğitmen: ders oluşturma/sıralama, yayımlama, kurs düzeyinde ilerlemeyi görme.
  • Yönetici: kullanıcıları yönetme, erişim sorunlarını çözme, içeriği onaylama/yayınlama, iade işlemlerini yönetme (ücretli ise).

Eğer bir rolü kaldırmak ürünü bozmuyorsa, o rolün özellikleri muhtemelen lansmandan sonra eklenmelidir.

Rol tabanlı izinleri güvenlik açıkları yaratmadan nasıl tanımlarım?

Kodlamadan önce basit bir izin matrisi yazın ve bunu API'de zorunlu kılın (sadece UI'da değil). Yaygın kurallar:

  • Öğrenciler yalnızca kayıtlı oldukları kurslardaki derslere erişebilir.
  • Eğitmenler yalnızca sahip oldukları kurslardaki dersleri düzenleyebilir.
  • Sadece yöneticiler kurs silebilir, rolleri değiştirebilir veya platform ayarlarını yönetebilir.

Yetkilendirmeyi her hassas uç noktada zorunlu bir kontrol olarak ele alın.

Kursları, modülleri ve dersleri nasıl yapılandırmalıyım?

Kullanıcıların hızlıca tarayabileceği bir hiyerarşi kullanın:

  • Kurs → Modüller/Bölümler → Dersler

Yayınlama ve yazarlık işlemlerini basit tutun:

  • modül/dersleri yeniden sırala
  • taslak/yayın görünürlüğü
  • öğrenci olarak önizleme

İndirilebilir dosyaları bir kursa veya belirli derse ekleyin; sınav/ödevleri yalnızca öğrenmeyi anlamlı şekilde pekiştiriyorsa ekleyin.

Öğrenciler için “kaldığın yerden devam et”i nasıl uygulamalıyım?

“Kaldığın yerden devam et”i birincil iş akışı olarak uygulayın:

  • Her kurs için son açılan dersi saklayın.
  • last_viewed zaman damgasını saklayın.
  • Video/ses için oynatma konumunu saklayın.

Ardından tek bir “Devam Et” düğmesi sağlayın ve kullanıcının sonraki tamamlanmamış öğeye doğrudan gitmesini sağlayın (ör. /courses/{id}/lessons/{id})—bu, ayrılmaları azaltır.

Ders ve kurs tamamlanmasını nasıl kararlaştırmalıyım?

Ders türüne göre tamamlanma kurallarını tanımlayın ve bunları açıkça belirtin:

  • Video: ≥ X% izlendi (ör. %90) veya sonuna gelindi.
  • Metin: manuel “tamamlandı olarak işaretle” (kaydırma tabanlı otomatik tamamlama riskli olabilir).
  • Sınav/ödev: teslim edildi, geçti veya değerlendirildi.

Daha sonra kurs tamamlanmasını tanımlayın (tüm gerekli dersler vs. isteğe bağlı dersler hariç) ki ilerleme çubukları ve sertifikalar keyfi görünmesin.

İlerleme ve analiz için hangi olayları takip etmeliyim?

Gerçeklere dayanan küçük bir olay seti izleyin:

  • started
  • last_viewed
  • completed
  • quiz_passed (deneme sayısı ve geçme/kalma bilgisi ile)

Olayları hesaplanan yüzdelerden ayrı tutun. Tamamlama kurallarını daha sonra değiştirirseniz, ilerlemeyi yeniden hesaplayabilirsiniz ancak olaylar tarihsel gerçeği temsil etsin.

Hangi ilerleme izlemesi kenar durumlarını erken ele almalıyım?

Yaygın kenar durumları baştan tasarlayın:

  • Bir dersi yeniden açmak tamamlamayı sıfırlamamalı—sadece last_viewed güncellensin.
  • Video ilerlemesi kısmi izlemeyi ve kaldığı konumu desteklemeli.
  • Dersler tamamlandıktan sonra güncellenirse, tamamlamanın geçerli kalıp kalmayacağına karar verin.

Sır dışı tamamlama, yeniden denemeler/sıfırlamalar ve sertifika tetikleme akışları için testler ekleyin; böylece “Her şeyi bitirdim ama sertifika yok” destek taleplerinin önüne geçersiniz.

Sertifika uygunluğunu adil ve hata ayıklaması kolay nasıl tasarlarım?

Sistemin tutarlı şekilde değerlendirebileceği açık uygunluk kuralları kullanın:

  • yalnızca tamamlama: tüm gerekli dersler tamamlandığında sertifika verilir.
  • sınav eşiği: genel skor gereksinimi (ör. %80) veya belirli sınavları geçme.
  • eğitmen onayı: projeler veya kohortlar için kullanışlı; bir “İnceleme iste” adımı ve onay durumu ekleyin.

Son kararı bir anlık görüntü olarak saklayın (uygun mu/e, sebep, zaman damgası, onaylayan) böylece dersler sonradan düzenlense bile sonuç değişmez.

Kurs sertifikalarını güvenli ve doğrulanabilir şekilde nasıl üretip doğrularım?

İkisini de yapın:

  • Tutarlı görünüm için bir şablondan sunucu tarafı PDF üretimi.
  • Paylaşılabilir doğrulama sayfası (ör. /certificates/verify/<certificateId>).

Sahteciliği azaltmak için:

  • istemci tarafından oluşturulan PDF’lerden kaçının
  • indirmeler için kısa süreli imzalı URL’ler kullanın
  • verilen/indirilen/iptal edilen/yeniden verilen kayıtlarını tutun

Her zaman iptal desteği sağlayın, böylece doğrulama güncel durumu gösterir.

Related posts