POSITA adalah aplikasi Kasir (Point of Sales) modern yang dirancang khusus untuk membantu UMKM retail mengelola penjualan, stok konsinyasi, dan pelaporan harian. Aplikasi ini dibangun dengan arsitektur Modern Monolith yang memisahkan logika operasional kasir (Frontend) dan manajemen pusat (Admin Panel).
Project ini dibangun menggunakan teknologi terkini di ekosistem Laravel:
- Backend Framework: Laravel 12
- Frontend Framework: Vue.js 3 (via Inertia.js)
- Admin Panel: FilamentPHP v3 (Super Admin Dashboard)
- Database: MySQL
- Styling: Tailwind CSS 4.0
- Audit Trail: Spatie Activitylog
- Authentication: Laravel Breeze (Customized with Role-based Guards)
Untuk menjaga kode tetap bersih, mudah di-maintain, dan scalable, project ini menerapkan beberapa Design Patterns dan prinsip Domain-Driven Design (DDD) ringan:
Kami memindahkan logika bisnis yang kompleks dari Controller ke dalam Action Classes. Hal ini memastikan prinsip DRY (Don't Repeat Yourself), di mana logika yang sama bisa dipanggil baik dari controller Vue maupun Filament.
- Lokasi:
app/Actions/ - Contoh:
StartDailyShopAction: Menangani validasi dan pembukaan sesi toko harian.CloseDailyShopAction: Menghitung varian kas, rekap penjualan, dan menutup sesi.
Untuk menghindari "Fat Controller", kami menggunakan ViewModel untuk mempersiapkan data yang akan dikirim ke tampilan (Inertia/Vue). ViewModel membungkus data dari berbagai model menjadi satu objek yang rapi.
- Lokasi:
app/ViewModels/ - Contoh:
PosDashboardViewModelmenyiapkan data mitra, sesi aktif, dan statistik harian untuk dashboard kasir.
Pencatatan log aktivitas (Audit Trail) dilakukan secara otomatis menggunakan Observer Pattern. Controller tidak perlu tahu tentang proses logging.
- Lokasi:
app/Observers/ - Contoh:
DailyConsignmentObserverotomatis mencatat log ke tabelactivity_logsetiap kali toko dibuka atau ditutup.
Sistem login dipisahkan secara ketat untuk keamanan:
- Super Admin: Hanya bisa login via
/admin(Filament Panel). - Retailer (Kasir): Hanya bisa login via
/login(Inertia UI) dan akan di-redirect jika mencoba akses admin.
app/
├── Actions/ <-- Logika Bisnis (Buka/Tutup Toko)
├── Filament/ <-- Admin Panel Resources
├── Http/
│ ├── Controllers/ <-- Controller Tipis (Hanya memanggil Action)
│ └── Middleware/ <-- Proteksi Role
├── Models/
├── Observers/ <-- Otomasi Activity Log
└── ViewModels/ <-- Penyiapan Data View
Pengembangan fitur dibagi berdasarkan modul spesifik untuk efisiensi kerja:
- Tanggung Jawab: Integrasi sistem, keamanan, dan manajemen role.
- Implementasi:
- Refactoring kode menerapkan Design Patterns (Action, ViewModel, Observer).
- Membuat proteksi Middleware & Login Redirect (Admin vs Retailer).
- Implementasi
spatie/activitylogpada Filament (ActivityLogResource). - Setup Server & Deployment.
- Tanggung Jawab: Alur pembukaan toko dan input stok awal.
- Implementasi:
- Backend: Logic
StartDailyShopAction. - Frontend: Halaman
Pos/OpenShop.vue. - Fitur: Input modal awal, pemilihan mitra, dan kalkulasi harga jual otomatis (Markup logic).
- Tanggung Jawab: Rekapitulasi harian dan penutupan buku.
- Implementasi:
- Backend: Logic
CloseDailyShopAction. - Frontend: Halaman
Pos/CloseShop.vue. - Fitur: Input uang aktual, kalkulasi selisih (variance), dan ringkasan penjualan harian.
- Tanggung Jawab: Antarmuka pengguna dan pengalaman visual.
- Implementasi:
- Styling Global: Menentukan palet warna (Biru/Orange) dan Typography.
- Komponen: Membuat
ToastNotification.vue, Card Layout, dan responsivitas mobile. - Frontend: Memastikan transisi antar halaman (Inertia) berjalan mulus.
Ikuti langkah-langkah berikut untuk menjalankan project di local environment Anda:
- PHP >= 8.4
- Composer
- Node.js & NPM
- MySQL
git clone [https://github.com/username/posita.git](https://github.com/username/posita.git)
cd posita
Install paket PHP dan JavaScript:
composer install
npm install
Salin file .env.example menjadi .env:
cp .env.example .env
Buka file .env dan sesuaikan konfigurasi database Anda:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=retailer
DB_USERNAME=root
DB_PASSWORD=
Generate application key dan jalankan migrasi database beserta seeder (data dummy):
php artisan key:generate
php artisan migrate:fresh --seed
> PENTING: Perintah --seed wajib dijalankan agar Anda memiliki akun Super Admin dan Retailer untuk login.
Anda perlu menjalankan dua terminal terpisah:
Terminal 1 (Vite Development Server):
npm run dev
Terminal 2 (Laravel Server):
php artisan serve
Akses aplikasi di: http://localhost:8000
Gunakan akun berikut untuk pengujian sistem (dibuat oleh Seeder):
- URL:
http://localhost:8000/admin - Email:
admin@posita.test - Password:
password - Fitur: Manajemen User, Master Data Partner, Monitoring Activity Log.
- URL:
http://localhost:8000/login - Email:
retailer@posita.test - Password:
password - Fitur: Buka Toko, Transaksi, Tutup Toko.