Vending machine menjual ketika tak ada orang di dekatnya. Lemari, motor, dan penerima koin bekerja sendiri, tetapi mesinnya tetap butuh wajah untuk pelanggan: sesuatu yang bisa menampilkan stok, menerima pesanan, dan menyuruh controller releasing produk yang tepat ke slot yang tepat.
Wajah itu adalah aplikasi ini. Aplikasi dibuka dengan katalog produk mesin, ikut terfilter saat mengetik, dan setiap kartu adalah produk lengkap dengan harga. Mengetikuk produk membuka layar detail, jumlah bisa diubah, dan total dihitung ulang. Pembayaran menjalankan order melalui state machine sungguhan - CREATED, PAID, DISPENSING, COMPLETED - dan begitu order mencapai DISPENSING, aplikasi menulis perintah dispense ke controller lewat USB serial 9600 baud. Pelanggan mendapat konfirmasi, mesin menjalankan motor, dan slot terbuka.
Di bawahnya, aplikasi ini adalah proyek Clean Architecture kecil. Lapisan presentation memegang katalog dan layar pembayaran, lapisan domain memegang use case (ambil produk, buat order) beserta model (item, order, status order), dan lapisan data memegang implementasi repository, service Retrofit, serta jembatan serial ke hardware. Koin menyatakannya, Moshi mengurai payload, dan Glide memuat gambar produk.
Katalognya sengaja offline-first. Build awal mengambil daftar produk dari API placeholder dan tiga dari empat URL gambarnya menunjuk ke host pihak ketiga yang sudah tidak melayani apa pun, sehingga pelanggan yang berdiri di depan mesin melihat kartu yang setengah kosong. Sekarang katalognya berada di dalam aplikasi, gambarnya dibundel di dalam APK, dan mesin tetap bisa berjualan ketika Wi-Fi toko mati.
Repository ini tidak bisa dikompilasi selama bertahun-tahun sejak terakhirnya disentuh: class model yang terduplikasi, objek parameter yang rusak, drawable yang hilang, aturan penamaan font yang sudah tidak diterima Android, dan build yang masih tertuju ke jcenter serta Android Gradle Plugin 4. Semuanya dibangun ulang di atas AGP 8.7.3, Kotlin 2.1.0, dan Gradle 8.9, dibersihkan, dan dilengkapi unit test untuk katalog serta pembuatan order.
Antarmukanya berbahasa Indonesia, memakai target sentuh besar, dan menaruh setiap aksi dalam satu jempol - aplikasi ini dibuat untuk dipakai cepat, di depan mesin, oleh orang yang hanya ingin beli minum.