Membagi tagihan bersama tanpa hitung-hitungan yang merepotkan. Foto struk, OCR membaca item dan harga, tentukan siapa makan apa, lalu bagikan hasilnya lewat satu tautan pendek.

Timeline: Agustus – Agustus 2026
SplitBill menyelesaikan bagian paling merepotkan dari membagi tagihan bersama: menghitung siapa harus bayar berapa. Foto struk, OCR di perangkat langsung membaca item dan harga, setiap orang menandai apa yang ia pesan, dan aplikasi menghasilkan satu tautan pendek berisi rincian yang tepat. Tanpa login, tanpa instalasi, tanpa hitung manual.
Ini produk nyata yang sudah production, aktif di splitbills.site, dibangun untuk pasar Indonesia dengan dukungan dwibahasa (Bahasa Indonesia + Inggris) dan OCR yang disetel khusus untuk format struk Indonesia.
Prototipe awalnya sudah berfungsi, tapi ada satu pintasan yang diam-diam meruntuhkan empat janjinya sendiri: tidak pernah menyimpan apa pun di server. Semua data tagihan, termasuk item, harga, dan nama peserta, dikemas langsung di dalam URL.
| Dijanjikan | Yang Sebenarnya Terjadi |
|---|---|
| Tautan berbagi pendek | Tautan menjadi sangat panjang karena seluruh tagihan di-encode di URL |
| Tagihan privat (orang lain tidak bisa lihat jumlahmu) | Siapa pun yang punya tautan bisa membaca seluruh isinya |
| Pembuat tagihan bisa lihat siapa yang sudah bayar | Status pembayaran tidak pernah tersinkron antar perangkat, hanya tersimpan di browser yang mengubahnya |
| Otomatis terhapus setelah 24 jam | Tidak ada yang bisa dihapus. Datanya adalah tautan itu sendiri, dan masa berlaku hanya dicek di sisi klien sehingga mudah dilewati |
Memperbaikinya berarti butuh backend sungguhan: database untuk menyimpan status tagihan, kode pendek yang di-resolve di server, dan penegakan privasi yang tidak bisa dikalahkan hanya dengan mengubah URL, semuanya sambil menjaga tampilan, alur, dan akurasi OCR tetap identik piksel demi piksel dengan versi yang sudah tervalidasi oleh pengguna asli.
tesseract.js, disetel ind+eng) berjalan sepenuhnya di sisi klien. Foto tidak pernah meninggalkan perangkat.splitbills.site/s/AB12CD34, berlaku 24 jam, lengkap dengan kode QR dan berbagi lewat WhatsApp.| Lapisan | Pilihan |
|---|---|
| Frontend | Vue 3.5 + TypeScript, Vite 7, Tailwind CSS 4, vue-router 4 |
| State | reactive() composable biasa, tanpa Pinia; bentuk state aplikasi ini tidak membutuhkannya |
| Backend | Hono + @hono/node-server, satu proses yang melayani API sekaligus frontend hasil build |
| Database | MySQL 8 lewat Drizzle ORM |
| OCR | Tesseract.js (data terlatih ind+eng), aset di-hosting sendiri |
| Testing | Playwright untuk end-to-end, test runner bawaan Node untuk unit test |
| Tooling | Biome untuk lint dan format |
getUserMedia tidak berjalan tanpanya) dan menjalankan OCR sepenuhnya di browser. Tidak ada gambar yang pernah diunggah untuk diproses.Dua lapis pengujian, masing-masing membuktikan hal yang tidak bisa dibuktikan oleh yang lain:
node --test, tanpa browser) menguji logika uang di modul kalkulasi bersama, khususnya kasus pembulatan yang bisa membuat pembagian naif kehilangan atau menambah satu Rupiah.Rangkaian e2e ini berjalan melawan build server produksi, bukan dev server, karena dua hal yang benar-benar perlu dibuktikan, yaitu uang yang dihitung di server dan status pembayaran yang tersinkron antar perangkat, tidak akan ada tanpa backend sungguhan yang terlibat.