Pengelolaan inventaris laboratorium teknologi sering kali menghadapi kendala klasik: pencatatan peminjaman manual yang rentan tercecer, ketidakjelasan status ketersediaan alat secara real-time, hingga antarmuka sistem yang kaku. Melalui studi kasus ini, kita akan membedah arsitektur pembangunan aplikasi web peminjaman alat laboratorium yang ringan, interaktif, dan responsif menggunakan integrasi Tailwind CSS dan manipulasi Document Object Model (DOM) JavaScript murni.
1. Arsitektur Dasar & Integrasi Tailwind CSS
Fondasi aplikasi dibangun menggunakan berkas tunggal berstruktur HTML5 standar (index.html). Pendekatan ini memfasilitasi rapid prototyping dan implementasi mandiri tanpa dependensi bundler yang kompleks. Kerangka kerja antarmuka dirancang memanfaatkan CDN utilitas Tailwind CSS di bagian <head>, memungkinkan penataan hierarki visual, margin, grid responsif, dan palet warna status secara konsisten langsung dari class HTML.
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Sistem Peminjaman Alat Lab</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-slate-900 text-slate-100 min-h-screen p-6">
<!-- Layout Utama -->
</body>
</html>2. Desain Antarmuka: Katalog Inventaris & Formulir Pengajuan
Antarmuka pengguna dipecah menjadi tata letak dua kolom (two-column layout) berbasis Flexbox/Grid agar alur interaksi praktisi menjadi intuitif:
- Katalog Inventaris (Sisi Kiri/Utama): Panel visual untuk me-render kartu-kartu inventaris perangkat keras lab (seperti mikrokontroler Arduino Uno, modul kamera AI, dan sensor IoT). Setiap kartu dilengkapi indikator lencana status ketersediaan (Tersedia berwarna hijau emerald vs. Dipinjam berwarna slate redup).
- Formulir Pengajuan (Sisi Kanan/Sidebar): Panel pengajuan interaktif yang memuat input nama peminjam, dropdown select alat yang tersedia, pemilih tanggal pengembalian (date picker), serta tombol aksi submit dengan umpan balik visual instan.

3. Arsitektur State Sisi Klien (Client-Side State Management)
Untuk menjaga performa aplikasi tetap cepat tanpa jeda reload halaman, status data dikelola secara lokal pada sisi klien menggunakan array JavaScript terstruktur:
// State Management Inventaris Lab
const inventory = [
{ id: 1, nama: "Arduino Uno R3", kategori: "Mikrokontroler", status: "Tersedia" },
{ id: 2, nama: "ESP32 Wi-Fi + BLE DevKit", kategori: "IoT Module", status: "Tersedia" },
{ id: 3, nama: "Kamera AI Vision Kit", kategori: "Sensor & Optik", status: "Tersedia" },
{ id: 4, nama: "Sensor Ultrasonik HC-SR04", kategori: "Sensor", status: "Dipinjam" }
];Array inventory berfungsi sebagai sumber kebenaran tunggal (single source of truth) data sesi. Setiap mutasi data—baik saat alat dipinjam maupun dikembalikan—hanya memodifikasi objek di dalam memori sebelum memicu siklus pembaruan tampilan.
4. Logika Re-rendering & Validasi Formulir
Dua fungsi inti JavaScript bertindak sebagai jembatan antara logika state dan representasi DOM:
- Fungsi
renderCatalog(): Melakukan iterasi terhadap data inventaris, memetakan setiap item ke dalam blok kartu Tailwind, dan menyematkan atribut data dinamis. Jika status alat bernilai “Tersedia”, sistem memberikan aksen hijau terang; jika “Dipinjam”, sistem menurunkan opasitas dan menonaktifkan interaksi langsung. - Fungsi
populateDropdown(): Secara cerdas hanya menyaring dan menampilkan alat yang berstatus “Tersedia” pada pilihan dropdown. Ini mencegah kesalahan logika peminjaman ganda (*double booking*) sejak sisi antarmuka pengguna.

5. Penanganan Event & Sinkronisasi Real-Time Tanpa Reload
Saat pengawas lab atau peminjam menekan tombol Submit, Event Listener mencegat aksi default peramban via e.preventDefault(). Alur pemrosesannya berjalan runtut:
- Membaca data input peminjam (Nama, ID Alat, Tanggal).
- Mencari referensi objek terkait di dalam array
inventoryberdasarkanid. - Memperbarui atribut
statusobjek menjadi “Dipinjam”. - Memanggil kembali
renderCatalog()danpopulateDropdown()secara berurutan.
Hasilnya, kartu alat yang baru saja dipinjam secara seketika berganti status visual, opsi alat tersebut otomatis hilang dari dropdown form berikutnya, dan pengguna mendapatkan konfirmasi visual langsung tanpa adanya kedipan (flicker) akibat reload halaman.

6. Kesimpulan & Peluang Pengembangan Arsitektur
Pola perancangan berbasis komponen ringan ini membuktikan bahwa tanpa perlu kerangka kerja frontend berskala besar (seperti React atau Vue), kombinasi Tailwind CSS dan DOM Manipulation JavaScript sudah lebih dari cukup untuk menghasilkan aplikasi internal lab yang cepat, elegan, dan fungsional.
Untuk pengembangan tahap berikutnya, arsitektur ini sangat mudah diekspansi ke arsitektur client-server penuh: cukup mengganti array lokal inventory dengan panggilan fetch() ke REST API backend (seperti FastAPI atau Express.js) serta menambahkan persistensi database relasional.
Artikel studi kasus ini ditulis oleh Abrar Arabani, praktisi pengembang antarmuka web dan kontributor teknologi di DudukDulu.com. Seluruh kode dan alur implementasi telah diverifikasi melalui pengujian operasional lab internal.
















Leave a Reply