MONITORINGv2 adalah platform digital terintegrasi yang dirancang khusus untuk mendigitalisasi seluruh proses monitoring Praktik Kerja Lapangan (PKL) di SMKN 1 Subang. Menggantikan sistem manual semi-digital dengan arsitektur modern berbasis Single Page Application (SPA) yang responsif, real-time, dan interaktif.
Sistem ini melayani empat aktor — Admin, Siswa, Guru, dan Perusahaan (DUDI) — masing-masing dengan portal eksklusif, hak akses terdefinisi, serta fitur yang dirancang sesuai kebutuhan spesifik setiap peran.
- Sekilas Tentang
- Fitur Unggulan
- Teknologi
- Arsitektur Sistem
- Tampilan Aplikasi
- Role Pengguna
- Panduan Penggunaan
- Struktur Database
- Panduan Instalasi
- Endpoint API
- Kontributor
MONITORINGv2 hadir sebagai solusi menyeluruh untuk menjawab tantangan monitoring PKL di era digital. Dengan memanfaatkan teknologi geolokasi, sistem ini memungkinkan validasi kehadiran siswa secara real-time melalui metode geofencing menggunakan rumus Haversine, sehingga memastikan siswa benar-benar berada di lokasi perusahaan saat melakukan presensi.
Proses monitoring PKL secara manual memiliki banyak kendala: data tersebar, sulit diverifikasi, komunikasi terbatas, serta pembuatan laporan yang memakan waktu. MONITORINGv2 menjawab semua tantangan tersebut dengan menyediakan satu platform terpadu yang menghubungkan sekolah, siswa, dan dunia industri.
- Mendigitalkan seluruh proses monitoring PKL dari hulu ke hilir
- Memvalidasi kehadiran siswa secara real-time menggunakan teknologi GPS
- Menjembatani komunikasi dan kolaborasi antara sekolah, siswa, dan perusahaan mitra
- Menghasilkan laporan PKL yang akurat, real-time, dan dapat diekspor dalam berbagai format
- Meningkatkan transparansi, akuntabilitas, dan efektivitas pelaksanaan PKL
Sistem mendaftarkan pengguna dalam empat peran berbeda — Admin, Siswa, Guru, Perusahaan — masing-masing dengan dashboard, fitur, dan hak akses yang terisolasi. Registrasi dilakukan secara mandiri melalui form publik dengan sistem approval oleh Admin.
Fitur presensi masuk dan pulang menggunakan koordinat GPS real-time dari perangkat siswa. Validasi lokasi menggunakan rumus Haversine untuk menghitung jarak antara posisi siswa dengan koordinat perusahaan. Jika jarak berada dalam radius yang telah ditentukan, kehadiran dianggap valid. Dilengkapi foto dokumentasi dan status kehadiran (Hadir, Terlambat, Alpha, Sakit, Izin).
Siswa dapat mencatat kegiatan harian selama PKL secara terstruktur, lengkap dengan lampiran file (gambar, PDF, dokumen). Fitur ini dilengkapi dengan alur review oleh Guru dan penilaian oleh Perusahaan, memastikan kualitas pencatatan kegiatan.
Siswa dapat mengajukan izin atau sakit dengan melampirkan bukti pendukung. Guru pembimbing akan menerima notifikasi dan dapat menyetujui atau menolak pengajuan disertai alasan.
Admin dapat menempatkan siswa ke perusahaan mitra dengan menentukan periode PKL (tanggal mulai dan selesai), serta menunjuk Guru pembimbing yang bertanggung jawab.
Penilaian mencakup enam aspek kompetensi: Absensi, Logbook, Laporan, Sikap, Kinerja, dan Kedisiplinan. Penilaian dilakukan oleh Guru dan Perusahaan secara terpisah, memberikan gambaran objektif tentang performa siswa.
Visualisasi sebaran siswa dan lokasi perusahaan pada peta interaktif berbasis Leaflet.js. Setiap marker menampilkan informasi detail perusahaan beserta daftar siswa yang ditempatkan di lokasi tersebut.
Sistem menyediakan fitur ekspor laporan dalam format Excel (.xlsx) untuk berbagai keperluan:
- Rekap absensi siswa
- Rekap logbook kegiatan
- Ringkasan data siswa
- Nilai akhir penilaian
Sistem notifikasi terintegrasi yang memberi tahu pengguna tentang berbagai peristiwa penting: approval registrasi, review logbook, persetujuan izin, dan pengingat kegiatan.
Siswa dapat mengunggah laporan akhir PKL lengkap dengan judul dan abstrak. Guru pembimbing dapat mereview, memberikan catatan revisi, dan menyetujui laporan.
| Teknologi | Versi | Kegunaan |
|---|---|---|
| PHP | ^8.3 | Bahasa pemrograman backend |
| Laravel | ^13.0 | Framework PHP dengan arsitektur MVC |
| MySQL | 8.x | Sistem manajemen basis data relasional |
| Laravel Sanctum | ^4.3 | Autentikasi API berbasis token |
| Maatwebsite/Laravel-Excel | ^3.1 | Ekspor data ke format Excel (.xlsx) |
| Teknologi | Versi | Kegunaan |
|---|---|---|
| Vue.js 3 (Composition API) | ^3.3 | Framework frontend reaktif dengan Composition API |
| Pinia | ^2.1 | Manajemen state terpusat |
| Vue Router 4 | ^4.2 | Routing SPA dengan navigation guards |
| Axios | ^1.5 | HTTP client dengan interceptor untuk token |
| Tailwind CSS 3 | ^3.3 | Utility-first CSS framework untuk styling cepat |
| Vite | ^4.4 | Build tool modern dengan HMR cepat |
| Leaflet.js | ^1.9 | Peta interaktif untuk visualisasi sebaran |
| ApexCharts / Chart.js / ECharts | — | Library grafik dan chart interaktif |
| vue-toastification | ^2.0 | Notifikasi toast yang responsif |
Haversine Formula — Algoritma yang digunakan untuk menghitung jarak geodesik antara dua titik koordinat di permukaan bumi. Implementasi ini memungkinkan validasi apakah siswa berada dalam radius geofencing perusahaan saat melakukan presensi.
a = sin²(Δlat/2) + cos(lat1) · cos(lat2) · sin²(Δlng/2)
c = 2 · atan2(√a, √(1-a))
d = R · c
R = 6.371 km (radius bumi)
Sistem menggunakan arsitektur RESTful API + SPA (Single Page Application) dengan pemisahan total antara frontend dan backend:
┌─────────────────────────────────────────────────────────────┐
│ CLIENT (Web Browser) │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Vue 3 Single Page Application │ │
│ │ ┌──────────────┐ ┌──────────┐ ┌────────────────┐ │ │
│ │ │ Pinia Store │ │ Router │ │ Axios Client │ │ │
│ │ └──────────────┘ └──────────┘ └────────────────┘ │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Layouts: Admin | Guru | Siswa | Perusahaan │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │ HTTPS / JSON │
└─────────────────────────────────────────────────────────────┘
│
┌─────────────────────────────────────────────────────────────┐
│ LARAVEL REST API (Backend) │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Routes → Middleware (auth:sanctum) → Controllers │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │Controllers: Auth |Admin |Guru |Siswa |Perusahaan │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Models (Eloquent ORM) → Database (MySQL) │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Siswa Browser Laravel API
| | |
|── Klik Check-in ──────>| |
| |── POST /check-in (lat,lng)──>|
| | |── Ambil data perusahaan
| | |── Hitung jarak (Haversine)
| | |── Validasi dalam radius?
| |<── Response JSON ────────────|
|<── Notifikasi ─────────| |
Halaman utama yang menyambut pengguna dengan desain modern dan informatif
Visualisasi lokasi perusahaan dan sebaran siswa menggunakan Leaflet.js dengan marker interaktif
Presensi check-in/check-out dengan validasi radius menggunakan GPS dan rumus Haversine
Dashboard admin dengan statistik lengkap, grafik kehadiran, dan aktivitas terbaru
Aktor dengan wewenang penuh atas sistem. Bertanggung jawab mengelola seluruh data master, memantau kegiatan PKL secara real-time, menyetujui registrasi akun baru, mengatur konfigurasi sistem, serta menghasilkan laporan untuk kebutuhan evaluasi.
Fitur utama:
- Dashboard dengan statistik komprehensif (total siswa, guru, perusahaan, placement aktif)
- Manajemen data pengguna (CRUD siswa, guru, admin)
- Manajemen data perusahaan mitra (nama, alamat, koordinat GPS, radius geofencing)
- Manajemen kelas dan jurusan
- Penempatan siswa ke perusahaan dengan periode dan guru pembimbing
- Monitoring absensi, logbook, dan progres siswa secara real-time
- Peta sebaran interaktif (Leaflet)
- Approval registrasi pengguna baru
- Penilaian dan review data siswa
- Ekspor laporan ke Excel (absensi, logbook, ringkasan, nilai)
- Konfigurasi sistem (profil sekolah, tahun ajaran, radius presensi)
Aktor utama yang menjalani PKL. Siswa menggunakan sistem untuk melakukan presensi harian, mencatat kegiatan, mengajukan izin, serta mengunggah laporan akhir.
Fitur utama:
- Dashboard personal dengan statistik kehadiran dan progres
- Presensi GPS check-in dan check-out dengan validasi radius
- Jurnal harian (logbook) dengan lampiran file
- Pengajuan izin dan sakit
- Upload laporan PKL dan final report
- Informasi detail perusahaan tempat PKL
- Riwayat presensi dan logbook
Aktor yang membimbing dan memantau siswa selama PKL. Guru memiliki akses untuk mereview logbook, menyetujui izin, menilai siswa, serta mengekspor laporan.
Fitur utama:
- Dashboard monitoring siswa bimbingan
- Daftar siswa bimbingan dengan detail progres
- Review dan approval logbook dengan feedback
- Approval pengajuan izin/sakit
- Penilaian multidimensi (6 aspek kompetensi)
- Rekap absensi siswa bimbingan
- Review laporan akhir PKL
- Ekspor laporan ke Excel
Aktor dari pihak dunia industri yang membimbing siswa selama PKL. Perusahaan berperan dalam menilai logbook dan memantau progres siswa.
Fitur utama:
- Dashboard progres siswa bimbingan
- Penilaian logbook (grade 0-100 + feedback)
- Monitoring aktivitas siswa
- Ekspor laporan logbook dan progres
- Buka aplikasi melalui browser
- Klik tombol Login pada halaman utama
- Masukkan email dan password yang telah terdaftar
- Sistem akan mengarahkan ke dashboard sesuai role pengguna
- Klik tombol Daftar pada halaman utama
- Pilih peran (Siswa, Guru, atau Perusahaan)
- Isi formulir pendaftaran dengan data lengkap
- Kirim pendaftaran — akun akan masuk dalam status Pending
- Admin akan menyetujui atau menolak pendaftaran
- Anda akan mendapat notifikasi melalui email atau in-app notification
- Pastikan lokasi GPS perangkat aktif
- Buka menu Presensi pada dashboard siswa
- Klik tombol Check-in saat tiba di lokasi perusahaan
- Sistem akan memvalidasi lokasi — pastikan berada dalam radius perusahaan
- Klik tombol Check-out saat pulang
- Riwayat presensi dapat dilihat pada menu histori
- Buka menu Logbook pada dashboard siswa
- Klik Tambah Baru untuk mencatat kegiatan
- Isi judul kegiatan, deskripsi, dan lampirkan file jika diperlukan
- Kirim logbook — status akan Pending hingga direview
- Cek status review dan feedback pada menu yang sama
Database monitoring_pkl terdiri dari 12 tabel utama yang saling terintegrasi:
roles ──1:N──> users
classes ──1:N──> users
companies ──1:N──> users
companies ──1:N──> placements
companies ──1:N──> attendances
users ──1:N──> placements
users ──1:N──> attendances
users ──1:N──> logbooks
users ──1:N──> permissions
users ──1:N──> reports
users ──1:N──> final_reports
users ──1:N──> notifications
users ──1:N──> assessments
| Tabel | Deskripsi | Key Fields |
|---|---|---|
roles |
Definisi peran pengguna | id, name (Admin=1, Siswa=2, Guru=3, Perusahaan=4) |
users |
Seluruh pengguna sistem (polimorfik) | id, name, email, password, role_id, company_id, class_id, teacher_id, nisn, nip, is_active, photo, registration_status |
companies |
Data perusahaan mitra (DUDI) | id, name, address, latitude, longitude, radius |
classes |
Data kelas dan jurusan | id, name, jurusan, tingkat, teacher_id, academic_year |
placements |
Penempatan siswa ke perusahaan | id, student_id, company_id, teacher_id, start_date, end_date, status |
attendances |
Catatan presensi harian | id, user_id, company_id, date, check_in, check_out, check_in_lat/lng, check_out_lat/lng, status, photo, is_valid_location |
logbooks |
Jurnal kegiatan harian | id, user_id, date, activity, description, attachment, status, grade, feedback |
permissions |
Pengajuan izin/sakit | id, user_id, date, type, reason, attachment, status |
assessments |
Penilaian multidimensi | id, student_id, assessor_id, assessor_type, *score fields (6 aspek), final_score |
reports |
Upload laporan PKL | id, user_id, file_path, file_name, file_size, status |
final_reports |
Laporan akhir PKL | id, student_id, title, abstract, file_path, status, revision_notes |
notifications |
Notifikasi in-app | id, user_id, title, message, type, url, is_read |
| Prasyarat | Versi Minimal |
|---|---|
| PHP | 8.3 |
| Composer | 2.x |
| Node.js | 18.x |
| npm | 9.x |
| MySQL | 8.0 |
| Web Server | Apache / Nginx |
git clone https://github.com/muadzie/MONITORING-V2.git
cd MONITORING-V2/monitoring-pkl-backendcomposer installcp .env.example .envSesuaikan konfigurasi database pada file .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=monitoring_pkl
DB_USERNAME=root
DB_PASSWORD=php artisan key:generatemysql -u root -e "CREATE DATABASE IF NOT EXISTS monitoring_pkl"php artisan migratephp artisan db:seedcd ../monitoring-pkl-frontend
npm installTerminal 1 — Backend:
cd monitoring-pkl-backend
php artisan serveTerminal 2 — Frontend:
cd monitoring-pkl-frontend
npm run dev| Komponen | URL |
|---|---|
| Frontend (Development) | http://localhost:5173 |
| Backend API | http://localhost:8000/api |
| Method | Endpoint | Deskripsi | Auth |
|---|---|---|---|
| POST | /api/login |
Login pengguna | Tidak |
| POST | /api/logout |
Logout (hapus token) | Sanctum |
| GET | /api/me |
Data pengguna saat ini | Sanctum |
| Method | Endpoint | Deskripsi |
|---|---|---|
| POST | /api/register/siswa |
Registrasi akun siswa |
| POST | /api/register/guru |
Registrasi akun guru |
| POST | /api/register/perusahaan |
Registrasi akun perusahaan |
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /dashboard/stats |
Statistik dashboard admin |
| GET | /dashboard/recent-activities |
Aktivitas terbaru |
| GET | /dashboard/top-students |
Siswa dengan performa terbaik |
| CRUD | /users |
Manajemen seluruh pengguna |
| CRUD | /students |
Manajemen data siswa |
| CRUD | /teachers |
Manajemen data guru |
| CRUD | /companies |
Manajemen data perusahaan |
| CRUD | /classes |
Manajemen data kelas |
| CRUD | /placements |
Manajemen penempatan siswa |
| GET | /registrations/pending |
Registrasi menunggu persetujuan |
| POST | /registrations/{id}/approve |
Menyetujui registrasi |
| POST | /registrations/{id}/reject |
Menolak registrasi |
| GET | /monitoring/attendance |
Data monitoring absensi |
| GET | /monitoring/logbook |
Data monitoring logbook |
| GET | /monitoring/progress |
Data progres siswa |
| GET | /map/data |
Data peta sebaran |
| GET | /reports/attendance |
Ekspor Excel rekap absensi |
| GET | /reports/logbook |
Ekspor Excel rekap logbook |
| GET | /reports/summary |
Ekspor Excel ringkasan siswa |
| GET | /reports/grade |
Ekspor Excel nilai akhir |
| GET/POST | /settings/* |
Konfigurasi sistem |
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /dashboard/stats |
Statistik dashboard personal |
| POST | /attendance/check-in |
Presensi masuk (dengan GPS) |
| POST | /attendance/check-out |
Presensi pulang (dengan GPS) |
| POST | /attendance/photo |
Upload foto saat presensi |
| GET | /attendance/today |
Data presensi hari ini |
| GET | /attendance/history |
Riwayat presensi |
| CRUD | /logbooks |
Kelola jurnal harian |
| CRUD | /permissions |
Kelola pengajuan izin/sakit |
| POST | /report/upload |
Upload laporan PKL |
| CRUD | /final-reports |
Kelola laporan akhir |
| GET | /company |
Informasi perusahaan |
| GET | /company/location |
Koordinat lokasi perusahaan |
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /dashboard/stats |
Statistik dashboard guru |
| GET | /monitoring |
Daftar siswa bimbingan |
| GET | /logbooks/pending |
Logbook yang perlu direview |
| PUT | /logbooks/{id}/approve |
Menyetujui logbook |
| PUT | /logbooks/{id}/reject |
Menolak logbook |
| PUT | /logbooks/{id}/review |
Review logbook dengan feedback |
| GET | /permissions/pending |
Izin/sakit yang perlu disetujui |
| PUT | /permissions/{id}/approve |
Menyetujui izin/sakit |
| PUT | /permissions/{id}/reject |
Menolak izin/sakit |
| CRUD | /assessments |
Penilaian siswa |
| GET | /attendances/summary |
Rekap absensi siswa |
| GET | /reports/attendance |
Ekspor Excel absensi |
| GET | /reports/logbook |
Ekspor Excel logbook |
| GET | /reports/assessment |
Ekspor Excel penilaian |
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /dashboard/stats |
Statistik dashboard perusahaan |
| GET | /logbooks/pending |
Logbook yang perlu dinilai |
| PUT | /logbooks/{id}/grade |
Memberikan nilai logbook |
| POST | /logbooks/{id}/feedback |
Memberikan feedback logbook |
| GET | /progress |
Progres siswa bimbingan |
| GET | /reports/logbook |
Ekspor laporan logbook |
| GET | /reports/progress |
Ekspor laporan progres |
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET/PUT | /api/profile |
Lihat dan update profil |
| PUT | /api/profile/password |
Ubah password |
| POST | /api/profile/photo |
Upload foto profil |
| DELETE | /api/profile/photo |
Hapus foto profil |
| GET | /api/notifications |
Daftar notifikasi |
| GET | /api/notifications/unread |
Notifikasi belum dibaca |
| PUT | /api/notifications/{id}/read |
Tandai notifikasi sudah dibaca |
| PUT | /api/notifications/read-all |
Tandai semua sudah dibaca |
| CRUD | /api/assessments |
Kelola penilaian |
V2server2/
├── DOKUMENTASI.txt # Dokumentasi teknis
├── README.md # File ini
├── foto/ # Screenshot aplikasi
│ ├── absensi_radius.png
│ ├── beranda.png
│ ├── dashboard_admin.png
│ └── peta_sebaran.png
├── monitoring-pkl-backend/ # Backend Laravel
│ ├── app/
│ │ ├── Constants/RoleConstants.php # Konstanta ID role
│ │ ├── Console/Commands/ # Artisan commands
│ │ │ ├── AutoFillAttendance.php
│ │ │ ├── CheckAlphaAttendance.php
│ │ │ └── FixPlacementTeacherId.php
│ │ ├── Exports/ # Export classes (Excel)
│ │ ├── Helpers/
│ │ │ ├── HaversineHelper.php # Rumus Haversine
│ │ │ └── helpers.php # Fungsi global
│ │ ├── Http/Controllers/Api/
│ │ │ ├── AuthController.php
│ │ │ ├── Admin/ # ~12 controllers
│ │ │ ├── Guru/ # ~7 controllers
│ │ │ ├── Siswa/ # ~6 controllers
│ │ │ └── Perusahaan/ # ~3 controllers
│ │ ├── Models/ # 12+ Eloquent models
│ │ └── Providers/
│ ├── database/
│ │ ├── migrations/ # 28 migration files
│ │ └── monitoring_pkl (3).sql # Database dump
│ ├── routes/
│ │ ├── api.php # 314+ baris route API
│ │ └── web.php # SPA catch-all
│ ├── composer.json
│ └── artisan
└── monitoring-pkl-frontend/ # Frontend Vue 3
└── src/
├── layouts/ # Layout per role
│ ├── AdminLayout.vue
│ ├── GuruLayout.vue
│ ├── SiswaLayout.vue
│ └── PerusahaanLayout.vue
├── views/
│ ├── admin/ # ~15 halaman admin
│ ├── guru/ # ~10 halaman guru
│ ├── siswa/ # ~10 halaman siswa
│ └── perusahaan/ # ~5 halaman perusahaan
├── components/ # Komponen bersama
├── stores/ # Pinia stores
├── router/ # Vue Router config
└── App.vue
|
Ilham Muadz Fakhrizi Pengembang & Desainer Sistem ilhammuadz133@gmail.com |
| Nama | Peran | Kontak |
|---|---|---|
| Ilham Muadz Fakhrizi | Full-Stack Developer & System Designer | ilhammuadz133@gmail.com |
- Laravel — Framework backend
- Vue.js — Framework frontend
- Tailwind CSS — CSS framework
- Leaflet — Library peta interaktif
- ApexCharts — Library grafik
- Laravel Sanctum — Autentikasi API
Hak Cipta © 2026 Ilham Muadz Fakhrizi
Dikembangkan untuk SMKN 1 Subang — Sistem Informasi Monitoring Praktik Kerja Lapangan
Dilarang memperbanyak, mendistribusikan, atau menggunakan sebagian atau seluruh
konten aplikasi ini tanpa izin tertulis dari pengembang.
SMKN 1 Subang — Jl. Arief Rahman Hakim No. 35, Subang, Jawa Barat