Aplikasi web manajemen perpustakaan berbasis Laravel 12 yang dirancang untuk membantu pengelolaan koleksi buku, peminjaman, pengembalian, dan komunitas siswa di lingkungan SMK.
👤 Autentikasi & Role
Login, register, dan logout
Tiga level akses: Admin, Petugas, dan Siswa
Two-Factor Authentication (2FA via OTP email) khusus untuk Admin
Middleware proteksi halaman berdasarkan role
📖 Manajemen Buku
(Admin/Petugas)
CRUD data buku (tambah, edit, hapus, lihat detail)
Upload cover buku via file atau URL eksternal
Upload e-book dalam format PDF
Filter katalog berdasarkan genre
Pencarian buku berdasarkan judul, pengarang, atau ISBN
Manajemen stok buku secara real-time
📋 Peminjaman & Pengembalian
Siswa dapat mengajukan peminjaman langsung dari halaman detail buku
Keranjang peminjaman — siswa bisa menambah beberapa buku sekaligus dan checkout dalam satu permintaan
Tanggal kembali fleksibel (minimal besok, maksimal 7 hari)
Admin/Petugas menyetujui atau menolak permintaan peminjaman
Konfirmasi pengembalian buku oleh Admin/Petugas
Laporan kerusakan/kehilangan saat pengembalian (dengan denda otomatis berdasarkan harga buku)
Perpanjangan peminjaman — siswa mengajukan, Admin/Petugas menyetujui (max +7 hari)
💰 Sistem Denda
Denda keterlambatan dihitung otomatis
Denda kerusakan/kehilangan berdasarkan harga buku
Siswa upload bukti pembayaran denda
Admin mengkonfirmasi pembayaran denda
🚫 Sistem Blacklist
Admin/Petugas dapat memblokir akun siswa (durasi tertentu atau permanen)
Siswa yang di-blacklist tidak dapat melakukan aktivitas peminjaman
Petugas tidak dapat memblokir sesama petugas atau admin
💬 Komunitas & Chat
Grup chat — semua pengguna dapat berkirim pesan dan lampiran
Chat privat — percakapan one-on-one antar pengguna
Mendukung pengiriman lampiran file (max 5MB)
📊 Dashboard & Laporan (Admin)
Statistik buku terpopuler
Statistik siswa paling aktif
Statistik genre terpopuler (pie chart)
Total denda keseluruhan
Export laporan lengkap ke Excel (.xlsx) dan PDF
Laporan peminjaman per buku
Buku terpopuler
Peminjaman per siswa
Genre terpopuler
Siswa paling sering terlambat
| Komponen | Detail |
| Framework | Laravel 12 |
| PHP | $\ge 8.2$ |
| Database | SQLite (default) / MySQL |
| Export | Maatwebsite/Laravel-Excel 3.1 |
| barryvdh/laravel-dompdf 3.1 | |
| HTTP Client | Guzzle 7 |
| Frontend | Blade Templates + Vite |
| Auth | Custom session-based |
📁 app/
│ 📁 Exports/ # Kelas export Excel (laporan)
│ 📁 Http/
│ │ 📁 Controllers/ # BookController, LoanController, dll.
│ │ └── 📁 Middleware/ # CheckLogin, RoleMiddleware, dll.
│ └── 📁 Models/ # Book, Loan, User, Cart, Post, dll.
│
📁 database/
│ └── 📁 migrations/ # Migrasi database
│
📁 resources/
│ └── 📁 views/
│ 📁 admin/ # Halaman dashboard admin
│ 📁 siswa/ # Halaman katalog, histori, cart siswa
│ 📁 komunitas/ # Halaman chat & komunitas
│ 📁 auth/ # Login, register
│ └── 📁 layouts/ # Layout utama (admin & siswa)
│
📁 routes/
└── 📄 web.php # Semua definisi route
PHP >= 8.2
Composer
Node.js & npm
XAMPP / Laragon / server lokal lainnya
1. Clone repository
Bash
git clone https://github.com/LinggaKeandre/Perpustakaan-Lingga
cd perpustakaan-smk
2. Install dependencies PHP
Bash
composer install
3. Install dependencies JavaScript
Bash
npm install
4. Salin file environment
Bash
cp .env.example .env
5. Generate application key
Bash
php artisan key:generate
6. Konfigurasi database
Edit file .env sesuai kebutuhan Anda:
Ini, TOML
# Untuk SQLite (default, tidak perlu setup tambahan)
DB_CONNECTION=sqlite
# Untuk MySQL
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=perpustakaan_smk
DB_USERNAME=root
DB_PASSWORD=
7. Jalankan migrasi database
Bash
php artisan migrate
8. Buat symbolic link storage
Bash
php artisan storage:link
9. Build asset frontend
Bash
npm run build
10. Jalankan server lokal
Bash
php artisan serveAkses aplikasi di: `http://localhost:8000`
Email digunakan untuk fitur OTP 2FA pada login admin. Edit bagian ini di `.env`:
“`env
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=your_email@gmail.com
MAIL_PASSWORD=your_app_password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=your_email@gmail.com
MAIL_FROM_NAME=”Perpustakaan SMKN 40 Jakarta”
“`
> Untuk Gmail, gunakan **App Password** (bukan password akun biasa). Aktifkan 2FA di akun Google terlebih dahulu, lalu buat App Password di pengaturan keamanan akun.
—
| Fitur / Otoritas | 🧑💻 Admin | 👥 Siswa |
| Kelola Data Buku (CRUD) | ✅ Ya | ❌ Tidak |
| Kelola Kategori Buku (CRUD) | ✅ Ya | ❌ Tidak |
| Proses Pengembalian Buku | ✅ Ya | ❌ Tidak |
| Export Laporan (Excel & PDF) | ✅ Ya | ❌ Tidak |
| Melihat Katalog Buku | ✅ Ya | ✅ Ya |
| Keranjang Pinjam (Cart Buku) | ✅ Ya | ✅ Ya |
| Proses / Ajukan Peminjaman | ✅ Ya | ✅ Ya |
| Melihat Histori / Riwayat | ✅ Ya (Semua) | ✅ Ya (Pribadi) |
| Komunitas / Chat Ruang Obrolan | ✅ Ya | ✅ Ya |
| URL | Keterangan |
| / | Halaman utama (welcome) |
| /login | Halaman login |
| /register | Daftar sebagai siswa |
| /books | Katalog buku publik |
| /admin/dashboard | Dashboard admin |
| /siswa/katalog | Katalog buku siswa |
| /siswa/history | Riwayat peminjaman siswa |
| /siswa/cart | Keranjang peminjaman |
| /chat | Halaman chat komunitas |
| /admin/books/export | Export laporan (Excel/PDF) |
Aplikasi menggunakan SQLite secara default (file `database/database.sqlite`). Untuk produksi, disarankan beralih ke MySQL.
Tabel-tabel utama:
`users` — data pengguna + role + blacklist
`books` — data buku + stok + harga + e-book
`loans` — data peminjaman + denda + perpanjangan
`book_issues` — laporan kerusakan/kehilangan buku
`carts` & `cart_items` — keranjang peminjaman siswa
`posts` — pesan grup komunitas
`private_messages` — pesan pribadi antar pengguna
Developed by Lingga Keandre – Full-stack Developer