Source Code Sistem Booking Online Laravel: Cara Memilih

Telepon berdering saat Anda sedang melayani pelanggan, chat WhatsApp menumpuk berisi pertanyaan "besok jam 3 masih kosong?", lalu dua orang datang di jam yang sama karena jadwalnya...

Source Code Sistem Booking Online Laravel: Cara Memilih

Telepon berdering saat Anda sedang melayani pelanggan, chat WhatsApp menumpuk berisi pertanyaan "besok jam 3 masih kosong?", lalu dua orang datang di jam yang sama karena jadwalnya dicatat di dua tempat berbeda. Itulah masalah harian salon, klinik, lapangan olahraga, studio foto, dan usaha rental yang masih mengandalkan buku jadwal.

Sistem booking online menyelesaikan masalah itu dengan satu kalender yang menjadi sumber kebenaran. Artikel ini membahas cara kerja sistem semacam itu, modul yang wajib ada, desain database yang mencegah double-booking, cara menjalankan source code berbasis Laravel di komputer lokal, serta checklist sebelum Anda membeli source code apa pun.

Masalah yang Diselesaikan Sistem Booking

Sebelum melihat fitur, pahami dulu tiga kerugian yang ingin ditekan:

  • Waktu admin habis untuk konfirmasi jadwal. Setiap tanya-jawab soal slot kosong adalah pekerjaan manual yang bisa diganti halaman booking.
  • Double-booking. Terjadi ketika jadwal dicatat di lebih dari satu tempat, atau ketika dua orang memesan slot yang sama hampir bersamaan.
  • No-show. Pelanggan memesan lalu tidak datang tanpa kabar, sehingga slot terbuang dan staf menganggur.

Sistem yang baik tidak sekadar memindahkan buku jadwal ke layar. Ia memaksa aturan bisnis berjalan otomatis: durasi layanan, jam operasional, ketersediaan staf, dan kebijakan uang muka.

Modul Inti dan Alur Datanya

Hampir semua sistem booking jasa terdiri dari enam modul berikut.

1. Manajemen jadwal dan ketersediaan

Ini jantung sistem. Kalender harus menampilkan slot kosong secara real-time dan menolak pesanan yang bertabrakan. Slot dihitung dari jam operasional dikurangi jadwal yang sudah terisi, dengan memperhitungkan durasi layanan. Potong rambut 30 menit dan creambath 90 menit tidak boleh diperlakukan sama.

2. Manajemen staf dan layanan

Bisnis jasa sering punya beberapa staf dengan keahlian berbeda. Pelanggan sebaiknya bisa memilih staf favorit, dan sistem otomatis hanya menampilkan slot milik staf tersebut. Relasi staf-layanan menentukan siapa bisa mengerjakan apa.

3. Notifikasi otomatis

Konfirmasi langsung setelah booking, lalu pengingat menjelang jadwal lewat email atau WhatsApp, lengkap dengan tautan untuk menjadwal ulang. Pengingat adalah cara paling murah untuk menekan no-show.

4. Pembayaran dan uang muka

Meminta DP saat booking menyaring pemesan yang tidak serius dan melindungi pendapatan saat ada pembatalan mendadak. Jika Anda ingin menghubungkannya ke payment gateway, pelajari polanya di integrasi payment gateway Midtrans di Laravel.

5. Dashboard dan laporan

Pemilik perlu angka: jumlah booking per hari, jam tersibuk, layanan terpopuler, dan tingkat no-show. Data ini dipakai untuk menyusun shift staf dan merancang promo di jam sepi.

6. Halaman pemesanan untuk pelanggan

Semakin sedikit langkah, semakin banyak booking yang selesai. Alur ideal: pilih layanan, pilih staf (opsional), pilih slot, isi nama dan nomor, bayar DP. Tampilan harus nyaman di ponsel karena sebagian besar pelanggan memesan dari sana.

Alur datanya kira-kira begini: pelanggan memilih layanan dan slot, sistem mengunci slot sementara, pelanggan membayar DP, status booking berubah dari pending menjadi confirmed, lalu job terjadwal mengirim pengingat. Jika DP tidak dibayar dalam batas waktu, slot dilepas kembali.

Rekomendasi Desain Tabel

Berikut skema minimal yang cukup untuk satu lokasi usaha dengan banyak staf. Kalau Anda belum terbiasa membuat relasi tabel, baca dulu merancang ERD sederhana untuk aplikasi.

TabelKolom pentingFungsi
servicesname, duration_minutes, price, deposit_amountDaftar layanan dan durasinya
staffname, phone, is_activeData staf yang bisa dipesan
service_staffservice_id, staff_idSiapa bisa mengerjakan layanan apa
working_hoursstaff_id, weekday, start_time, end_timeJam kerja per staf per hari
bookingscustomer_name, phone, service_id, staff_id, starts_at, ends_at, statusJadwal yang sudah dipesan
paymentsbooking_id, amount, method, paid_atCatatan DP dan pelunasan

Kolom ends_at sengaja disimpan, bukan dihitung ulang setiap kali, agar pengecekan bentrok cukup dengan satu query. Logika anti double-booking di Laravel 11 bisa ditulis seperti ini:

use App\Models\Booking;
use Illuminate\Support\Facades\DB;

public function store(StoreBookingRequest $request)
{
    $data = $request->validated();

    return DB::transaction(function () use ($data) {
        // Kunci baris jadwal staf ini agar dua request tidak lolos bersamaan
        $bentrok = Booking::where('staff_id', $data['staff_id'])
            ->whereIn('status', ['pending', 'confirmed'])
            ->where('starts_at', '<', $data['ends_at'])
            ->where('ends_at', '>', $data['starts_at'])
            ->lockForUpdate()
            ->exists();

        if ($bentrok) {
            abort(409, 'Slot ini baru saja dipesan orang lain.');
        }

        return Booking::create($data + ['status' => 'pending']);
    });
}

Kenapa kondisinya starts_at < ends_at baru dan ends_at > starts_at baru? Karena dua rentang waktu dianggap bertabrakan bila masing-masing dimulai sebelum yang lain selesai. Rumus ini menangkap semua kasus tumpang tindih, termasuk jadwal yang menempel persis di tengah. lockForUpdate() di dalam transaksi mencegah dua pelanggan yang menekan tombol pada detik yang sama sama-sama lolos.

Menjalankan Source Code di Komputer Lokal

Langkah umumnya hampir sama untuk source code Laravel mana pun:

  1. Pastikan PHP 8.2+, Composer, dan MySQL terpasang. Panduan lengkapnya ada di setup environment PHP, Composer, dan MySQL.
  2. Ekstrak source code, lalu jalankan composer install di folder proyek.
  3. Salin .env.example menjadi .env, isi koneksi database, lalu jalankan php artisan key:generate.
  4. Jalankan php artisan migrate --seed untuk membuat tabel dan data contoh.
  5. Jalankan php artisan serve dan coba alur booking dari sisi pelanggan dan sisi admin.
  6. Untuk pengingat otomatis, aktifkan scheduler dengan php artisan schedule:work saat lokal, atau cron * * * * * php artisan schedule:run di server.

Kustomisasi yang Aman

Hampir setiap bisnis jasa akan mengubah sesuatu: menambah field alamat untuk layanan panggilan, mengganti teks notifikasi, atau mengubah aturan DP. Prinsip utamanya:

  • Buat migration baru untuk kolom tambahan, jangan mengedit migration lama yang sudah dijalankan.
  • Simpan aturan bisnis (persentase DP, batas waktu bayar, jeda antar-jadwal) di tabel setting atau file config, bukan ditulis langsung di controller.
  • Gunakan Git sejak hari pertama agar setiap perubahan bisa dibandingkan dan dibatalkan.

Teknik lebih rinci dibahas di cara kustomisasi source code tanpa merusak.

Checklist Sebelum Membeli Source Code Booking

  • Ada pengecekan bentrok di sisi server, bukan hanya slot yang disembunyikan di tampilan.
  • Durasi layanan dan jam operasional bisa diatur tanpa mengedit kode.
  • Mendukung banyak layanan dan banyak staf.
  • Notifikasi konfirmasi dan pengingat bisa dijadwalkan.
  • Status booking jelas: pending, confirmed, cancelled, completed, no-show.
  • Struktur kode mengikuti konvensi Laravel dan ada file README cara instalasi.
  • Ada demo yang bisa Anda coba dari ponsel.
  • Jelas versi Laravel dan PHP yang dipakai.

Kesalahan Umum dan Cara Memperbaikinya

KesalahanAkibatPerbaikan
Kalender tidak sinkron dengan jadwal offlineDouble-bookingSemua pesanan via telepon juga diinput ke sistem yang sama
Tidak ada pengingatNo-show tinggiKirim pengingat H-1 dan beberapa jam sebelum jadwal
Formulir terlalu panjangPelanggan batal di tengahMinta data minimum: nama, nomor, slot
Zona waktu server salahJadwal bergeser beberapa jamAtur APP_TIMEZONE sesuai lokasi usaha

Keterbatasan yang Perlu Disadari

Source code booking siap pakai biasanya dirancang untuk kasus umum. Kebutuhan seperti banyak cabang dengan stok ruangan, paket langganan berulang, atau sinkronisasi dua arah dengan Google Calendar sering kali belum ada dan perlu dikembangkan sendiri. Anda juga tetap bertanggung jawab atas hosting, backup database, dan pembaruan keamanan. Sebagai contoh perhitungan kasar, bila admin Anda menghabiskan sekitar dua jam sehari untuk konfirmasi jadwal, angka itulah yang bisa dibandingkan dengan biaya kustomisasi dan hosting untuk menilai apakah sistem ini layak.

Bila Anda ingin melihat contoh implementasi berbasis Laravel, katalog di GudangCode bisa menjadi titik awal untuk membandingkan struktur kodenya dengan checklist di atas.

Ingin langsung mempraktikkannya?

Buat akun gratis untuk mengunduh contoh aplikasi Laravel, menyimpan tutorial favorit, dan mencoba kursus. Gratis, bisa daftar dengan akun Google.

Daftar Gratis Lihat katalog aplikasi
Yudhi
Ditulis oleh
Yudhi
Founder & Lead Developer, GudangCode

Yudhi adalah founder GudangCode dan developer Laravel dengan pengalaman membangun puluhan sistem informasi bisnis siap pakai — mulai dari POS, HRIS, hingga aplikasi manajemen. Ia menulis panduan dan artikel di GudangCode untuk membantu developer Indonesia menjalankan, memahami, dan men-deploy source code Laravel dengan benar.

Laravel PHP MySQL Sistem Informasi Bisnis
Lihat semua artikel Yudhi
Source Code Booking Source Code
Bacaan Paling Dicari
📚 Free Learning Hub

Learn Coding for Free at DhieCoderWeb

Explore Laravel, PHP, JavaScript tutorials, source code, web development guides, and practical programming tips.

DhieCoderWeb
100+
Tutorials
Free
Learning
SEO
Tips
Visit Dhiecoderweb.com →