Tree Coffee Mobile — Aplikasi Android Native (Java)
Aplikasi Android native (Java) untuk toko Tree Coffee. Memakai database Supabase, auth, dan API SvelteKit yang sama dengan versi web — tanpa backend baru, tanpa duplikasi logika bisnis. Katalog, checkout, Midtrans, chat, ulasan, flash sale, masuk Google.

Aplikasi Android native untuk Tree Coffee, toko kopi online — ditulis dengan Java dan Android SDK, bukan pembungkus lintas platform. Kontribusi project ini bukan "membuat aplikasi dari nol", tapi mengintegrasikan aplikasi mobile native ke sistem e-commerce berbasis web lewat arsitektur shared-backend: aplikasi memakai database Supabase, auth, dan API SvelteKit yang sama persis dengan situs web. Tidak ada backend baru, tidak ada schema baru, tidak ada duplikasi logika bisnis.
📱 Unduh
Build Android terlampir di halaman ini — tekan Unduh APK. Minimal Android 7.0 (API 24). Masuk dengan akun Tree Coffee yang sudah ada, daftar akun baru, atau lanjutkan dengan Google.
Arsitektur
Android (Java) ─┬─> Supabase PostgREST + GoTrue
│ auth, katalog, pesanan, alamat, storage
└─> SvelteKit /api/* (Bearer JWT)
checkout, Midtrans, ongkir Biteship, upload, chat
- Baca langsung ke Supabase, tulis yang penting lewat API web. Pesanan, stok, dan pembayaran tidak pernah ditulis dari HP — server yang memvalidasi checkout web juga memvalidasi aplikasi.
- MVVM tanpa framework: Activity → ViewModel + LiveData → Repository → Retrofit. Multi-Activity + Intent, layout XML, Material 3, ViewBinding. Tanpa Fragment, Hilt, RxJava, atau coroutine.
- Rotasi refresh token ditangani aman — refresh
synchronizeddan memeriksa apakah thread lain sudah refresh duluan, karena dua thread yang menukar refresh token yang sama di luar jendela 10 detik Supabase membuat seluruh sesi dicabut. - Harga di layar = harga yang ditagih — rumus harga mengikuti
resolveUnitPriceserver web (diskon biasa vs harga flash sale, yang termurah), dan keranjang serta checkout meminta harga ulang ke server sebelum membayar.
Fitur
- Auth — email + kata sandi, daftar dengan verifikasi email, Masuk dengan Google (Credential Manager →
id_tokenSupabase), akun nonaktif ditolak. - Katalog & pencarian — banner geser otomatis, kategori, detail produk dengan galeri dan zoom layar penuh, saran pencarian yang membatalkan request basi, riwayat, pencarian populer, urut dan filter.
- Keranjang & checkout — centang per item, "Beli Langsung" satu produk, alamat tersimpan dengan pencarian area, ongkir langsung dari Biteship plus kurir toko, bayar di toko.
- Pembayaran — Midtrans Snap di WebView yang dikunci, status disinkronkan dari server, transfer yang tidak dibayar kedaluwarsa otomatis.
- Pesanan — daftar dengan filter status, detail, timeline kejadian, bayar ulang, beli lagi.
- Ulasan, chat & komplain — ulasan dengan reaksi dan balasan, chat pelanggan–admin dengan gambar, balas, dan edit, komplain dengan foto bukti.
- Akun — profil dan foto, ubah kata sandi, riwayat pembayaran, insight belanja, verifikasi nomor HP via OTP WhatsApp, hapus akun permanen, mode gelap.
- Flash sale — ditagih sungguhan: hitung mundur, kuota, dan halaman Flash Sale tersendiri.
- Responsif sebagai aturan — setiap layar dicek di HP kecil, HP besar, huruf 1.3×, navigasi 3 tombol dan gestur, tema terang dan gelap.
Teknologi
- Java 11 + Android SDK (compileSdk 36, targetSdk 35, minSdk 24)
- AGP 8.10, Gradle 8.11 (Kotlin DSL + version catalog)
- Material 3, ViewBinding, AndroidX Lifecycle (ViewModel + LiveData)
- Retrofit 3 + OkHttp 5 + Gson, Glide 4.16
- AndroidX Credential Manager + Google ID (Masuk dengan Google)
- Supabase (PostgREST, GoTrue, Storage) bersama dengan web
- API SvelteKit: Midtrans Snap, Biteship, chat, ulasan, komplain
Status
Aktif — project skripsi S1. Setiap fitur diverifikasi manual di emulator dan HP fisik terhadap database produksi, dengan log HTTP sebagai bukti. Belum ada test otomatis; itu celah paling jelas, disebutkan terus terang. APK yang dibagikan adalah build debug; build release bertanda tangan menjadi langkah berikutnya.
Rilis
Build debug pertama: katalog, checkout Midtrans, chat, flash sale, Masuk dengan Google.