

Akun Test
*Kunjungi /login untuk mencoba role user yang berbeda. Fitur WebSocket dioptimalkan untuk local environment.
Ravine Coffee adalah sistem manajemen cafe fullstack yang dibuat untuk mendigitalisasi seluruh perjalanan customer di tempat. Sebagai Solo Fullstack Developer, saya membangun solusi end-to-end di mana customer bisa scan QR di meja, melihat menu, dan membayar langsung melalui QRIS Midtrans. Sistem ini memastikan setiap order tersinkron real-time antara customer, kasir, dan kitchen staff.
Menggabungkan TanStack Query untuk server state (caching dan fetching) dan Zustand untuk client state yang ringan. Ini menjaga UI tetap responsif dan sinkron saat data terus berubah.
Menerapkan pola Data Snapshotting pada OrderItems. Saat order dibuat, detail produk seperti nama dan harga disalin ke record transaksi agar invoice historis tetap akurat meskipun produk diubah atau dihapus.
Workflow Order dan Payment
Menu digital dan sistem order melalui QR code khusus per meja.
Workflow pembayaran otomatis dengan update status real-time melalui webhook.
Notifikasi order instan antara layar kasir dan kitchen menggunakan WebSockets.
Sistem snapshot berbasis Prisma untuk menjaga akurasi transaksi meskipun data produk berubah.
Discount engine yang mendukung kupon fixed dan percentage-based.
Infinite scrolling dan caching efisien untuk menu cafe yang besar.
Interface khusus untuk Customer, Kasir, dan Administrator.
Tracking state lengkap untuk setiap order dari OPENBILL sampai COMPLETED.
Salah satu tantangan engineering utama adalah mengelola WebSockets di serverless infrastructure. Deploy ke Vercel berarti harus menghadapi sifat serverless function yang stateless dan tidak dirancang untuk koneksi persisten. Saya mengatasinya dengan merancang reconnection strategies serta memastikan webhook Midtrans menjadi fallback reliable untuk konfirmasi pembayaran. Tantangan lain adalah mengamankan koneksi WebSocket agar hanya role Kasir dan Kitchen yang terautentikasi yang bisa menerima broadcast event sensitif. Di frontend, saya memakai TanStack Query untuk mencegah re-render berulang saat update order real-time masuk.
Next.js, TypeScript, Express.js, Prisma ORM, Supabase, Midtrans QRIS, WebSockets, Zustand, TanStack Query, Vercel.