Bayangkan seorang anak berusia lima tahun duduk di kursi belakang mobil dalam perjalanan panjang. Sinyal naik turun, kuota orang tua tinggal sedikit, dan satu-satunya permintaan adalah "Bun, main kartu belajar dong." Kalau aplikasinya baru bisa dipakai setelah loading dari internet, momen itu gagal. Anak bosan, orang tua repot, dan aplikasinya akhirnya dihapus.
Itulah alasan utama Rajendra Pintar, aplikasi belajar untuk anak usia 4 sampai 8 tahun yang saya bangun, dirancang agar bisa dimainkan tanpa internet. Artikel ini membedah bagaimana hal itu dicapai, apa saja keputusan teknis di baliknya, dan yang tidak kalah penting, apa yang jujur tetap butuh koneksi.
Offline-First Berbeda dari Sekadar Ada Mode Offline
Banyak aplikasi menambahkan mode offline di belakang, seperti tambalan: fiturnya berjalan normal kalau ada internet, dan kalau tidak ada, sebagian halaman mendadak kosong. Pendekatan offline-first terbalik. Aplikasi dirancang dengan asumsi bahwa internet tidak ada, lalu koneksi diperlakukan sebagai bonus untuk hal-hal tertentu.
Untuk aplikasi anak, perbedaannya terasa langsung. Anak tidak tahu apa itu "gagal memuat". Ia hanya tahu layar yang tidak bergerak, dan ia akan berhenti memakainya. Karena itu keputusan offline saya ambil sejak awal, bukan ditambal di akhir.
Apa yang Harus Selalu Tersedia
Langkah pertama adalah menentukan mana yang inti. Di Rajendra Pintar, inti pengalamannya adalah:
• Ratusan kartu belajar interaktif di 9 bidang, dari kosakata sampai angka dan transportasi, dengan materi yang menyesuaikan lima jenjang usia (4 sampai 8 tahun).
• Mode Kuis Ceria bergambar dengan umpan balik langsung dan efek konfeti.
• Game Memori untuk melatih daya ingat visual.
• Maskot, animasi, dan efek sentuhan layar yang membuat anak betah.
Semua itu harus berjalan dari perangkat itu sendiri. Seluruh kartu belajar juga gratis dan tidak dikunci di balik pembayaran, jadi tidak ada materi inti yang bergantung pada pengecekan status di server.
Lapisan Pertama: Service Worker di Versi Web
Rajendra Pintar bisa dibuka lewat browser sebagai Progressive Web App. Di sinilah Service Worker bekerja. Bayangkan ia sebagai penjaga gudang yang berdiri di antara aplikasi dan internet. Saat aplikasi pertama kali dibuka, penjaga ini menyimpan berkas yang dibutuhkan ke penyimpanan lokal perangkat. Pada pembukaan berikutnya, setiap permintaan dijawab dari gudang lokal lebih dulu, tanpa perlu menghubungi server.
Hasilnya, setelah aplikasi dipasang ke layar utama lewat Add to Home Screen, materi belajar tetap tampil walaupun HP dalam mode pesawat. Tidak ada unduhan besar di awal seperti aplikasi toko, tapi pengalaman setelahnya terasa seperti aplikasi biasa. Perbandingan lengkap PWA dengan aplikasi mobile biasa ada di artikel "Perbedaan Web App, Mobile App, dan PWA — Mana yang Kamu Butuhkan?".
Satu konsekuensi yang perlu dipahami: karena aplikasi dijawab dari simpanan lokal, versi baru aplikasi baru sampai ke perangkat ketika ada koneksi. Ini kompromi yang wajar dan memang bagian dari cara kerja teknologi ini.
Lapisan Kedua: Capacitor untuk Versi Android
Tidak semua orang tua nyaman memasang lewat browser, dan sebagian lebih percaya aplikasi dari Google Play. Untuk itu saya memakai Capacitor 8, yang membungkus aplikasi web yang sama menjadi aplikasi Android asli (APK).
Keuntungan terbesarnya bagi urusan offline: berkas aplikasi ikut terpaket di dalam aplikasi itu sendiri. Tidak ada tahap mengunduh materi setelah instalasi. Satu basis kode melayani dua jalur distribusi, jadi perbaikan di satu tempat terbawa ke yang lain dan saya tidak perlu memelihara dua aplikasi terpisah. Untuk developer tunggal seperti saya, itu bukan sekadar efisiensi, tapi syarat agar proyek bisa terus berjalan.
Suara dan Efek Tanpa Berkas Berat
Aplikasi anak butuh banyak suara: pujian, klik ceria, tepuk tangan, nada kemenangan. Kalau semuanya berupa berkas audio, ukuran aplikasi membengkak dan semuanya harus ikut tersimpan di perangkat.
Jalan keluarnya ada dua. Pertama, efek suara pendek seperti pop, chime, dan fanfare dihasilkan langsung lewat Web Audio API, jadi tidak memakan ruang penyimpanan sama sekali. Kedua, pelafalan kosakata dalam bahasa Indonesia dan Inggris memakai mesin text-to-speech dwibahasa, sehingga ratusan kata tidak perlu direkam satu per satu.
Di sisi visual, animasi maskot dan kartu berjalan lewat pustaka animasi yang terpaket bersama aplikasi, begitu juga efek konfeti dan sentuhan layar. Karena dihasilkan di perangkat, semuanya tetap hidup tanpa koneksi.
Apa yang Tetap Butuh Internet
"100% offline" paling jujur dimaknai pada materi belajarnya. Beberapa hal memang secara alami butuh koneksi:
• Masuk dengan akun Google dan sinkronisasi akun cloud.
• Pembayaran: Xendit di versi web, Google Play Billing di versi Android.
• Pemuatan pertama dan pembaruan versi aplikasi.
Prinsipnya, hal-hal ini tidak boleh menghalangi anak belajar. Koneksi hanya diperlukan untuk urusan orang tua, bukan urusan anak. Dan karena seluruh kartu belajar gratis, seorang anak tetap bisa belajar penuh walaupun orang tuanya belum login atau sedang tanpa sinyal.
Cara Menguji Klaim Offline Sebuah Aplikasi
Kamu bisa memakai cara ini pada aplikasi apa pun, termasuk milikmu sendiri:
1. Buka aplikasi dan jalankan fitur utamanya sekali selagi online.
2. Aktifkan mode pesawat.
3. Tutup aplikasi sepenuhnya, lalu buka lagi.
4. Coba fitur inti. Kalau semuanya tetap jalan, klaim offline-nya nyata. Kalau muncul layar putih atau pesan gagal memuat, berarti offline-nya hanya setengah.
Uji sederhana ini sering jauh lebih jujur daripada brosur mana pun.
Pelajaran untuk Bisnis yang Butuh Aplikasi Lapangan
Polanya sama dengan yang saya pakai di aplikasi bisnis: pisahkan apa yang harus selalu tersedia dari apa yang boleh menunggu koneksi. Staf gudang di ruang bawah tanah atau kasir di lokasi bersinyal lemah punya kebutuhan yang mirip dengan anak di dalam mobil, yaitu aplikasi yang tidak pernah berkata "coba lagi nanti".
Sebelum memesan aplikasi, ada satu pertanyaan yang layak diajukan ke developer: kalau internet putus di tengah pekerjaan, bagian mana yang tetap jalan dan bagian mana yang berhenti? Jawabannya menunjukkan seberapa serius sistem itu dirancang untuk kondisi lapangan yang nyata.
Kesimpulan & Refleksi
Membuat aplikasi yang bekerja saat sinyal bagus itu mudah. Yang membedakan adalah apa yang terjadi saat sinyalnya hilang. Rajendra Pintar saya rancang supaya jawabannya tetap sama: anak tetap bisa belajar.
Kalau kamu sedang menimbang aplikasi untuk anak, tim lapangan, atau pelanggan di daerah dengan sinyal terbatas, pikirkan skenario terburuknya lebih dulu. Sistem yang baik adalah yang tetap berguna justru pada kondisi paling tidak ideal.
Kalau penasaran dengan hasilnya, Rajendra Pintar bisa dicoba langsung di rapin.arzhaning.my.id. Coba uji sendiri dengan cara di atas: buka sekali, aktifkan mode pesawat, lalu lihat apa yang masih jalan. Untuk kebutuhan aplikasi lapangan di bisnismu, kamu juga bisa mengobrol dulu lewat WhatsApp.