Simple & Efficient Point of Sale (PoS) System
KasirKu adalah aplikasi Point of Sale (PoS) yang dibuat untuk membantu pemilik usaha mengelola transaksi kasir dengan lebih mudah.
Jika ingin mencoba aplikasinya, kamu bisa mengakses demo berikut: https://kasirku.duckdns.org
Gunakan akun berikut untuk login:
Username: admin
Password: admin
- Fitur
- Requrements
- Cara Menjalankan
- Configuration
- Akses
- QnA
- Q: Kenapa Anda membuat aplikasi ini?
- Q: Target pengguna KasirKu itu siapa aja?
- Q: Kenapa KasirKu dibuat open-source?
- Q: Kenapa orang harus menggunakan KasirKu dibanding aplikasi kasir lain?
- Q: Dulu namanya
aplikasikasir. Kenapa diganti menjadiKasirKu? - Q: Dulu project ini menggunakan bahasa C. Kenapa sekarang diganti ke Bun.JS?
- Q: Berarti versi C Programming-nya hilang dong?
- Q: Kenapa waktu itu anda menggunakan bahasa C?
- Q: Kapan anda melanjutkan project ini dan mengapa anda melanjutkan project ini?
- Q: Kalo misalnya Anda menggunakan Bun.JS, berarti dependencies / resource nya akan berat dong?
- Q: Pelajaran apa yang bisa diambil dari project ini?
- Credit
- Point of Sale System
Mendukung proses transaksi penjualan barang secara cepat dan sederhana. - Manajemen Barang
Menambahkan, mengedit, dan menghapus data barang yang dijual. - Dashboard
Dashboard interaktif yang menampilkan statistik toko secara realtime, termasuk:- Informasi Total Hari Ini (Total Barang Terjual, Penjualan, Keuntungan, Pengeluaran, Pendapatan)
- Informasi Barang Kosong
- Barang Total Terjual
- Pembukuan
Mencatat transaksi keuangan toko termasuk pemasukan, pengeluaran, serta perhitungan keuntungan dari hasil penjualan (Laporan). - User Management
Mengelola akun pengguna dalam sistem, termasuk:- Mengubah profil pengguna seperti foto profil, username, dan password
- Menambahkan, mengedit, dan menghapus pengguna
- Mengatur role dan permission untuk membatasi akses ke fitur tertentu
- Realtime Update (Server-Sent Event)
Perubahan data dapat langsung tersinkron secara realtime tanpa reload halaman. - Single Page Application (SPA)
Navigasi halaman cepat tanpa reload penuh. - Responsive UI
Antarmuka berbasis AdminLTE yang nyaman digunakan di berbagai ukuran layar. - Dark Mode
Mendukung tampilan terang dan gelap. - Session Authentication
Sistem login dengan session untuk keamanan akses. - Assets Optimization & Compression
File HTML dan JavaScript di-minify serta dikompresi menggunakan Brotli untuk mengurangi ukuran file, menghemat bandwidth, dan meningkatkan kecepatan loading halaman. - Minimal Dependency
Backend ringan menggunakan Bun dan TypeScript dengan dependensi minimal. - Dukungan Multi Database
Mendukung SQLite, MySQL, dan PostgreSQL. - Docker Support
Dapat dijalankan dengan mudah menggunakan container Docker.
- CPU: 1 vCPU (64 bit)
- RAM: 256 MB (512 MB recommended)
- Storage: 1 GB (5 GB recommended)
- OS: Linux / Windows / macOS / Android (Termux)
KasirKu dapat dijalankan di browser modern seperti:
- Chrome
- Firefox
- Edge
- Safari
Pastikan Bun sudah terinstall.
bun install
bun run index.ts
Demi "environment ready". Sudah di siapkan file docker-compose yang sudah termasuk database postgre.
Pastikan file .env ada karena docker akan membaca file configurasi dari file .env tersebut
docker compose up -d
Untuk menghentikan
docker compose down
KasirKu menggunakan file .env yang berada di root project. Silahkan copy dari file .env.example lalu sesuaikan valuenya sesuai kebutuhan
cp .env.example .env
| Key | Type | Default | Description |
|---|---|---|---|
listen_port |
Number |
443 |
Port server HTTPS. (Alt: 8443) |
compile_html |
Boolean |
false |
Compile HTML saat startup jika true. |
db_type |
String |
sqlite |
Jenis database: sqlite, mysql, atau postgresql. |
db_name |
String |
kasirku |
Nama database (disarankan lowercase). |
Digunakan jika db_type: "postgresql"
- Host:
postgresql.host(Contoh:127.0.0.1) - Port:
postgresql.port(Default:5432) - User:
postgresql.user - Password:
postgresql.password
Digunakan jika db_type: "mysql"
- Host:
mysql.host(Contoh:127.0.0.1) - Port:
mysql.port(Default:3306) - User:
mysql.user - Password:
mysql.password
- Jika menggunakan SQLite, konfigurasi MySQL dan PostgreSQL akan diabaikan.
- Sistem hanya akan membaca konfigurasi yang sesuai dengan nilai
db_type.
Jika config.json tidak ditemukan saat startup, KasirKu akan:
- Menanyakan konfigurasi via CLI.
- Menampilkan preview konfigurasi.
- Membuat file
config.jsonsecara otomatis.
Buka https://localhost di browser, dan untuk default Username / Password: admin / admin.
A: Orang tua saya mempunyai toko, dan dari situ saya kepikiran untuk membuat aplikasi kasir sendiri.
Akhirnya pada saat saya masih SMK kelas 2, saya mulai bikin aplikasi ini.
A: Target pengguna KasirKu adalah:
- Toko kecil / warung
- UMKM (Usaha Mikro, Kecil, dan Menengah)
Aplikasi ini dibuat supaya bisa membantu pemilik usaha kecil dalam mencatat dan mengelola penjualan dengan cara yang lebih mudah dan simpel.
A: Saya membuat project ini open-source karena beberapa alasan:
- Supaya aplikasi ini bisa terus berkembang
- Supaya orang lain bisa belajar dari project ini
- Supaya orang lain juga bisa berkontribusi dan membantu mengembangkan project ini
- Supaya project ini bisa berguna bagi lebih banyak orang
A: Karena aplikasi KasirKu dibuat dengan fokus pada kesederhanaan, performa, dan kemudahan penggunaan.
Beberapa keunggulannya:
- Ringan dan tidak membutuhkan resource besar
- Open-source, jadi siapa saja bisa melihat dan mempelajari source code-nya
- Bisa berjalan di hardware low-end (misalnya perangkat lama)
- Realtime data, jadi tidak perlu refresh halaman (menggunakan SSE)
- Menggunakan SPA (Single Page Application), sehingga perpindahan halaman terasa lebih cepat tanpa reload
A: Menurut saya... nama itu terasa seperti hanya deskripsi aplikasi saja, bukan sebuah brand.
Karena itu saya mengganti namanya menjadi KasirKu, supaya:
- Lebih mudah diingat
- Terasa seperti sebuah brand
- Lebih enak disebut
A: Karena... jujur saja lumayan susah wkwkwk 😂
Tapi bukan cuma itu aja alasannya.
Beberapa alasan kenapa saya pindah dari C ke Bun.JS:
- Code C cukup sulit dibaca dan dikembangkan
- Orang lain jadi lebih sulit berkontribusi ke project
- Development bisa jadi jauh lebih lama
Kalau project ini tetap menggunakan C sampai sekarang, kemungkinan besar perkembangannya akan jauh lebih lambat.
Akhirnya saya memutuskan untuk menggunakan Bun.JS.
Kenapa Bun.JS?
Karena:
- Mirip seperti Node.JS
- Lebih mudah untuk dikembangkan
- Performa sangat cepat
- Development experience lebih enak
A: Tidak hilang.
Versi C Programming masih ada, tetapi sudah dipindahkan ke branch legacy.
A: Saya menggunakan bahasa C pada waktu itu karena saya ingin mencoba belajar bahasa C dengan cara membuat aplikasi ini.
Dan ternyata... susah juga 😂
Akhirnya saya memutuskan untuk beralih ke Bun.JS, wkwk.
Tapi bukan cuma itu alasannya. Saya juga sempat memilih C Programming karena beberapa hal:
- Supaya aplikasinya bisa berjalan di hardware low-end (seperti Set-Top Box bekas, Android bekas, dan perangkat lama lainnya)
- Waktu itu saya juga lagi tergila-gila dengan optimasi performa
Dan ternyata... project ini malah mangkrak sekitar 1 tahun.
Akhirnya setelah cukup lama berhenti, saya memutuskan untuk melanjutkan project ini lagi 😂
A: Saya mulai melanjutkan project ini sekitar bulan puasa, kira-kira 3 Maret 2026.
Saya melanjutkan project ini dengan beberapa alasan:
- Untuk portofolio saya
- Supaya aplikasi ini bisa bermanfaat dan digunakan oleh orang lain
- Mengisi waktu luang dengan membuat project
- Belajar lebih dalam lagi tentang:
- Programming
- Database
- Basic security
- Basic networking (seperti Realtime SSE, Query, dll)
A: Saya tetap usahakan agar aplikasi KasirKu ini bisa ringan dan cepat.
Walaupun menggunakan Bun.JS, saya tetap berusaha untuk:
- Tidak menggunakan dependencies yang berlebihan
- Menjaga performa aplikasi supaya tetap cepat
- Tetap memperhatikan aspek keamanan
Jadi walaupun bukan lagi menggunakan bahasa C, tujuan saya tetap sama:
membuat aplikasi kasir yang ringan, cepat, dan aman untuk digunakan.
A: Hmmmm... pelajaran yang bisa diambil dari project ini sih...
Waktu saya membuat aplikasi ini dengan bahasa C, sebenarnya saya malah mempersulit diri saya sendiri.
Sesuatu yang sebenarnya bisa dibuat lebih simpel dan mudah, malah jadi sangat rumit. Akibatnya development jadi lambat, bahkan sempat membuat project ini mangkrak kurang lebih selama 1 tahun.
Padahal sebenarnya ada bahasa pemrograman lain yang lebih mudah untuk dikembangkan, lebih mudah dibaca, dan juga lebih mudah untuk orang lain yang ingin berkontribusi ke project ini.
Dari situ saya belajar bahwa kadang kita tidak perlu selalu memilih solusi yang paling "low level" atau paling "optimal".
Yang penting adalah project bisa berkembang, bisa diselesaikan, dan bisa digunakan oleh orang lain.
- AdminLTE 3 Template by AdminLTE.io
- Icon Cash Register by Kameleon (icon-icons.com)
- NProgress by rstacruz
- 404 Not Found Template by colorlib
