Proje Özeti
📝 Basit Anlatım
GİP Akademi, yeni iş kuracak veya işini yürüten kişilere "muhasebe işlerini nasıl doğru yaparsın?" diye öğreten bir online eğitim platformu. İnsanlar önce kendini tanıtıyor (şahıs mı, şirket mi), sonra zorunlu eğitimleri izliyor, sınavları geçiyor ve sertifika alıyor. Amaç: Ceza yemeden önce öğrenmek.
🔧 Teknik Özet
LMS (Learning Management System) yapısında, multi-step onboarding flow, zorunlu eğitim modülleri (video + metin), quiz/assessment engine, sertifika üretim sistemi ve kullanıcı ilerleme takibi gerektiren bir platform. MERSİS/KOSGEB benzeri ön başvuru formu ile başlıyor.
Mevcut Sistemde Var mı?
| GİP Akademi Özelliği | Durum | Açıklama |
|---|---|---|
| Ön Başvuru / Kayıt Formu | Kısmi | Temel kayıt var ama çok adımlı başvuru formu yok |
| Eğitim / Kurs Modülü | Yok | Hiçbir eğitim/kurs altyapısı mevcut değil |
| Video İçerik Sistemi | Yok | Ses streaming altyapısı var, video altyapısı yok |
| Sınav / Quiz Sistemi | Yok | Hiçbir değerlendirme sistemi mevcut değil |
| Sertifika Üretimi | Kısmi | Mevcut sistemde QR kodlu üyelik sertifikası var, eğitim sertifikası değil |
| İlerleme Takibi | Yok | Kullanıcı ilerleme/tamamlama takibi yok |
| Çok Adımlı Form / Wizard | Yok | Step-by-step form altyapısı mevcut değil |
| Blog / İçerik Yönetimi | Var | AI destekli, çok dilli, SEO uyumlu blog modülü |
| Kullanıcı Yönetimi | Var | Rol/izin sistemi, e-posta doğrulama mevcut |
| E-posta Bildirimleri | Var | Mail modülü ve bildirim altyapısı mevcut |
Eklenmesi Gereken Modüller ve Detaylı Analiz
1. Eğitim Modülü (Education Module)
Yüksek Öncelik📝 Basit Anlatım (Herkes İçin)
Bu modül projenin kalbi. Tıpkı Udemy veya bir online kurs sitesi gibi düşünün: Eğitimler bölümlere ayrılmış, her bölümde videolar ve yazılı içerikler var. Kullanıcı sırasıyla izliyor, birini bitirmeden diğerine geçemiyor.
Nasıl olmalı: Her eğitim bir "kurs" olarak tanımlanmalı. Kurslar alt bölümlere (ders) ayrılmalı. Her dersin içinde video, yazı veya sunum olabilmeli. Kullanıcı dersi tamamladığında sistem otomatik olarak "tamamlandı" işaretlemeli ve bir sonraki derse geçiş açılmalı.
Neden önemli: GİP Akademi'nin tüm eğitim içeriği bu modül üzerinden sunulacak. Bu olmadan projenin kendisi olmaz. Fatura, fiş, beyanname, vergi cezaları gibi tüm konular burada ders olarak yer alacak.
Zorunluluk mekanizması: Bazı eğitimler "zorunlu" olarak işaretlenebilmeli. Kullanıcı zorunlu eğitimleri tamamlamadan platforma tam erişim sağlayamamalı. Bu, GİP Akademi'nin "önce öğren, sonra ilerle" felsefesinin teknik karşılığı.
🔧 Teknik Detaylar (Geliştiriciler İçin)
- Tablolar: courses, course_sections, course_lessons, course_enrollments, lesson_progress
- Modeller: Course, CourseSection, CourseLesson, Enrollment, LessonProgress
- İlişkiler: Course hasMany Sections, Section hasMany Lessons, User belongsToMany Courses (pivot: enrollments)
- Lesson Types: video, text, pdf, presentation (polymorphic content)
- Erişim Kontrolü: Middleware ile enrollment ve prerequisite kontrolü. is_mandatory flag ile zorunlu eğitim desteği
- İlerleme: lesson_progress tablosunda completed_at, progress_percentage, last_position (video için saniye bazlı)
- Çeviri: Mevcut HasTranslatable trait kullanılabilir (title, description, content JSON alanları)
- Konum: Modules/Education/
- Admin: Livewire componentler ile kurs, bölüm, ders CRUD + sıralama (drag-drop)
2. Sınav / Değerlendirme Modülü (Quiz Module)
Yüksek Öncelik📝 Basit Anlatım
Her eğitimin sonunda kullanıcıya sorular sorulacak. "Faturanızı kaç gün içinde teslim etmelisiniz?" gibi çoktan seçmeli veya doğru/yanlış sorular. Belirli bir puanı geçemezse eğitim tamamlanmış sayılmayacak.
Nasıl olmalı: Sınav soruları admin panelinden kolayca eklenebilmeli. Her sorunun birden fazla şıkkı olabilmeli, doğru cevap işaretlenebilmeli. Sınav sonunda puan otomatik hesaplanmalı. Geçme notu ayarlanabilir olmalı (örneğin %70). Sınavı geçemeyenler tekrar deneyebilmeli.
Neden önemli: GİP Akademi'nin "katılım belgesi" vermesi için kullanıcının gerçekten öğrenip öğrenmediğini ölçmek şart. Sadece videoyu açıp kapamak yeterli olmamalı. Bu modül öğrenmeyi doğrulayan mekanizma.
🔧 Teknik Detaylar
- Tablolar: quizzes, quiz_questions, quiz_options, quiz_attempts, quiz_answers
- İlişki: Quiz belongsTo CourseLesson veya Course (polymorphic quizzable_type/id)
- Soru Tipleri: multiple_choice, true_false, fill_blank (enum field)
- Puanlama: quiz_attempts tablosunda score, passed (boolean), passing_score (quiz tablosunda, default 70)
- Tekrar: max_attempts alanı (null = sınırsız), attempts_count takibi
- Soru Karıştırma: shuffle_questions, shuffle_options boolean flagları
- Süre: time_limit_minutes (opsiyonel), started_at / finished_at takibi
- Konum: Modules/Quiz/ veya Education modülü içinde alt-modül
3. Sertifika Modülü (Certificate Module)
Yüksek Öncelik📝 Basit Anlatım
Eğitimi ve sınavı başarıyla tamamlayan kişiye "GİP Akademi Katılım Belgesi" verilecek. Bu belge PDF olarak indirilebilir, üzerinde kişinin adı, tamamladığı eğitim ve tarih yazacak. QR kod ile doğrulanabilir olacak (sahte sertifika üretilemeyecek).
Nasıl olmalı: Sertifika tasarımı admin panelinden özelleştirilebilmeli (logo, arka plan, yazı tipi). Her sertifikanın benzersiz bir numarası ve doğrulama QR kodu olmalı. Dışarıdan biri QR kodu okutunca "Bu sertifika geçerlidir" sayfası açılmalı.
Neden önemli: Katılım belgesi GİP Akademi'nin çıktısı. İnsanlar bu belgeyi muhasebecilerine, KOSGEB'e veya iş ortaklarına gösterebilir. Güvenilir ve doğrulanabilir olması projenin ciddiyetini artırır.
🔧 Teknik Detaylar
- Tablolar: certificates, certificate_templates
- Doğrulama: UUID bazlı unique code + QR (SimpleSoftwareIO/QrCode veya mevcut QR altyapısı genişletilebilir)
- PDF: DomPDF veya Snappy ile dinamik PDF üretimi (template-based)
- Template: Blade view + CSS ile tasarım, admin'den logo/arka plan/metin düzenlenebilir
- İlişki: Certificate belongsTo User, belongsTo Course. Otomatik üretim: quiz passed + tüm dersler completed
- Doğrulama Sayfası: Public route: /certificate/verify/{code} → sertifika bilgisi gösterir
- Konum: Modules/Certificate/ veya Education modülü içinde
4. Çok Adımlı Başvuru Sistemi (Onboarding Wizard)
Yüksek Öncelik📝 Basit Anlatım
Kullanıcı platforma ilk girdiğinde, MERSİS'teki gibi adım adım ilerleyen bir form doldurmalı: "Şahıs mı şirket mi?", "Faaliyet alanınız nedir?", "İşletmeniz hangi aşamada?" gibi sorular. Bu bilgiler hem kullanıcıya özel eğitim yolu belirlemek hem de istatistik için kullanılacak.
Nasıl olmalı: Form en az 3-4 adımlı olmalı. Her adımda birkaç soru sorulmalı. İleri-geri gidilebilmeli. Son adımda özet gösterilmeli. Form tamamlanmadan eğitimlere erişim olmamalı. Admin panelinde form adımları ve soruları düzenlenebilmeli.
Neden önemli: Kullanıcıyı tanımadan doğru eğitimi sunmak mümkün değil. Bir e-ticaret yapan kişi ile serbest muhasebeci farklı içeriklere ihtiyaç duyar. Bu wizard, kişiselleştirilmiş eğitim deneyiminin başlangıç noktası.
🔧 Teknik Detaylar
- Tablolar: onboarding_profiles (user_id, business_type, activity_field, business_status, completed_at)
- Frontend: Alpine.js multi-step form (x-show ile adım geçişi, mevcut frontend stack ile uyumlu)
- Backend: Livewire component veya API endpoint. Her adım validasyonu ayrı
- Middleware: EnsureOnboardingCompleted middleware → profili tamamlanmamış kullanıcıyı wizard'a yönlendir
- Yönlendirme: business_type + activity_field'e göre recommended_courses belirleme (mapping tablosu veya config)
- İstatistik: Onboarding verileri admin dashboard'da sektör/durum dağılımı grafiği
5. Video İçerik Sistemi
Orta Öncelik📝 Basit Anlatım
Eğitim videoları platformda oynatılabilmeli. YouTube veya Vimeo'ya yüklenen videolar gömülebilmeli ya da videolar doğrudan sunucuya yüklenebilmeli. Video izleme süresi takip edilmeli: Kullanıcı videonun en az %80'ini izlemeden "tamamladım" diyememeli.
Nasıl olmalı: İki seçenek sunulmalı — ya YouTube/Vimeo embed (ucuz, kolay) ya da kendi sunucusunda barındırma (kontrollü ama pahalı). Başlangıçta YouTube embed yeterli. İleri aşamada kendi video sunucusu düşünülebilir.
Neden önemli: GİP Akademi'nin eğitim yöntemi olarak "video anlatımlar" birinci sırada. Metin tabanlı içerik de olacak ama video olmadan platform eksik kalır. İzleme takibi olmadan da insanlar videoyu açıp geçebilir, bu da eğitimin amacını boşa çıkarır.
🔧 Teknik Detaylar
- Player: Plyr.js veya Video.js (özelleştirilebilir, izleme tracking API'si olan)
- Kaynak: youtube_url, vimeo_url veya local_path alanları (lesson tablosunda)
- Takip: JS ile timeupdate eventi → her 30 saniyede API'ye progress gönder → lesson_progress.last_position güncelle
- Tamamlama: watched_percentage >= 80 → otomatik completed işaretle
- Anti-cheat: Tab değişikliği algılama (visibilitychange), hız değişikliği kısıtlama (max 2x)
- Responsive: Mobil uyumlu player, aspect-ratio korunmalı
6. İlerleme ve Dashboard Sistemi
Orta Öncelik📝 Basit Anlatım
Kullanıcı giriş yaptığında karşısına bir "kontrol paneli" çıkmalı. Hangi eğitimleri tamamladığını, hangilerinin devam ettiğini, sınav puanlarını ve sertifikalarını tek bakışta görebilmeli.
Nasıl olmalı: İlerleme çubuğu ile görsel olarak "%45 tamamlandı" gibi gösterim. Tamamlanan dersler yeşil tik, devam edenler turuncu, başlanmamışlar gri. Genel başarı oranı ve kalan ders sayısı görünmeli.
Neden önemli: İnsanlar ilerlemelerini görmezse motivasyonlarını kaybeder. "3 dersin kaldı, az kaldı!" gibi gösterimler kullanıcıyı eğitimi tamamlamaya teşvik eder. Admin tarafında da hangi eğitim ne kadar tamamlanıyor istatistiği önemli.
🔧 Teknik Detaylar
- Kullanıcı Dashboard: Livewire component → enrollments + progress aggregate sorgusu
- Admin Dashboard: Toplam kayıt, tamamlama oranı, sektör dağılımı, en popüler kurslar
- Hesaplama: course_progress = (completed_lessons / total_lessons) * 100
- Bildirimler: "3 gündür giriş yapmadınız" hatırlatma e-postası (scheduled job)
- Gamification: Opsiyonel rozet sistemi (ilk ders, yarı yol, tamamlama)
- Cache: Progress hesaplamaları cache'lenmeli (mevcut TenantCacheService ile uyumlu)
7. Bildirim ve Hatırlatma Sistemi
Düşük Öncelik📝 Basit Anlatım
Kullanıcıya eğitim hatırlatmaları gönderilmeli. "Eğitiminiz yarım kaldı, kaldığınız yerden devam edin" gibi e-postalar veya platform içi bildirimler. Ayrıca "yeni eğitim eklendi" duyuruları da bu sistemle gönderilecek.
Nasıl olmalı: E-posta bildirimleri otomatik olmalı. Platform içinde de bir bildirim zili (🔔) olmalı. Admin hangi bildirimlerin gönderileceğini ayarlayabilmeli. Kullanıcı istemediği bildirimleri kapatabilmeli.
Neden önemli: Eğitim platformlarında en büyük sorun yarım bırakmadır. Hatırlatma bildirimleri tamamlama oranını ciddi şekilde artırır. Mevcut Mail modülü üzerine inşa edilebileceğinden geliştirmesi nispeten kolay.
🔧 Teknik Detaylar
- E-posta: Laravel Notification sınıfları (CourseReminder, NewCourseAdded, CertificateReady)
- In-app: Laravel database notification channel + Livewire dropdown
- Zamanlama: Scheduled command: 3 gün inaktif → hatırlatma, 7 gün → ikinci hatırlatma
- Tercihler: notification_preferences tablosu (user_id, channel, type, enabled)
- Mevcut Entegrasyon: Mail modülü ve Announcement modülü altyapısı kullanılabilir
Önerilen Uygulama Sırası
Eğitim Modülü + Onboarding Wizard
Projenin temeli. Kurs/ders yapısı, çok adımlı kayıt formu ve kullanıcı yönlendirmesi. Bunlar olmadan diğer hiçbir şey anlam ifade etmez.
Quiz/Sınav + Sertifika Sistemi
Eğitimin çıktısı. Sınav olmadan sertifika verilmez, sertifika olmadan projenin somut bir ürünü olmaz.
Video Player + İlerleme Dashboard
Kullanıcı deneyimini zenginleştirir. Başlangıçta YouTube embed ile hızlı başlanabilir, ilerleme takibi motivasyonu artırır.
Bildirim ve Hatırlatma Sistemi
Son aşama. Mevcut Mail ve Announcement modülleri üzerine inşa edilir. Tamamlama oranlarını artırır.
Mevcut Modüllerden Yararlanılabilecekler
Doğrudan Kullanılabilir
- UserManagement: Roller ve izinler (öğrenci, eğitmen, admin)
- Blog: Ek bilgilendirme yazıları ve güncel mevzuat
- Mail: E-posta bildirimleri altyapısı
- Announcement: Platform duyuruları
- SeoManagement: Sayfa SEO optimizasyonu
- LanguageManagement: Çok dil desteği
Adapte Edilebilir
- Mevcut Sertifika: QR doğrulama altyapısı eğitim sertifikasına adapte
- MediaManagement: Eğitim görselleri ve PDF'ler için
- SettingManagement FormBuilder: Onboarding wizard form yapısı için baz
- AI Modülü: Eğitim içeriği üretimi ve özetleme
- Search: Eğitim içeriklerinde arama
Dikkat Edilmesi Gereken Konular
Tenant İzolasyonu
Basit: GİP Akademi bir tenant olacak. Eğitim modülü sadece bu tenant'ta aktif olmalı, diğer tenant'lara bulaşmamalı.
Teknik: modules_statuses tenant bazlı kontrol edilmeli. Education modülü sadece ilgili tenant DB'sinde migration çalıştırmalı.
KVKK / Kişisel Veri
Basit: Kullanıcılardan iş bilgisi, faaliyet alanı gibi veriler toplanacak. Bunlar kişisel veri sayılır. KVKK aydınlatma metni ve açık rıza onayı gerekli.
Teknik: Onboarding formunda KVKK checkbox + aydınlatma metni linki. consent_given_at timestamp kaydı.
Performans
Basit: Çok sayıda kullanıcı aynı anda video izlerse sunucu yavaşlayabilir. Video'lar YouTube'da barındırılmalı, sunucuya yük binmemeli.
Teknik: Video streaming kendi sunucuda yapılmamalı. YouTube/Vimeo embed veya CDN kullanılmalı. Progress API rate-limit uygulanmalı.