<<<<<<< HEAD
Platform tata kelola pendidikan terintegrasi yang dirancang khusus untuk otomasi ekosistem akademik, perpustakaan digital, manajemen presensi berbasis QR Code terenkripsi, evaluasi pembelajaran (LMS & CBT), serta kegiatan ekstrakurikuler di SMP Negeri 2 Kamal, Kabupaten Bangkalan, Jawa Timur.
- Identitas & Gambaran Sistem
- Modul & Fitur Utama (12 Modul)
- Matriks Role & Hak Akses
- Tech Stack & Prasyarat Sistem
- Arsitektur Kode & Repository-Service Pattern
- Panduan Instalasi & Setup Lokal
- Design System & UI Components
- Log Audit & Refactoring Performance
- Nama Resmi: Sistem Sekolah Terintegrasi (SST)
- Institusi Pengguna: SMP Negeri 2 Kamal, Bangkalan, Madura
- Tujuan Sistem: Menghilangkan silo data antarbagian (akademik, perpustakaan, guru pengajar, ekstrakurikuler), menstandarkan proses penilaian Kurikulum Merdeka, serta menyediakan portal digital satu pintu yang cepat, aman, dan mudah digunakan oleh siswa maupun wali murid.
Sistem telah diaudit dan direfaktor secara modular ke dalam 12 domain fungsional:
- Halaman beranda responsif dengan showcase profil sekolah, sambutan kepala sekolah, visi, misi, dan fasilitas.
- Galeri dinamis dan direktori tenaga pengajar terverifikasi.
- Asset gambar dioptimasi WebP ultra-ringan (< 500 KB total payload) untuk loading super cepat pada koneksi mobile.
- Login berbasis multi-guard:
superadmin,staff_akademik,staff_perpus,guru, dansiswa. - Integrasi Single Sign-On (SSO) Google OAuth untuk siswa dan guru.
- Proteksi brute-force, CSRF mitigation, dan session management berbasis peran.
- Katalog buku terindeks dengan pencarian judul, pengarang, ISBN, kategori, dan status ketersediaan stok fisik.
- Manajemen peminjaman dan pengembalian buku dengan kode transaksi unik.
- Kalkulasi denda harian otomatis berdasarkan keterlambatan pengembalian buku.
- Ekspor laporan analitik sirkulasi dan denda buku (Excel & PDF).
- Pembuatan ruang belajar per kelas mata pelajaran yang diampu.
- Pengorganisasian topik pembelajaran terstruktur.
- Upload materi pembelajaran multimedia (dokumen PDF dan embed referensi video).
- Pembuatan penugasan siswa dengan tenggat waktu (deadline) dan instruksi detail.
- Rekapitulasi pengumpulan tugas dan interface penilaian siswa.
- Dasbor belajar personal siswa menampilkan mata pelajaran terdaftar.
- Akses dan download materi pelajaran per topik.
- Pengumpulan tugas online (file upload & teks jawaban) sebelum batas waktu.
- Notifikasi status penilaian dan feedback nilai tugas dari guru.
- Manajemen data induk kelas (kelas 7, 8, 9) dan alokasi wali kelas.
- Distribusi dan penempatan rombongan belajar siswa per tahun ajaran.
- Manajemen master mata pelajaran umum dan muatan lokal.
- Penyusunan jadwal kegiatan belajar mengajar per hari, jam pelajaran, ruang kelas, dan guru pengampu.
- Validasi pencegahan bentrok jadwal guru dan ruang kelas.
- Tampilan jadwal personal untuk masing-masing guru dan siswa.
- Rekapitulasi nilai tugas, absensi, dan ujian online.
- Konversi nilai akhir otomatis ke predikat (A, B, C, D) berdasarkan rentang bobot dinamis (
bobot_grades). - Cetak lembar rapor siswa dalam format dokumen PDF standar sekolah.
- Staff Akademik/Guru men-generate sesi pertemuan mingguan secara otomatis per semester.
- Pembuatan QR Code SVG unik per pertemuan tersimpan lokal di storage aman.
- Siswa melakukan absensi instan dengan pemindaian (scan) QR Code via smartphone.
- Fitur aktivasi/deaktivasi sesi presensi QR oleh guru pengajar saat jam pelajaran berlangsung.
- Bank soal ujian online (pilihan ganda) terikat topik dan kelas mata pelajaran.
- Pengaturan durasi waktu pengerjaan otomatis dan countdown timer di sisi siswa.
- Kalkulasi nilai otomatis dan rekap data hasil pengumpulan ujian siswa.
- Pendaftaran siswa ke ekstrakurikuler aktif (Pramuka, Paskibra, PMR, Olahraga, Seni, dll).
- Manajemen inventaris perlengkapan dan peralatan masing-masing ekstrakurikuler.
- Pencatatan peminjaman dan pengembalian alat ekskul oleh anggota.
- Dasbor analitik pusat statistik seluruh civitas akademika SMPN 2 Kamal.
- CRUD data induk guru (NIP, identitas, foto profil, hak akses).
- CRUD data induk siswa (NISN, kelas, data kontak, status aktif).
- Kelola akun staf akademik, staf perpustakaan, pembina ekskul, dan pengurus ekskul.
- Fitur reset password instan bagi pengguna yang lupa sandi.
| Modul / Domain | Superadmin | Staff Akademik | Staff Perpus | Guru | Siswa | Pembina Ekskul | Pengurus Ekskul |
|---|---|---|---|---|---|---|---|
| Portal & Beranda | β | β | β | β | β | β | β |
| Kelola Master User | β (Full) | β | β | β | β | β | β |
| Kelas & Rombel | β | β (Full) | β | ποΈ (Read) | ποΈ (Read) | β | β |
| Jadwal Pelajaran | β | β (Full) | β | ποΈ (Read) | ποΈ (Read) | β | β |
| E-Rapor | β | β (Full) | β | β (Input) | ποΈ (Read) | β | β |
| Perpustakaan & Buku | β | β | β (Full) | ποΈ (Read) | ποΈ (Pinjam) | β | β |
| LMS (Materi & Tugas) | β | β | β | β (Kelola) | β (Akses) | β | β |
| CBT / Ujian Online | β | β | β | β (Kelola) | β (Ikut) | β | β |
| Presensi & QR Code | β | β (Batch) | β | β (Validasi) | β (Scan) | β | β |
| Kegiatan Ekskul | β | β | β | β | ποΈ (Daftar) | β (Full) | β (Operasional) |
- PHP: Versi >= 8.2 (ekstensi:
pdo_mysql,mbstring,openssl,gd,xml,curl) - Composer: Versi >= 2.x
- Node.js & NPM: Versi >= 18.x
- Database Server: MySQL >= 8.0 atau MariaDB >= 10.4
- Framework: Laravel 11.x (di dalam direktori
PPL/) - Frontend Engine: Blade Templates + Tailwind CSS 3.4 + Flowbite
- JavaScript Framework: Alpine.js 3.x
- Build Tool: Vite 5.x
- Package Utama:
bacon/bacon-qr-code: Generator QR Code SVG lokalbarryvdh/laravel-dompdf: Generator laporan PDFmaatwebsite/excel: Impor & ekspor spreadsheetlaravel/socialite: Google OAuth 2.0 SSO
Untuk menghindari fat controllers dan scattered DB queries, codebase mengadopsi Service-Repository Pattern:
PPL/app/
βββ Http/
β βββ Controllers/ # Hanya bertugas HTTP: Request -> Service -> Response
β β βββ beranda/
β β βββ guru/
β β βββ perpustakaan/
β β βββ siswa/
β β βββ staffakademik/
β β βββ staffperpus/
β β βββ superadmin/
β βββ Requests/ # 100% validasi input FormRequest terisolasi
β βββ Absensi/
β βββ Akademik/
β βββ Ekstrakurikuler/
β βββ Lms/
β βββ Perpustakaan/
β βββ Ujian/
βββ Models/ # Definisi schema Eloquent, relasi, & casting
βββ Providers/
β βββ RepositoryServiceProvider.php # IoC Container bindings
βββ Repositories/
β βββ Contracts/ # Interface kontrak abstraksi data
β β βββ Absensi/
β β βββ Akademik/
β β βββ Ekstrakurikuler/
β β βββ Lms/
β β βββ Perpustakaan/
β β βββ Portal/
β β βββ Ujian/
β β βββ UserManagement/
β βββ Eloquent/ # Implementasi query database (meng-extend BaseRepository)
βββ Services/ # Business logic, transaksi, kalkulasi nilai & file upload
βββ Absensi/
βββ Akademik/
βββ Ekstrakurikuler/
βββ Lms/
βββ Perpustakaan/
βββ Portal/
βββ Superadmin/
βββ Ujian/
- Controller: Tidak boleh menjalankan query Eloquent/DB secara langsung (
DB::table()atauModel::where()). Wajib memanggil methodService. - Validasi: Validasi tidak boleh menggunakan
$request->validate()manual di dalam method Controller. Wajib membuat fileFormRequestkhusus diapp/Http/Requests/{Module}/. - Database Transaction: Operasi multi-tabel (seperti submit ujian + simpan rincian jawaban) wajib dibungkus dalam
DB::transaction(). - Pint Standard: Seluruh file PHP wajib mematuhi standar PSR-12 menggunakan Laravel Pint (
vendor/bin/pint).
Ikuti langkah-langkah berikut untuk menjalankan sistem dari awal di lingkungan lokal:
git clone https://github.com/ReEkaF/PPL-project.git
cd PPL-project/PPLcomposer install
npm installSalin template konfigurasi:
cp .env.example .envSesuaikan konfigurasi database di file .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ppl
DB_USERNAME=root
DB_PASSWORD=php artisan key:generate
php artisan storage:linkphp artisan migrate:fresh --seed# Untuk pengembangan lokal:
npm run dev
# Atau untuk kompilasi production:
npm run buildphp artisan serveAkses aplikasi melalui browser di http://127.0.0.1:8000.
Gunakan kredensial default berikut untuk pengujian sesuai perannya:
| Role | Identitas Login (Username / NIP / NISN) | Password | Guard / Prefix Rute |
|---|---|---|---|
| Superadmin | admin (atau email admin) |
password |
/superadmin/dashboard |
| Staff Akademik | akademik |
akademik |
/staff_akademik/dashboard |
| Staff Perpustakaan | perpus |
perpus |
/staff_perpus/dashboard |
| Guru Pengajar | 198001012005011001 (NIP) |
password |
/guru/dashboard |
| Siswa | 1234567890 (NISN) |
password |
/siswa/dashboard |
| Pembina Ekskul | Guru yang ditunjuk sebagai pembina | password |
/pembina/dashboard |
| Pengurus Ekskul | Siswa yang ditunjuk sebagai pengurus | password |
/pengurus/dashboard |
Aplikasi menggunakan palet desain resmi bertema institusi pendidikan terpercaya, menjauhkan kesan template generik (anti-AI slop).
- Primary Institutional Navy:
#0c8be5s/d#07253b(mencerminkan kewibawaan dan keandalan sistem sekolah). - Educational Amber/Gold:
#f59e0b&#d97706(penanda aksi utama dan prestasi). - Surface & Clean Canvas:
#f8fafc&#ffffffdengan border netral#e2e8f0untuk kenyamanan membaca dalam durasi lama. - Micro-Animations & Elevation: Halus, responsif terhadap hover dan fokus input.
Disediakan komponen UI di PPL/resources/views/components/ui/:
<x-ui.button variant="primary|secondary|danger|outline">: Tombol konsisten dengan transisi halus.<x-ui.card>: Kartu konten dengan border elegan dan elevasi terukur.<x-ui.stat-card icon="..." label="..." value="..." delta="...">: Kartu KPI statistik pada dashboard.<x-ui.badge variant="success|warning|danger|brand">: Label status seragam untuk peminjaman, kehadiran, dan ujian.<x-ui.table>: Wadah tabel responsif dengan scrolling horizontal otomatis di layar mobile.
Sebelum proses refactoring, sistem mengalami beberapa isu arsitektur dan performa yang ditangani secara menyeluruh melalui 7 siklus pengembangan:
- Asset Berat: Gambar banner beranda (
perpus.jpg,ekstra.jpg) berukuran > 10 MB menyebabkan waktu loading awal (First Contentful Paint) mencapai > 6 detik. - Kueri Tanpa Batas (Unbounded Queries): Banyak pemanggilan
all()danget()tanpa pagination pada tabel transaksi dan data buku. - Ketergantungan CDN Eksternal yang Rentan: Mengimpor skrip Flowbite dari domain Vercel publik (
flowbite-admin-dashboard.vercel.app), berisiko fatal jika link tersebut offline. - Duplikasi Skrip: Alpine.js di-load 2 kali (via Vite dan CDN), memicu Alpine Warning: multiple instances.
- Dead Code & Stray Debug: Ditemukan file controller duplikat mati serta kode debug
dd()yang tertinggal di controller produksi (KelasController:280).
| Metrik / Aspek | Sebelum Refactor (Before) | Sesudah Refactor (After) | Peningkatan / Penghematan |
|---|---|---|---|
| Ukuran Gambar Banner | 10.2 MB (JPEG) | 368 KB (WebP) | Hemat 96.4% bandwidth |
| First Contentful Paint (Home) | ~ 6.2 detik | ~ 0.8 detik | ~7.7x Lebih Cepat |
| Arsitektur Controller | Monolitik, DB query langsung di Controller | Service-Repository Pattern terisolasi | Pemisahan tanggung jawab 100% (Clean Code) |
| Validasi Form | $request->validate() manual berulang |
FormRequest terstruktur di layer HTTP | Zero duplicate validation rules |
| External CDN Dependency | 4 CDN eksternal render-blocking | 0 external dashboard bundle, asset lokal via Vite | 100% Mandiri & Aman |
| Kueri Transaksi Perpus | Full scan tanpa indeks | B-Tree index pada kolom kode_peminjam & status |
Eksekusi pencarian instan O(log N) |
| Code Style Formatting | Tidak konsisten antar developer | 100% lolos linting PSR-12 via Laravel Pint | Zero linting errors (345 files clean) |
Project ini dikembangkan dan direfaktor oleh Tim PPL Mahasiswa Informatika untuk implementasi sistem tata kelola pendidikan di SMP Negeri 2 Kamal.
Untuk mengaktifkan pengiriman notifikasi otomatis tugas dan kehadiran via WhatsApp Gateway (Twilio):
- Kirim pesan WhatsApp ke nomor
+14155238886 - Ketik
join weak-gold(tanpa tanda petik) hingga menerima pesan balasan berhasil. - Pastikan nomor tujuan terdaftar dan jalankan worker antrean pada terminal terpisah:
dan scheduler:
php artisan queue:listen
php artisan schedule:work
Project ini dikembangkan dan direfaktor oleh Tim PPL Mahasiswa Informatika untuk implementasi sistem tata kelola pendidikan di SMP Negeri 2 Kamal.
Dokumentasi ini dimutakhirkan secara berkala untuk mendukung pemeliharaan sistem terpadu.