## **Dokumen Requirements Sistem: kreatiVortex - Platform Pembelajaran Tari Online**

**Versi:** 1.0 (Final)
**Tanggal:** 24 Mei 2024
**Status:** Disetujui untuk Pengembangan

---

### **1. Pendahuluan**

Dokumen ini mendefinisikan kebutuhan fungsional dan non-fungsional untuk pengembangan website **kreatiVortex**, sebuah platform pembelajaran Tari online. Platform ini dirancang untuk menghubungkan **Pendidik** (instruktur tari) dengan **Calon Pendidik** (peserta didik) dalam sebuah ekosistem pembelajaran yang interaktif, kolaboratif, dan terstruktur. Sistem ini memungkinkan kontribusi konten dari semua pengguna, sambil tetap menjaga kualitas kurikulum resmi di bawah pengawasan Administrator.

### **2. Tujuan Proyek**

*   Menyediakan platform terpusat dan komprehensif untuk pembelajaran tari, dari teori dasar hingga praktik lanjutan.
*   Memfasilitasi **Pendidik** dalam mengelola konten pembelajaran, mengelola kelas, dan memberikan bimbingan terstruktur kepada Calon Pendidik.
*   Memberikan pengalaman belajar yang menarik dan partisipatif bagi **Calon Pendidik** melalui akses video, diskusi, dan penyerahan tugas.
*   Membangun komunitas pembelajaran tari yang aktif melalui fitur berbagi video terbuka dan FGD.
*   Menjaga integritas kurikulum dengan memisahkan konten komunitas (Beranda) dan konten resmi (Menu Navigasi).

### **3. Definisi Peran Pengguna (User Roles)**

Sistem akan memiliki empat peran utama dengan tingkatan akses yang berbeda:

1.  **Administrator:**
    *   Pengelola tertinggi sistem dengan akses penuh.
    *   Bertanggung jawab atas manajemen pengguna (semua peran), verifikasi konten, dan pengaturan sistem.
    *   **Khusus Video:** Dapat mengunggah video dan memilih untuk menampilkannya di **Beranda** dan/atau di **Menu Navigasi** (Teori, Praktik, dll.). Memiliki otoritas penuh dalam mengelola konten kurikuler.
    *   Memoderasi seluruh platform.

2.  **Pendidik (Educator):**
    *   Pembuat konten dan instruktur kelas.
    *   Dapat membuat dan mengelola kelas/instansi, memberikan tugas, serta memberikan umpan balik (revisi) kepada Calon Pendidik.
    *   **Khusus Video:** Dapat mengunggah video, namun video tersebut **secara default hanya akan tampil di Beranda**. Tidak dapat mempublikasikan video langsung ke kategori di Menu Navigasi.
    *   Memoderasi diskusi di kelas yang mereka kelola.

3.  **Calon Pendidik (Prospective Educator / Student):**
    *   Peserta didik.
    *   Dapat mendaftar ke kelas, mengakses materi pembelajaran, mengunggah tugas, serta berpartisipasi dalam FGD dan forum.
    *   **Khusus Video:** Dapat mengunggah video (misalnya: video hasil praktik, video tugas, atau video berbagi), namun video tersebut **secara default hanya akan tampil di Beranda**.

4.  **Umum (General User):**
    *   Pengguna dasar yang telah melakukan registrasi akun namun belum memilih role spesifik.
    *   Dapat mengakses Beranda (video komunitas) dan Forum Umum untuk diskusi terbuka.
    *   Dapat mengunggah video ke Beranda (misalnya: video latihan, video inspirasi, atau video berbagi).
    *   **Akses Terbatas:** Tidak dapat mengakses Menu Navigasi (Teori, Praktik, Template Makalah), Forum Group/Kelas, atau sistem Assignment.
    *   **Opsi Upgrade:** Dapat melakukan upgrade ke Pendidik atau Calon Pendidik kapan saja melalui dashboard.
    *   **Default State:** Role ini diberikan otomatis setelah pengguna menyelesaikan registrasi akun dasar (Nama, Email, Password).

### **4. Fitur-Fitur Utama (Functional Requirements)**

#### **4.1. Manajemen Pengguna & Autentikasi**

*   **Halaman Awal (Landing Page):**
    *   Menampilkan informasi singkat tentang kreatiVortex.
    *   Memiliki tiga tombol utama: **Login**, **Register**, dan **Mulai Sekarang**.
    *   Tombol "Mulai Sekarang" akan mengarahkan pengguna ke halaman pendaftaran (Register).
*   **Pendaftaran Akun (Register):**
    *   **Tahap 1 - Registrasi Akun Dasar:**
        *   Semua pengguna (baik yang akan menjadi Pendidik, Calon Pendidik, atau tetap Umum) melakukan pendaftaran akun terlebih dahulu dengan mengisi:
            *   Nama Lengkap
            *   Email
            *   Password
            *   Password Confirmation
        *   Setelah berhasil mendaftar, pengguna dapat login ke sistem.
    *   **Tahap 2 - Pemilihan Role (Opsional, dapat dilakukan kapan saja):**
        *   Setelah registrasi akun dasar, pengguna diberi default role **Umum** dan dapat login ke sistem.
        *   Pengguna dapat memilih untuk upgrade ke Pendidik atau Calon Pendidik saat pertama kali login, atau melakukannya nanti.
        *   **Catatan Penting:** Akses ke **Forum Group** hanya tersedia bagi pengguna yang sudah melakukan registrasi sebagai Pendidik atau Calon Pendidik. Pengguna dengan role Umum tetap dapat mengakses Forum Umum.
        *   Pengguna dapat memilih salah satu dari tiga opsi:
            *   **Tetap Umum** (melanjutkan dengan akses dasar)
            *   **Register sebagai Pendidik**
            *   **Join sebagai Calon Pendidik**
    *   **Form Registrasi sebagai Pendidik:**
        *   Instansi
        *   Nama Kelas (yang akan dibuat)
        *   Jenjang Mengajar: Rich Text Editor
        *   Tujuan Bergabung: Rich Text Editor
        *   Setelah mengisi form ini, role pengguna akan diset sebagai "Pendidik" dan dapat mengakses Forum Group.
    *   **Form Join sebagai Calon Pendidik:**
        *   Instansi
        *   Pilih Kelas (dari daftar kelas yang sudah dibuat oleh Pendidik)
        *   NIM (Nomor Induk Mahasiswa)
        *   Setelah mengisi form ini, role pengguna akan diset sebagai "Calon Pendidik" dan dapat mengakses Forum Group.
*   **Login & Logout:**
    *   Halaman login untuk pengguna terdaftar dengan validasi email dan password.
    *   Sesi pengguna akan disimpan hingga mereka melakukan logout.
    *   Pengguna dengan role Umum tetap dapat mengakses Beranda, Forum Umum, dan konten umum, tetapi tidak dapat mengakses Forum Group, Menu Navigasi, atau sistem Assignment.
*   **Dashboard/Profil Pengguna:**
    *   Setiap pengguna memiliki dashboard pribadi setelah login.
    *   Menampilkan informasi profil, riwayat aktivitas, kelas yang diikuti (untuk Calon Pendidik), atau kelas yang dikelola (untuk Pendidik).
    *   Untuk pengguna dengan role Umum, dashboard akan menampilkan opsi untuk "Tetap Umum", "Register sebagai Pendidik", atau "Join sebagai Calon Pendidik".
    *   Dashboard menampilkan informasi profil, riwayat aktivitas, kelas yang diikuti (untuk Calon Pendidik), atau kelas yang dikelola (untuk Pendidik).

#### **4.2. Beranda & Manajemen Video**

*   **Beranda (Post-Login):**
    *   Menampilkan daftar video dari **semua role pengguna** (Administrator, Pendidik, Calon Pendidik, Umum) dalam bentuk grid atau list.
    *   Video di sini adalah agregasi konten dari seluruh komunitas.
    *   Video dapat difilter berdasarkan pengunggah, terbaru, atau terpopuler.
*   **Halaman Detail Video:**
    *   Memutar video yang dipilih.
    *   Menampilkan informasi video: **Judul**, **Nama Pengunggah**, dan **Keterangan**.
    *   Terdapat **kolom komentar** di bawah video untuk interaksi antar pengguna.
*   **Unggah Video (Upload Video):**
    *   **Semua role pengguna (Administrator, Pendidik, Calon Pendidik, Umum) dapat mengunggah video.**
    *   Form unggah video akan memiliki elemen-elemen berikut:
        *   **Pilihan Sumber Video (Radio Button):**
            *   **File Video Lokal:** Upload file video langsung dari device
            *   **Link YouTube:** Masukkan URL video YouTube untuk direct embedding (tanpa API key)
        *   **Jika memilih "File Video Lokal":**
            *   File video input (extension: MP4, AVI, MOV, WMV)
            *   Progress upload
            *   Comfirmasi kapasitas maksimal file
        *   **Jika memilih "Link YouTube":**
            *   Input URL YouTube
            *   Preview otomatis setelah memasukkan URL
            *   Validasi format URL YouTube
            *   Extract video ID untuk direct embedding
            *   Generate thumbnail dari YouTube video
            *   Embed video langsung tanpa API calls
        *   Judul Video
        *   Keterangan/Deskripsi
    *   **Opsi Penempatan Video (Hanya untuk Administrator):**
        *   Saat Administrator mengunggah (baik file lokal atau YouTube), akan ada opsi tambahan:
            *   Checkbox: "Tampilkan di Beranda" (Dicentang secara default).
            *   Dropdown/Checkbox: "Tampilkan di Menu" (dengan pilihan: "Teori", "Praktik", "Tidak Ada"). Administrator dapat memilih lebih dari satu kategori.
    *   **Untuk Pendidik dan Calon Pendidik:**
        *   Tidak ada opsi penempatan. Video yang diunggah (baik file lokal atau YouTube) akan otomatis masuk ke halaman Beranda.

#### **4.3. Menu dan Kategori Pembelajaran**

*   **Menu Navigasi Utama:**
    *   **Beranda:** Menuju halaman utama daftar video komunitas.
    *   **Teori:** Menampilkan daftar video dan materi terkait teori tari (contoh: Pengetahuan dasar tari, Unsur utama gerak, dll.).
    *   **Praktik:** Menampilkan daftar video terkait praktik tari (contoh: Olah Tubuh, Imitasi Gerak, Gerak Dasar).
    *   **Template Makalah:** Halaman khusus untuk mengunduh template makalah/tugas yang disediakan oleh Administrator atau Pendidik.
*   **Pengelolaan Konten Menu:**
    *   Menu "Teori" dan "Praktik" secara eksklusif hanya akan menampilkan video yang **diunggah dan diatur oleh Administrator**.
    *   **Pendidik** dapat mengusulkan video kepada Administrator untuk dipertimbangkan dimasukkan ke dalam menu, tetapi tidak bisa mempublikasikannya sendiri.

#### **4.4. Fitur Kolaborasi: Kelas dan Forum Group**

*   **Manajemen Kelas/Instansi:**
    *   **Pendidik** dapat membuat, mengedit, dan menghapus kelas.
    *   **Calon Pendidik** dapat bergabung dengan kelas saat melakukan registrasi sebagai Calon Pendidik atau melalui fitur "Join Class" yang memerlukan persetujuan Pendidik.
*   **Forum Group (Menggabungkan FGD dan Forum Tugas):**
    *   Forum Group adalah fitur diskusi dan kolaborasi yang terbagi menjadi **dua tipe**:
        *   **1. Forum Umum:**
            *   Dapat diakses oleh **semua pengguna** (termasuk yang belum memilih role).
            *   Berupa forum diskusi terbuka untuk berbagi informasi, tips, dan diskusi umum seputar tari.
            *   Semua pengguna dapat membuat topik baru (thread) dan membalas komentar.
        *   **2. Forum Group/Kelas:**
            *   **Hanya dapat diakses oleh pengguna yang sudah melakukan registrasi sebagai Pendidik atau Calon Pendidik dan tergabung dalam kelas tertentu.**
            *   Berupa forum diskusi berbasis teks di dalam setiap kelas.
            *   **Pendidik** dan **Calon Pendidik** yang tergabung dalam kelas dapat membuat topik baru (thread) dan membalas komentar.
            *   **Fitur Tugas & Revisi di dalam Forum Group/Kelas:**
                *   **Alur Kerja untuk Calon Pendidik:**
                    1.  Melihat tugas yang diberikan oleh Pendidik di Forum Group/Kelas.
                    2.  Mengunggah dokumen tugas dalam format **Word (.doc/.docx)**.
                    3.  Menambahkan **komentar teks** sebagai keterangan tambahan.
                *   **Alur Kerja untuk Pendidik:**
                    1.  Melihat daftar pengumpulan tugas dari Calon Pendidik.
                    2.  Mengunduh dokumen Word yang dikirim.
                    3.  Memberikan feedback dengan mengunggah **"Word Hasil Revisi"**.
                    4.  Menambahkan **komentar teks** untuk menjelaskan revisi yang dilakukan.
                *   Sistem harus menampilkan dokumen asli dan dokumen revisi secara berdampingan atau terhubung untuk memudahkan perbandingan.

---

### **5. Tabel Ringkasan Hak Akses**

| Fitur / Aksi | Administrator | Pendidik | Calon Pendidik | Umum |
| :--- | :---: | :---: | :---: | :---: |
| **Upload Video (File Lokal)** | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) |
| **Upload Video (YouTube Link)** | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) |
| **Video Tampil di Beranda** | ✅ (Ya) | ✅ (Ya, Otomatis) | ✅ (Ya, Otomatis) | ✅ (Ya, Otomatis) |
| **Memilih Penempatan Video** | ✅ (Ya) | ❌ (Tidak) | ❌ (Tidak) | ❌ (Tidak) |
| **Video Tampil di Menu Navigasi** | ✅ (Ya, Bisa dipilih) | ❌ (Tidak) | ❌ (Tidak) | ❌ (Tidak) |
| **Akses Menu Navigasi (Teori/Praktik)** | ✅ (Ya) | ✅ (Ya, View) | ✅ (Ya, View) | ❌ (Tidak) |
| **Akses Forum Umum** | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) |
| **Akses Forum Group/Kelas** | ✅ (Ya, Moderasi) | ✅ (Ya, Moderasi) | ✅ (Ya) | ❌ (Tidak) |
| **Membuat Kelas** | ✅ (Ya) | ✅ (Ya) | ❌ (Tidak) | ❌ (Tidak) |
| **Bergabung ke Kelas** | ✅ (Ya) | ✅ (Ya) | ✅ (Ya) | ❌ (Tidak) |
| **Membuat Tugas** | ❌ (Tidak) | ✅ (Ya) | ❌ (Tidak) | ❌ (Tidak) |
| **Upload Tugas (Word)** | ❌ (Tidak) | ✅ (Ya, Revisi) | ✅ (Ya, Pengumpulan) | ❌ (Tidak) |
| **Akses Template Makalah** | ✅ (Ya) | ✅ (Ya, Upload) | ✅ (Ya, Download) | ❌ (Tidak) |
| **Upgrade Role** | ❌ (Tidak, Max) | ❌ (Tidak) | ❌ (Tidak) | ✅ (Ya) |
| **Mengelola Pengguna Lain** | ✅ (Ya) | ❌ (Tidak) | ❌ (Tidak) |

---

### **6. Alur Pengguna (User Flows)**

*   **Alur Pengguna Umum (Default Role):**
    1.  Mengunjungi halaman awal -> Klik "Daftar" -> Isi formulir registrasi akun dasar (Nama, Email, Password, Password Confirmation) -> Login dengan role Umum.
    2.  Dapat menjelajah Beranda, melihat video komunitas dari SEMUA role, mengupload video ke Beranda.
    3.  Dapat mengakses Forum Umum untuk berdiskusi.
    4.  Dapat melihat dashboard dengan opsi upgrade ke Pendidik atau Calon Pendidik.
    5.  **Akses Terbatas:** Tidak dapat mengakses Menu Navigasi (Teori, Praktik, Template Makalah), Forum Group/Kelas, atau sistem Assignment hingga melakukan upgrade role.
*   **Alur Calon Pendidik:**
    1.  Mengunjungi halaman awal -> Klik "Daftar" -> Isi formulir registrasi akun dasar (Nama, Email, Password, Password Confirmation) -> Login.
    2.  Pilih "Join sebagai Calon Pendidik" (dapat dilakukan saat pertama login atau nanti) -> Isi formulir (Instansi, Pilih Kelas, NIM).
    3.  Di Beranda, menjelajah video dari komunitas (termasuk dari role Umum) dan video kurikuler di Menu.
    4.  Mengakses Forum Umum dan Forum Group/Kelas untuk berdiskusi.
    5.  Mengerjakan tugas di Forum Group/Kelas -> Upload Word + Komentar -> Tunggu revisi dari Pendidik.
    6.  Mengunggah video praktik pribadi ke Beranda.
*   **Alur Pendidik:**
    1.  Mengunjungi halaman awal -> Klik "Daftar" -> Isi formulir registrasi akun dasar (Nama, Email, Password, Password Confirmation) -> Login.
    2.  Pilih "Register sebagai Pendidik" (dapat dilakukan saat pertama login atau nanti) -> Isi formulir (Instansi, Nama Kelas, Jenjang Mengajar, Tujuan Bergabung).
    3.  Membuat kelas baru -> Mengunggah video pembelajaran ke Beranda.
    4.  Mengusulkan video ke Administrator untuk dimasukkan ke Menu kurikuler.
    5.  Membuat topik diskusi di Forum Umum dan Forum Group/Kelas.
    6.  Membuat tugas di Forum Group/Kelas -> Menunggu pengumpulan -> Memberikan revisi.
*   **Alur Administrator:**
    1.  Login dengan akun Administrator.
    2.  Memverifikasi Pendidik/Calon Pendidik baru (jika diperlukan).
    3.  Mengunggah video kurikuler dan menempatkannya di Menu Navigasi.
    4.  Meninjau usulan video dari Pendidik.
    5.  Mengelola konten dan pengguna jika ada masalah.

---

### **7. Persyaratan Non-Fungsional (Non-Functional Requirements)**

*   **Performa:** Halaman harus dimuat dalam waktu < 3 detik. Video streaming harus lancar tanpa buffering yang signifikan. Embed video YouTube harus fast loading.
*   **Keamanan:** Data pengguna (terutama NIM, password, dan dokumen pribadi) harus dienkripsi dan dilindungi. Sistem harus tahan terhadap serangan SQL Injection dan XSS. Menggunakan **Better Auth** framework untuk authentication modern dengan secure session management, role-based access control, dan protection terhadap common web vulnerabilities.
*   **Usability:** Antarmuka harus intuitif dan mudah dinavigasi, bahkan untuk pengguna dengan kemampuan teknis dasar. Konsistensi desain di seluruh halaman.
*   **Kompatibilitas:** Website harus responsif dan dapat diakses dengan baik di berbagai perangkat (desktop, tablet, mobile) dan browser modern (Chrome, Firefox, Safari).
*   **Skalabilitas:** Arsitektur sistem harus dirancang untuk dapat menampung peningkatan jumlah pengguna, video, dan dokumen di masa depan.
*   **Storage Management:**
    *   **File Video Lokal:** Dibutuhkan storage server yang cukup dengan kompresi video otomatis untuk menghemat space.
    *   **YouTube Embed:** Menggunakan direct URL embedding tanpa API key, lebih stabil dan hemat biaya.
    *   Sistem harus bisa mengelola kedua metode storage dengan baik.
*   **Desain & User Interface:**
    *   **Skema Warna:**
        *   **Navy (#000080):** Warna utama untuk header, tombol penting, dan elemen interaktif
        *   **Abu-abu Redup (#A9A9A9):** Warna sekunder untuk background card, border, dan text次要
        *   **Putih (#FFFFFF):** Warna untuk text, background content area, dan space kosong
    *   **Background Halaman:**
        *   Menggunakan file `background.jpg` sebagai background utama di seluruh halaman
        *   Background harus memiliki overlay effect untuk memastikan text tetap readable
        *   Background akan fixed position agar tidak scroll dengan content
    *   **Konsistensi Visual:**
        *   Semua halaman (Landing, Login, Dashboard, Beranda, dll) menggunakan skema warna yang sama
        *   Card dan container harus memiliki semi-transparent background untuk melihat efek background
        *   Typography yang clean dan modern dengan kontras yang baik terhadap background

---

### **8. Asumsi & Kendala**

*   **Asumsi:**
    *   Platform akan menggunakan video lokal dan direct URL YouTube untuk embed video (tanpa API dependencies).
    *   Platform akan menggunakan **Better Auth** framework untuk authentication dengan integrasi mudah ke Next.js 16+ dan Prisma ORM.
    *   Fitur FGD pada tahap awal akan berbasis forum teks, bukan video conference.
    *   File `background.jpg` telah tersedia dalam ukuran yang optimal untuk web dan responsive design.