Aplikasi POS (Point of Sale) untuk Coffee Shop
Gabung Saluran WhatsApp Papicode
Update source code terbaru langsung ke HP kamu, nggak pakai spam.
Deskripsi
Aplikasi kasir (POS) khusus coffee shop: dari transaksi kasir, manajemen menu & variant/add-on, stok bahan baku dengan resep otomatis, shift kasir, cetak struk thermal, sampai laporan penjualan semua dalam satu sistem terintegrasi. Dibangun sepenuhnya dengan PHP Native (arsitektur MVC buatan sendiri, tanpa Laravel/framework lain, tanpa Node.js sebagai backend), untuk kebutuhan operasional satu coffee shop (bukan produk SaaS, tanpa multi-tenant, tanpa skema langganan). Mencakup seluruh siklus transaksi harian mulai dari buka shift, transaksi kasir dengan variant & add-on, pengurangan stok otomatis berbasis resep, sampai tutup shift dengan rekonsiliasi kas, lengkap dengan role-based access control (Admin/Manager/Cashier) dan sistem printer thermal yang persisten lintas halaman.
Sistem
Admin mendaftarkan kategori dan produk menu lengkap dengan foto, harga, variant (misalnya Size/Temperature/Sugar), dan add-on/topping, serta mengatur resep (BOM) bahan baku per produk di menu Inventory & Recipes. Setiap hari kasir wajib membuka shift dengan mengisi modal kas awal sebelum bisa memproses transaksi apa pun. Di halaman POS, kasir memilih produk lewat product grid yang bisa difilter berdasarkan kategori/pencarian/ketersediaan secara real-time, memilih variant & add-on lewat modal konfigurasi, lalu menambahkannya ke keranjang lengkap dengan diskon, pajak, dan service charge yang terhitung otomatis. Order bisa di-hold untuk dilayani nanti dan di-recall kembali. Saat pembayaran (Cash/QRIS/Debit/Credit/E-Wallet) diselesaikan, sistem membuat nomor transaksi otomatis (format CS-YYYYMMDD-XXXXX), menyimpan seluruh detail transaksi dalam satu database transaction (BEGIN/COMMIT/ROLLBACK) sehingga jika stok bahan baku tidak mencukupi, seluruh transaksi dibatalkan tanpa data setengah jadi lalu stok bahan baku otomatis berkurang sesuai resep produk yang terjual. Struk dapat langsung dicetak ke printer thermal 58mm/80mm lewat koneksi Web Bluetooth atau Local Print Bridge yang tersambung persisten selama sesi browser, tidak perlu connect ulang setiap pindah halaman. Di akhir hari, kasir menutup shift dengan memasukkan uang fisik hasil hitungan, dan sistem otomatis menghitung selisih terhadap kas yang seharusnya. Admin memantau semuanya lewat Dashboard real-time, riwayat transaksi dengan filter & cetak ulang struk, serta Report Center untuk ekspor laporan ke CSV.
Fitur
- Report Center 7 jenis laporan (sales, produk, kategori, pembayaran, kasir, shift, inventory)
- Export laporan ke CSV asli (dibuat murni dengan PHP)
- Manajemen user dengan role Admin/Manager/Cashier (RBAC diperiksa di server, bukan cuma UI)
- Reset password oleh Admin
- Pengaturan coffee shop: nama, logo, alamat, pajak, service charge, currency, ukuran kertas struk
- Dark mode & light mode dengan CSS variables, preferensi tersimpan di localStorage
- Responsive penuh: desktop, tablet kasir, dan mobile
- PWA: bisa di-install, manifest & service worker untuk cache asset (transaksi tetap butuh koneksi server)
- Database backup: download file .sql lengkap (struktur + data) langsung dari browser
- Keamanan: CSRF token, escaping XSS, prepared statement PDO (anti SQL injection), validasi upload, session aman (httponly, regenerate ID saat login)
- Kasir/POS dengan product grid, pencarian & filter real-time tanpa reload
- Manajemen produk lengkap dengan upload gambar (validasi MIME asli, bukan hanya ekstensi)
- Manajemen kategori menu
- Variant produk configurable (Size/Temperature/Sugar, dll) — tidak di-hardcode
- Add-on/topping dengan harga sendiri, bisa dipasangkan ke produk manapun
- Keranjang transaksi dengan diskon, pajak, dan service charge otomatis
- Hold order & recall order untuk melayani banyak customer bergantian
- Dine In (nomor meja) & Take Away dengan nama customer opsional
- Pembayaran Cash (dengan hitung kembalian otomatis), QRIS, Debit, Credit, E-Wallet
- Nomor transaksi otomatis format CS-YYYYMMDD-XXXXX
- Database transaction aman (BEGIN/COMMIT/ROLLBACK) — transaksi gagal total jika stok tidak cukup
- Struk thermal 58mm/80mm, bisa cetak ulang (reprint) dari riwayat transaksi
- Printer service abstraction: Web Bluetooth (BLE) + Local Print Bridge untuk printer non-BLE
- Koneksi printer persisten lintas halaman, status CONNECTED/DISCONNECTED jelas di topbar
- Riwayat transaksi dengan filter tanggal, kasir, tipe order, metode pembayaran, dan pencarian
- Shift kasir: buka/tutup dengan rekonsiliasi kas otomatis (expected vs actual cash)
- Manajemen inventory bahan baku: stock in/out/adjustment dengan riwayat pergerakan stok
- Resep/BOM per produk — stok bahan baku otomatis berkurang sesuai resep saat terjual
- Peringatan stok menipis (low stock alert) di Dashboard & Inventory
- Pengaturan Allow Negative Stock (opsional, default tidak diizinkan)
- Dashboard real-time: sales 7 hari, penjualan per kategori, metode pembayaran (chart vanilla JS)
- Top selling products & recent transactions berbasis data asli
Panduan Instalasi
Instalasi deengan XAMPP
- Copy folder
coffeshopkeC:\xampp\htdocs\coffeshop(atau lokasi htdocs Anda). - Jalankan Apache dan MySQL dari XAMPP Control Panel.
- Buka phpMyAdmin, buat database baru bernama
coffee_pos(atau biarkan kosong — file SQL sudah membuat database-nya sendiri), lalu importdatabase/database.sql. Atau via terminal:mysql -u root < database/database.sql - Edit
config/database.phpjika kredensial MySQL Anda berbeda dari default XAMPP (roottanpa password). - Karena XAMPP menyajikan seluruh folder project (bukan hanya
public/), setbase_pathdiconfig/app.phpmenjadi path ke folder public, contoh:'base_path' => '/coffeshop/public', - Akses aplikasi di
http://localhost/coffeshop/public/login
Alternatif (lebih rapi): buat Virtual Host Apache yang document root-nya langsung ke coffeshop/public, lalu base_path cukup ''.
Instalasi dengan Laragon
- Copy folder
coffeshopkeC:\laragon\www\coffeshop. - Laragon otomatis membuat virtual host
coffeshop.test. Pastikan document root Laragon mengarah kepublic/(Laragon mendukung auto-detectpublic/sebagai web root untuk banyak project PHP modern — jika tidak, buat custom site dengan document rootcoffeshop/public). - Start Laragon (Apache + MySQL).
- Import database: buka HeidiSQL bawaan Laragon atau terminal
mysql -u root < database/database.sql. - Sesuaikan
config/database.phpbila perlu. - Jika document root sudah langsung ke
public/, setbase_pathdiconfig/app.phpmenjadi''. - Akses
http://coffeshop.test/login
Menjalankan dengan PHP Built-in Server (development cepat)
php -S 127.0.0.1:8000 -t public public/router.php
public/router.php hanya dipakai untuk built-in server (agar asset statis tetap ter-serve dengan benar). Tidak dipakai oleh Apache. Set base_path ke ''. Akses http://127.0.0.1:8000/login.
Konfigurasi Database
Edit config/database.php:
return [
'driver' => 'mysql',
'host' => '127.0.0.1',
'port' => '3306',
'database' => 'coffee_pos',
'username' => 'root',
'password' => '',
'charset' => 'utf8mb4',
];
Kredensial database TIDAK pernah tampil ke browser — file ini dilindungi .htaccess (deny all) dan berada di luar public/.
Konfigurasi Aplikasi
config/app.php berisi:
env:development(menampilkan error detail) atauproduction(menyembunyikan error, log kestorage/logs/app.log)base_path: subfolder aplikasi jika tidak di root domainupload: path folder upload, ukuran maksimal, tipe file yang diizinkan
Login Default (Seed Data)
Semua akun seed memakai password yang sama: password123
username : admin, manager, cashier
Catatan: aplikasi ini memakai MySQL sebagai database, sehingga wajib menjalankan langkah import skema di atas sebelum bisa digunakan. Untuk fitur cetak struk lewat printer thermal Bluetooth, gunakan browser Chrome/Edge (Web Bluetooth API tidak didukung Firefox/Safari); untuk printer non-Bluetooth-LE, gunakan mode Local Print Bridge yang sudah dijelaskan lengkap di halaman Printer Settings & README.md. Kredensial login default hanya untuk keperluan development segera ganti password lewat menu Users setelah instalasi di lingkungan production.
