<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cahyanudien Aziz Saputra</title>
    <description>The latest articles on DEV Community by Cahyanudien Aziz Saputra (@cas8398).</description>
    <link>https://dev.to/cas8398</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F736584%2F6f6e709e-1c7f-434d-b1dd-88acb8d7da03.jpeg</url>
      <title>DEV Community: Cahyanudien Aziz Saputra</title>
      <link>https://dev.to/cas8398</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cas8398"/>
    <language>en</language>
    <item>
      <title>Membangun HadisKu 4.0</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Mon, 09 Nov 2026 20:25:40 +0000</pubDate>
      <link>https://dev.to/cas8398/membangun-hadisku-40-4765</link>
      <guid>https://dev.to/cas8398/membangun-hadisku-40-4765</guid>
      <description>&lt;p&gt;Setelah sekitar tiga bulan pengerjaan, HadisKu 4.0 akhirnya dirilis.&lt;/p&gt;

&lt;p&gt;Ini bukan pembaruan biasa. Saya memutuskan untuk membangun ulang HadisKu dari awal. Versi sebelumnya, HadisKu 3.x, sudah berjalan dan digunakan oleh pengguna. Namun, semakin lama saya mengembangkan aplikasi ini, semakin banyak hal yang ingin diperbaiki.&lt;/p&gt;

&lt;p&gt;Saya ingin pengalaman membaca hadis menjadi lebih baik. Bukan hanya dari sisi tampilan, tetapi juga bagaimana pengguna menemukan, membaca, menyimpan, dan mempelajari hadis.&lt;/p&gt;

&lt;p&gt;Keputusan tersebut membawa saya pada satu pekerjaan besar: memulai kembali.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mengapa Membangun Ulang?
&lt;/h2&gt;

&lt;p&gt;HadisKu versi sebelumnya dibangun menggunakan Flutter. Secara fungsional, aplikasi berjalan dengan baik. Namun, saya merasa perlu memiliki kontrol lebih besar terhadap pengalaman aplikasi Android.&lt;/p&gt;

&lt;p&gt;Akhirnya, saya memilih Kotlin dan Jetpack Compose untuk membangun versi baru.&lt;/p&gt;

&lt;p&gt;Perubahan ini bukan sekadar mengganti teknologi. Saya juga menata ulang navigasi, struktur halaman, dan cara pengguna berinteraksi dengan koleksi hadis.&lt;/p&gt;

&lt;p&gt;Ada beberapa hal yang ingin saya capai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Membuat pengalaman membaca teks Arab lebih nyaman.&lt;/li&gt;
&lt;li&gt;Menghadirkan pencarian yang lebih baik untuk koleksi hadis yang besar.&lt;/li&gt;
&lt;li&gt;Memastikan koleksi hadis dapat diakses sepenuhnya secara offline.&lt;/li&gt;
&lt;li&gt;Memberikan lebih banyak fleksibilitas dalam pengaturan tampilan.&lt;/li&gt;
&lt;li&gt;Menambahkan alat yang membantu pengguna mempelajari dan mengelola hadis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  14 Kitab Hadis
&lt;/h2&gt;

&lt;p&gt;Salah satu bagian utama HadisKu adalah koleksi kitab hadis.&lt;/p&gt;

&lt;p&gt;Pada versi 4.0, tersedia 14 kitab hadis, mulai dari Shahih Bukhari, Shahih Muslim, hingga berbagai kitab lainnya.&lt;/p&gt;

&lt;p&gt;Setiap hadis dilengkapi teks Arab, terjemahan Indonesia, keterangan derajat hadis, dan informasi perawi.&lt;/p&gt;

&lt;p&gt;Seluruh koleksi tersedia secara offline. Pengguna tidak perlu mengunduh kitab satu per satu atau bergantung pada koneksi internet untuk membaca.&lt;/p&gt;

&lt;p&gt;Saya ingin bagian ini menjadi fondasi utama aplikasi: membuka kitab, membaca hadis, dan menemukan referensi tanpa hambatan yang tidak perlu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pencarian Lintas Kitab
&lt;/h2&gt;

&lt;p&gt;Sebelumnya, pengguna harus membuka kitab tertentu untuk mencari hadis. Sekarang, pencarian dapat dilakukan sekaligus dari seluruh 14 kitab.&lt;/p&gt;

&lt;p&gt;Pengguna cukup memasukkan kata kunci seperti sabar, shalat malam, atau adab makan. Hasil pencarian akan menampilkan hadis yang relevan dari berbagai kitab.&lt;/p&gt;

&lt;p&gt;Pencarian juga mendukung nomor hadis dan pemilihan beberapa kitab sekaligus.&lt;/p&gt;

&lt;p&gt;Ini salah satu perubahan yang cukup penting bagi saya. Dengan koleksi puluhan ribu hadis, kemampuan menemukan referensi dengan cepat sama pentingnya dengan kemampuan membaca hadis itu sendiri.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beberapa Hal Kecil yang Membuat Perbedaan
&lt;/h2&gt;

&lt;p&gt;Tidak semua perubahan harus berupa fitur besar.&lt;/p&gt;

&lt;p&gt;Saya menambahkan fitur Lanjutkan Membaca agar pengguna dapat kembali ke hadis terakhir yang dibuka. Ada juga fitur untuk menyimpan hadis pilihan sehingga lebih mudah ditemukan kembali.&lt;/p&gt;

&lt;p&gt;Kemudian, saya membuat fitur Jelajah untuk mengelompokkan hadis berdasarkan tema seperti thaharah, shalat, puasa, zakat, dan haji.&lt;/p&gt;

&lt;p&gt;Tujuannya sederhana. Tidak semua pengguna datang dengan kata kunci atau nomor hadis tertentu. Terkadang mereka hanya ingin membaca dan mempelajari hadis berdasarkan suatu pembahasan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alat Belajar
&lt;/h2&gt;

&lt;p&gt;Di versi 4.0, saya juga mulai mengembangkan HadisKu menjadi lebih dari sekadar aplikasi untuk membaca hadis.&lt;/p&gt;

&lt;p&gt;Ada beberapa alat baru:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pembuat Kartu Hadis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pengguna dapat membuat gambar dari hadis pilihan untuk dibagikan. Tersedia berbagai pilihan latar, termasuk ilustrasi yang dibuat menggunakan AI dan foto dari galeri perangkat.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catatan Pribadi&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pengguna dapat menulis catatan dan menyertakan referensi hadis di dalamnya. Referensi tersebut dapat dibuka langsung untuk melihat hadis terkait.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Biografi Imam&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tersedia informasi singkat mengenai para imam hadis, termasuk perjalanan dan kitab yang mereka susun.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ilmu Dasar Hadis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Saya menambahkan 38 istilah penting dalam ilmu hadis, seperti sanad, matan, mutawatir, ahad, shahih, hasan, dan dhaif.&lt;/p&gt;

&lt;p&gt;Saya berharap bagian ini dapat membantu pengguna yang ingin mulai memahami ilmu hadis secara bertahap.&lt;/p&gt;

&lt;h2&gt;
  
  
  Menyesuaikan Pengalaman Membaca
&lt;/h2&gt;

&lt;p&gt;Setiap orang memiliki kebiasaan membaca yang berbeda.&lt;/p&gt;

&lt;p&gt;Karena itu, HadisKu 4.0 memberikan beberapa pilihan pengaturan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mode terang dan gelap.&lt;/li&gt;
&lt;li&gt;Ukuran teks Arab dan terjemahan yang dapat diatur secara terpisah.&lt;/li&gt;
&lt;li&gt;Pengaturan perataan teks.&lt;/li&gt;
&lt;li&gt;Pilihan urutan teks Arab dan terjemahan.&lt;/li&gt;
&lt;li&gt;Pengaturan tata letak kartu hadis.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saya tidak ingin memaksakan satu cara membaca kepada semua pengguna.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tetap Gratis dan Offline
&lt;/h2&gt;

&lt;p&gt;Ada satu hal yang tidak berubah dari versi sebelumnya: HadisKu tetap gratis.&lt;/p&gt;

&lt;p&gt;Tidak ada iklan, tidak ada kewajiban berlangganan, dan pengguna tidak perlu membuat akun untuk mengakses koleksi hadis.&lt;/p&gt;

&lt;p&gt;Saya juga tetap mempertahankan pendekatan offline-first. Membaca hadis tidak seharusnya bergantung pada koneksi internet.&lt;/p&gt;

&lt;p&gt;Pengembangan dan operasional aplikasi tentu membutuhkan biaya. Dukungan sukarela dari pengguna membantu menjaga keberlangsungan proyek ini. Namun, dukungan tersebut tidak menjadi syarat untuk menggunakan HadisKu.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa Selanjutnya?
&lt;/h2&gt;

&lt;p&gt;HadisKu 4.0 merupakan fondasi baru untuk pengembangan berikutnya.&lt;/p&gt;

&lt;p&gt;Masih ada beberapa hal yang ingin saya kerjakan, seperti sinkronisasi catatan, peningkatan pengalaman membaca, dan pengembangan pencarian berdasarkan sanad maupun perawi.&lt;/p&gt;

&lt;p&gt;Namun, saya tidak ingin terburu-buru menambahkan fitur hanya demi memperbanyak daftar pembaruan.&lt;/p&gt;

&lt;p&gt;Setiap fitur harus memiliki alasan yang jelas dan memberikan manfaat bagi pengguna.&lt;/p&gt;

&lt;h2&gt;
  
  
  Penutup
&lt;/h2&gt;

&lt;p&gt;Membangun ulang aplikasi yang sudah berjalan selama ini bukan pekerjaan kecil. Ada banyak keputusan, perubahan, dan pekerjaan yang tidak selalu terlihat dari luar.&lt;/p&gt;

&lt;p&gt;Namun, saya merasa keputusan untuk memulai kembali adalah langkah yang tepat untuk perjalanan HadisKu selanjutnya.&lt;/p&gt;

&lt;p&gt;HadisKu 4.0 sudah tersedia di Google Play Store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.hadisku" rel="noopener noreferrer"&gt;Unduh HadisKu&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Semoga aplikasi ini dapat membantu lebih banyak orang membaca dan mempelajari hadis.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;HadisKu dikembangkan sebagai bagian dari perjalanan pengembangan aplikasi independen.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>mobile</category>
      <category>programming</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>KasirCepat 26.10.29: QRIS, Data Pelanggan, Utang, dan Perbandingan Stok</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Mon, 02 Nov 2026 06:52:24 +0000</pubDate>
      <link>https://dev.to/flagodna/kasircepat-261029-qris-data-pelanggan-utang-dan-perbandingan-stok-2i1b</link>
      <guid>https://dev.to/flagodna/kasircepat-261029-qris-data-pelanggan-utang-dan-perbandingan-stok-2i1b</guid>
      <description>&lt;p&gt;KasirCepat versi &lt;strong&gt;26.10.29&lt;/strong&gt; menghadirkan beberapa fitur baru untuk membantu pengelolaan transaksi, pelanggan, dan persediaan barang. Pembaruan ini juga mencakup sejumlah perbaikan pada penggunaan keyboard, pemindai barcode, navigasi kasir, dan pengelolaan lisensi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pembayaran QRIS
&lt;/h2&gt;

&lt;p&gt;Kini KasirCepat mendukung metode pembayaran QRIS. Pengguna dapat menyimpan gambar QRIS dan menampilkannya saat proses checkout.&lt;/p&gt;

&lt;p&gt;Ketika QRIS ditampilkan, gambar dapat diketuk untuk membuka tampilan layar penuh. Dengan begitu, pelanggan lebih mudah memindai kode menggunakan aplikasi pembayaran mereka.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Pelanggan
&lt;/h2&gt;

&lt;p&gt;KasirCepat kini menyediakan pengelolaan data pelanggan. Pengguna dapat menambahkan pelanggan baru, mengubah informasi, mengarsipkan data, serta mencari pelanggan berdasarkan nama atau nomor telepon.&lt;/p&gt;

&lt;p&gt;Data pelanggan juga terintegrasi dengan fitur pencatatan utang.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pencatatan Utang Pelanggan
&lt;/h2&gt;

&lt;p&gt;Transaksi dengan metode pembayaran utang kini dapat dihubungkan dengan data pelanggan.&lt;/p&gt;

&lt;p&gt;Pengguna dapat melihat jumlah utang yang belum dibayar untuk setiap pelanggan dan mencatat pembayaran langsung dari halaman utang. Riwayat ini membantu pemilik usaha memantau tagihan pelanggan tanpa harus mencatatnya secara terpisah.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perbandingan Stok
&lt;/h2&gt;

&lt;p&gt;Fitur Perbandingan Stok memungkinkan pengguna membandingkan jumlah persediaan antara dua tanggal, termasuk perubahan stok untuk setiap produk.&lt;/p&gt;

&lt;p&gt;Tersedia dua mekanisme pencatatan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free:&lt;/strong&gt; menggunakan snapshot stok yang dibuat secara manual.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pro:&lt;/strong&gt; snapshot stok dibuat secara otomatis setiap hari dengan penyimpanan riwayat hingga 12 bulan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dengan perbandingan ini, pengguna dapat melihat perubahan persediaan dalam periode tertentu dan mengetahui produk yang mengalami penambahan atau pengurangan stok.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perbaikan dan Penyempurnaan
&lt;/h2&gt;

&lt;p&gt;Selain fitur baru, versi ini juga membawa beberapa perbaikan:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard dan pemindai barcode:&lt;/strong&gt; keyboard tetap dapat digunakan ketika pemindai barcode perangkat keras aktif. Input dengan rangkaian karakter cepat dikenali sebagai hasil pemindaian, sedangkan pengetikan normal tetap diteruskan ke keyboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Navigasi POS:&lt;/strong&gt; tombol kembali kini menutup pencarian produk yang sedang aktif terlebih dahulu. Konfirmasi keluar hanya muncul ketika pencarian sudah tidak terbuka.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keamanan perangkat:&lt;/strong&gt; pemeriksaan keamanan kini memastikan PIN, pola, kata sandi, atau biometrik benar-benar telah didaftarkan, bukan sekadar memeriksa dukungan perangkat keras.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pengelolaan lisensi:&lt;/strong&gt; label "Hapus Lisensi" diubah menjadi "Cabut Lisensi" agar lebih sesuai dengan tindakan yang dilakukan. Animasi loading juga ditambahkan selama proses pencabutan lisensi berlangsung.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pengingat kedaluwarsa lisensi:&lt;/strong&gt; pengingat kini muncul setiap hari mulai lima hari sebelum lisensi berakhir hingga tanggal kedaluwarsa, termasuk ketika lisensi berakhir pada hari tersebut.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Perbarui KasirCepat
&lt;/h2&gt;

&lt;p&gt;KasirCepat versi 26.10.29 tersedia melalui Google Play Store.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.kasircepat" rel="noopener noreferrer"&gt;Unduh atau perbarui KasirCepat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Informasi lebih lanjut tentang KasirCepat: &lt;a href="https://flagodna.com/kasir-cepat/" rel="noopener noreferrer"&gt;https://flagodna.com/kasir-cepat/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;KasirCepat dikembangkan untuk membantu usaha mengelola transaksi dan persediaan dengan aplikasi kasir yang dapat digunakan tanpa langganan.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Setelah MTA Portal Dirilis, Apakah MTA ONE Akan Berhenti?</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Wed, 28 Oct 2026 11:28:38 +0000</pubDate>
      <link>https://dev.to/cas8398/setelah-mta-portal-dirilis-apakah-mta-one-akan-berhenti-2267</link>
      <guid>https://dev.to/cas8398/setelah-mta-portal-dirilis-apakah-mta-one-akan-berhenti-2267</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Ini bukan sekadar tulisan tentang aplikasi. Ini tentang kecewa, lelah, dan sesuatu yang selama ini saya rawat seorang diri. Saya perlu menceritakannya dengan jujur.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Pesan dari pembuat aplikasi
&lt;/h2&gt;

&lt;p&gt;Assalamu’alaikum warahmatullahi wabarakatuh.&lt;/p&gt;

&lt;p&gt;Saudara-saudaraku, saudara seiman, seagama, satu payung yang sama.&lt;/p&gt;

&lt;p&gt;Perkenalkan, nama saya Cahyanudien Aziz Saputra. Saya pembuat aplikasi MTA ONE dan juga mengikuti kajian MTA di Kabupaten Sragen.&lt;/p&gt;

&lt;p&gt;Tulisan ini adalah lanjutan dari tulisan saya sebelumnya, &lt;a href="https://blog.cahyanudien.site/pesan-pembuat-aplikasi-mta-one-dan-brosur-mta-lengkap" rel="noopener noreferrer"&gt;Di Balik MTA ONE &amp;amp; Brosur MTA: Tentang Niat, Salah Paham, dan Tetap Melangkah&lt;/a&gt;. Kalau Anda belum membacanya, saya sangat menyarankan untuk membaca bagian pertama terlebih dahulu. Di sana saya bercerita tentang awal mula aplikasi ini, kenapa saya membuatnya, dan kenapa pada Januari 2026 saya berniat menghibahkan MTA ONE dan Brosur MTA Lengkap kepada MTA secara gratis.&lt;/p&gt;

&lt;p&gt;Pertama, saya ingin mengucapkan selamat datang.&lt;/p&gt;

&lt;p&gt;Entah Anda mengikuti perjalanan MTA ONE sejak versi pertama sekitar tahun 2020, atau baru menggunakannya sampai versi 4 pada tahun 2026, saya mengucapkan terima kasih. Kita memiliki kebutuhan yang sama: ingin mengikuti kajian yang disiarkan MTA dengan lebih mudah melalui aplikasi di handphone.&lt;/p&gt;

&lt;p&gt;Hari ini, 28 Oktober 2026, saya menulis tulisan ini setelah memikirkan banyak hal.&lt;/p&gt;

&lt;p&gt;Ternyata cukup melelahkan mengelola aplikasi seorang diri, dengan unduhan yang sudah melewati 21 ribu. Kadang saya berhenti sebentar dan berpikir: ternyata sudah sejauh ini perjalanan kita.&lt;/p&gt;

&lt;p&gt;Dari siaran radio yang tidak bersuara. Dari brosur mingguan yang terlambat saya perbarui. Dari alamat kajian yang datanya perlu diperbaiki. Dari MTA TV yang tidak menampilkan gambar.&lt;/p&gt;

&lt;p&gt;Semua itu pernah terjadi. Semua itu saya hadapi dan coba perbaiki satu per satu.&lt;/p&gt;

&lt;p&gt;Saya tidak menulis ini untuk menghitung jasa. Saya menulis karena selama ini ada banyak hal yang saya simpan sendiri, dan belakangan ini saya mulai merasa tidak nyaman untuk terus diam.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kecewa.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ya, mungkin itulah inti tulisan saya kali ini.&lt;/p&gt;

&lt;p&gt;Saya kecewa. Saya lelah. Dan jujur, saya tidak tahu harus menjelaskan perasaan ini dengan kata apa lagi.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Apakah saya tidak dianggap ada?
&lt;/h2&gt;

&lt;p&gt;MTA ONE mulai dirilis sekitar tahun 2020. Aplikasi ini kemudian diunduh dan digunakan oleh ribuan orang.&lt;/p&gt;

&lt;p&gt;Saya tidak ingat persis tahun berapa, tetapi masih pada masa pandemi, ketika Silaturahim Ahad Pagi dilakukan secara daring, saya pernah dihubungi oleh almarhum Pak Rudi untuk ikut Zoom Ahad Pagi. Kami berbincang, dan saya mendapat kesempatan menjelaskan sedikit tentang aplikasi MTA ONE.&lt;/p&gt;

&lt;p&gt;Lalu, mungkin sekitar tahun 2023 atau 2024, saya diundang ke Sekretariat MTA Pusat. Saat itu ada pembicaraan mengenai iklan yang muncul di MTA ONE. Beberapa pengguna mengeluhkan iklan pinjaman online. Pada waktu itu, kesimpulan pembicaraan yang saya ingat adalah aplikasi boleh diteruskan, tetapi iklan pinjaman online diminta untuk dihapus.&lt;/p&gt;

&lt;p&gt;Saya tidak ingat siapa saja yang hadir dan tidak ingin mengarang detail yang sudah lupa. Yang jelas, setelah itu saya tetap melanjutkan aplikasi ini.&lt;/p&gt;

&lt;p&gt;Kemudian pada Januari 2026, saya membuat proposal fisik. Isinya sederhana: saya ingin menghibahkan MTA ONE dan Brosur MTA Lengkap kepada MTA secara gratis.&lt;/p&gt;

&lt;p&gt;Saya datang membawa dokumen, lalu bertemu dengan salah satu pihak di sekretariat. Setelah beberapa waktu, saya mengonfirmasi apakah proposal itu sudah disampaikan. Saya diberi tahu bahwa proposal tersebut sudah disampaikan dan sudah dibaca pimpinan pusat.&lt;/p&gt;

&lt;p&gt;Lalu, apakah saya mendapat respons?&lt;/p&gt;

&lt;p&gt;Tidak.&lt;/p&gt;

&lt;p&gt;Benar-benar tidak ada respons yang memberikan kejelasan. Tidak ada jawaban bahwa proposal itu diterima. Tidak ada jawaban bahwa proposal itu ditolak. Tidak ada penjelasan apakah ada bagian yang perlu dibicarakan atau diperbaiki.&lt;/p&gt;

&lt;p&gt;Beberapa minggu dan bulan berikutnya, saya menanyakan kelanjutannya melalui kontak yang saya miliki dan melalui email resmi MTA. Hasilnya sama: tidak ada jawaban yang menjelaskan apa keputusan mereka.&lt;/p&gt;

&lt;p&gt;Saya memahami bahwa sebuah organisasi punya banyak urusan. Saya juga memahami bahwa proposal saya bukan satu-satunya hal yang harus dipikirkan. Namun, apakah sesibuk itu sampai tidak ada satu jawaban pun yang bisa diberikan selama berbulan-bulan?&lt;/p&gt;

&lt;p&gt;Saya tidak sedang meminta agar proposal saya diterima. Saya hanya berharap ada jawaban.&lt;/p&gt;

&lt;p&gt;Kalau ditolak, katakan ditolak. Saya bisa menerima itu dan melangkah. Kalau diterima, kita bisa membicarakan bagaimana menyerahkan aplikasi tersebut dengan baik. Tetapi kalau tidak ada jawaban sama sekali, apa yang harus saya lakukan?&lt;/p&gt;

&lt;p&gt;Kalau Anda mengirim pesan singkat kepada seseorang dan berharap mendapat balasan, apakah Anda selalu menuntut agar jawabannya sesuai keinginan Anda? Tidak. Kadang kita hanya ingin tahu bahwa pesan itu dibaca dan dijawab dengan jelas.&lt;/p&gt;

&lt;p&gt;Begitu pula dengan proposal saya.&lt;/p&gt;

&lt;p&gt;Yang membuat saya kecewa bukan karena saya tidak mendapatkan apa yang saya inginkan. Yang membuat saya kecewa adalah tidak adanya kejelasan, padahal saya sudah berusaha menyampaikan niat saya secara langsung dan tertulis.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rasanya seperti sudah mengulurkan sesuatu dengan dua tangan, tetapi dibiarkan tetap terulur tanpa tahu apakah akan diterima atau ditolak.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  2. MTA Portal dirilis. Kenapa?
&lt;/h2&gt;

&lt;p&gt;Sebelum melanjutkan, saya ingin mengingatkan Anda untuk membaca tulisan pertama. Saya pernah bercerita bahwa ketika MTA ONE mulai dikenal, ada anggapan bahwa saya bukan warga MTA, mencari keuntungan dari agama, menampilkan iklan yang mudarat, bahkan ada yang mengatakan warga MTA dilarang menggunakan MTA ONE.&lt;/p&gt;

&lt;p&gt;Mengingat itu, saya masih bertanya-tanya: kenapa tidak tabayyun? Kenapa tidak bertanya langsung kepada saya? Kenapa menyimpulkan niat seseorang tanpa mencoba mencari penjelasan darinya?&lt;/p&gt;

&lt;p&gt;Saya tidak habis pikir.&lt;/p&gt;

&lt;p&gt;Pada awal Oktober 2026, MTA Portal dirilis. Jujur, awalnya saya kaget. Benar, ada aplikasi MTA Portal sekarang?&lt;/p&gt;

&lt;p&gt;Dulu saya sempat bergabung dalam grup tim IT pusat, seingat saya sebelum tahun 2023. Saat itu salah satu hal yang dikerjakan adalah database warga. Saya belum punya pengalaman yang cukup dalam pengelolaan data, jadi saya tidak banyak membantu. Bidang saya lebih dekat dengan pengembangan aplikasi seluler.&lt;/p&gt;

&lt;p&gt;Ketika MTA Portal dirilis, saya mencoba menggunakannya. Kesan pertama saya terus terang: &lt;strong&gt;kok begini? Menurut saya, ini belum siap untuk dirilis ke publik.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Saya tahu kalimat itu terdengar keras. Namun itulah kesan saya ketika mencoba aplikasi tersebut. Saya tidak ingin berpura-pura memberi penilaian yang lebih baik hanya karena aplikasi itu diterbitkan oleh organisasi yang sama-sama saya ikuti.&lt;/p&gt;

&lt;p&gt;Kalau Anda mengikuti perkembangan MTA ONE, beberapa fitur yang ada di MTA Portal bukan hal baru bagi saya. MTA TV, radio online, brosur, rekaman pengajian dalam enam kategori, Al-Qur’an, tanggal Hijriah, jadwal salat, alamat kajian, dan kabar MTA—semua itu sudah pernah ada di MTA ONE. Kebutuhan-kebutuhan tersebut juga tercantum dalam proposal yang saya ajukan pada Januari lalu.&lt;/p&gt;

&lt;p&gt;Saya tidak sedang menuduh bahwa MTA Portal dibuat berdasarkan proposal saya. Saya tidak memiliki bukti untuk menyimpulkan itu. Tetapi urutan peristiwa ini tetap sulit saya abaikan: proposal saya tidak mendapat jawaban yang jelas, sementara beberapa kebutuhan yang saya tawarkan untuk diserahkan kemudian muncul dalam aplikasi resmi.&lt;/p&gt;

&lt;p&gt;Sekarang, coba tempatkan diri Anda pada posisi saya.&lt;/p&gt;

&lt;p&gt;Saya datang dengan niat menyerahkan aplikasi yang sudah saya buat dan rawat. Saya tidak menawarkan penjualan. Saya tidak menawarkan kerja sama bisnis. Saya ingin menghibahkannya secara gratis. Saya menunggu jawaban selama berbulan-bulan. Tidak ada jawaban yang jelas.&lt;/p&gt;

&lt;p&gt;Lalu sebuah aplikasi resmi dirilis, dengan sejumlah fitur yang selama ini juga saya kembangkan dan tawarkan untuk diserahkan.&lt;/p&gt;

&lt;p&gt;Bagaimana seharusnya saya merasa?&lt;/p&gt;

&lt;p&gt;Bayangkan Anda ingin memberikan sesuatu kepada orang lain. Tangan Anda sudah terulur di depan orang itu. Yang Anda tunggu bukan harus tangan yang menerima—kalau ditolak pun Anda bisa memahami. Yang Anda tunggu setidaknya adalah respons. Tetapi tidak ada jawaban. Lalu suatu hari, di depan Anda, orang itu menjulurkan tangan dengan membawa sesuatu yang serupa.&lt;/p&gt;

&lt;p&gt;Apakah Anda memahami maksud saya?&lt;/p&gt;

&lt;p&gt;Saya senang MTA akhirnya mempunyai aplikasi sendiri. Saya benar-benar senang jika MTA bisa mengembangkan layanan digitalnya sendiri dan mengelolanya secara langsung. Tetapi senang melihat aplikasi resmi hadir tidak otomatis menghapus kekecewaan saya terhadap hal yang terjadi sebelumnya.&lt;/p&gt;

&lt;p&gt;Dua hal itu bisa benar pada saat yang sama.&lt;/p&gt;

&lt;p&gt;Saya mendukung adanya aplikasi resmi. Saya juga kecewa karena proposal saya dibiarkan tanpa kejelasan, sementara sejumlah kebutuhan yang saya usahakan kemudian muncul dalam aplikasi resmi.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tentang pengalaman menggunakan MTA Portal
&lt;/h3&gt;

&lt;p&gt;Ada persoalan lain yang ingin saya sampaikan: pengalaman teknis saat mencoba MTA Portal.&lt;/p&gt;

&lt;p&gt;Ketika membuka halaman awal, saya melihat sejumlah permintaan jaringan untuk data yang tampaknya tidak semuanya diperlukan saat itu juga. Berikut sebagian catatan dari satu sesi pengujian saya:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;16:43:45 HTTPS GET  qrsarmta.cloud /absensimta/api/v1/radio/integrity/nonce
           200 application/json 181 B 53 ms

16:43:45 HTTPS GET  api.mta.or.id /api/v1/perwakilan?limit=300
           200 application/json 18.7 KB 1.43 s

16:43:45 HTTPS GET  api.mta.or.id /api/v1/binaan?limit=1000&amp;amp;page=1&amp;amp;status=1
           200 application/json 3.8 KB 183 ms

16:43:45 HTTPS POST adapter-pa.googleapis.com /play.gateway.adapter.phonesky.BrowseService/GetItems
           200 application/grpc 1.5 KB 339 ms

16:43:46 HTTPS GET  api.mta.or.id /api/v1/majlis-pusat
           200 application/json 248 B 81 ms

16:43:46 HTTPS GET  api.myquran.com /v2/sholat/kota/cari/Kab.%20Aceh%20Jaya
           200 application/json 164 B 216 ms

16:43:46 HTTPS GET  api.mta.or.id /api/v1/cabang?limit=1000&amp;amp;page=1
           200 application/json 80.2 KB 4.90 s

16:43:46 HTTPS GET  api.myquran.com /v2/sholat/kota/cari/Darul%20Hikmah
           200 application/json 140 B 217 ms

16:43:46 HTTPS GET  api.myquran.com /v2/sholat/kota/cari/Kec.%20Darul%20Hikmah%20%C2%B7%20Kab.%20Aceh%20Jaya
           200 application/json 188 B 179 ms

16:43:46 HTTPS GET  play.google.com /store/apps/details?id=id.mta.portal&amp;amp;hl=id
           200 text/html 170 KB 274 ms

16:43:49 HTTPS POST qrsarmta.cloud /absensimta/api/v1/radio/token
           403 application/json 45 B 64 ms

16:43:51 HTTPS GET  lh.googleusercontent.com /...rw-w28-h28-v1-e15
           200 image/webp 384 B 73 ms

16:43:51 HTTPS GET  lh.googleusercontent.com /...rw-w112-h112-v1
           200 image/webp 2.1 KB 74 ms

16:43:53 HTTPS GET  qrsarmta.cloud /absensimta/api/v1/radio/integrity/nonce
           200 application/json 181 B 49 ms

16:43:56 HTTPS POST qrsarmta.cloud /absensimta/api/v1/radio/token
           403 application/json 45 B 50 ms

16:43:58 HTTPS GET  qrsarmta.cloud /absensimta/api/v1/radio/integrity/nonce
           200 application/json 181 B 46 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ini bukan benchmark resmi. Ini catatan dari pengujian saya sendiri, pada perangkat dan koneksi yang saya gunakan. Namun, dari sini terlihat bahwa aplikasi meminta data cabang dalam jumlah besar, termasuk permintaan dengan waktu tunggu hampir lima detik dalam sesi tersebut.&lt;/p&gt;

&lt;p&gt;Pertanyaan saya: apakah data sebanyak itu memang perlu dimuat ketika pengguna baru membuka halaman depan? Mengapa data dari fitur yang belum tentu dibuka harus ikut diminta sejak awal?&lt;/p&gt;

&lt;p&gt;Setiap permintaan jaringan memiliki biaya: kuota, waktu tunggu, dan pekerjaan tambahan untuk perangkat. Dampaknya tentu berbeda antara perangkat dan jaringan. Tetapi bagi pengguna dengan handphone yang terbatas atau koneksi yang lambat, cara aplikasi mengambil data bukan hal sepele.&lt;/p&gt;

&lt;p&gt;Menurut saya, aplikasi yang dibuat untuk memudahkan warga seharusnya juga memperhatikan hal-hal seperti ini. Fitur banyak saja tidak cukup. Cara fitur itu disajikan juga menentukan apakah aplikasi benar-benar nyaman digunakan.&lt;/p&gt;

&lt;p&gt;Saya menyampaikan ini karena saya melihatnya dan mengujinya sendiri. Bukan untuk mengejek pembuatnya. Saya berharap aplikasi itu diperbaiki.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Kenapa radio online MTA sekarang seperti eksklusif?
&lt;/h2&gt;

&lt;p&gt;Bagian ini yang paling membuat saya lelah selama beberapa minggu terakhir.&lt;/p&gt;

&lt;p&gt;Sejak MTA Portal dirilis, radio online MTA tidak lagi dapat diakses secara publik melalui jalur pihak ketiga seperti sebelumnya. Dari pengujian saya, aksesnya sekarang dibatasi melalui mekanisme yang digunakan oleh layanan resmi MTA, termasuk situs MTA dan aplikasi MTA Portal. Akibatnya, MTA ONE tidak lagi bisa ikut menyebarkan siaran radio tersebut dengan cara yang sama.&lt;/p&gt;

&lt;p&gt;Saya ulangi: radio online MTA sekarang terasa eksklusif untuk jalur resmi MTA. Orang yang ingin mendengarkannya melalui aplikasi lain, atau membantu menyebarkannya lewat aggregator radio, ikut terdampak. Ini bukan persoalan kecil bagi saya. Inilah yang membuat fitur radio di MTA ONE berulang kali berhenti berjalan.&lt;/p&gt;

&lt;p&gt;Pertanyaan saya: bukankah radio online dibuat agar bisa didengarkan melalui internet? Kenapa sekarang orang yang ingin mendengarkan harus melewati jalur tertentu saja?&lt;/p&gt;

&lt;p&gt;Sekarang ada banyak aggregator radio online. Mereka mengumpulkan siaran dari berbagai tempat agar orang lebih mudah menemukan dan mendengarkannya. Saya mengambil contoh &lt;a href="https://urfan.id/" rel="noopener noreferrer"&gt;urfan.id&lt;/a&gt;. Saya tidak kenal pembuatnya. Dari yang saya lihat, ia berusaha me-relay siaran radio online MTA agar bisa didengarkan melalui situsnya.&lt;/p&gt;

&lt;p&gt;Dengan mekanisme akses yang sekarang saya temui, apakah layanan seperti itu masih bisa memutar radio MTA?&lt;/p&gt;

&lt;p&gt;Saya tidak mengatakan pemilik radio tidak boleh mengelola layanan miliknya. Tentu mereka punya kewenangan atas infrastrukturnya. Tetapi kalau akhirnya hanya layanan resmi yang bisa mengakses siaran, maka jangkauan radio itu ikut ditentukan oleh keputusan tersebut.&lt;/p&gt;

&lt;p&gt;Apakah eksklusivitas seperti ini lebih penting daripada membuat siaran dapat didengar lebih banyak orang?&lt;/p&gt;

&lt;p&gt;Saya sungguh tidak memahami pertimbangannya.&lt;/p&gt;

&lt;h3&gt;
  
  
  Apa yang saya temukan secara teknis
&lt;/h3&gt;

&lt;p&gt;Bagi Anda yang berkecimpung di bidang IT, saya jelaskan berdasarkan pengujian yang saya lakukan.&lt;/p&gt;

&lt;p&gt;Pada akses radio yang saya amati, terdapat pemeriksaan melalui layanan &lt;code&gt;qrsarmta.cloud&lt;/code&gt;, termasuk endpoint &lt;code&gt;radio/integrity/nonce&lt;/code&gt; dan &lt;code&gt;radio/token&lt;/code&gt;. Saya juga menemukan permintaan ke layanan Google Play Integrity melalui aplikasi MTA Portal.&lt;/p&gt;

&lt;p&gt;Google Play Integrity adalah layanan untuk membantu pengembang memeriksa integritas aplikasi dan perangkat, lalu menggunakan hasil pemeriksaan itu untuk mengambil keputusan di sisi server. Teknologi semacam ini mempunyai kegunaan, misalnya untuk keamanan aplikasi dan mencegah penyalahgunaan layanan.&lt;/p&gt;

&lt;p&gt;Yang membuat saya bertanya-tanya adalah konteks penggunaannya di sini: pemeriksaan tersebut tampak menjadi bagian dari mekanisme untuk mendapatkan akses radio. Artinya, mendengarkan radio tidak lagi hanya soal memiliki alamat siaran dan koneksi internet; ada pemeriksaan tambahan yang harus dilewati sebelum akses diberikan.&lt;/p&gt;

&lt;p&gt;Saya juga mengamati bahwa situs radio melakukan permintaan yang berulang dalam interval tertentu. Dari lalu lintas jaringan, terlihat adanya akses ke layanan menggunakan koneksi pengguna dan informasi yang secara teknis tersedia dalam komunikasi web, seperti alamat IP dan jenis browser. Saya tidak memiliki akses ke kode server, sehingga saya tidak bisa memastikan seluruh data yang disimpan, berapa lama data dipertahankan, atau bagaimana data itu digunakan. Tetapi mekanisme pemeriksaan akses tersebut cukup terlihat dari pengujian yang saya lakukan.&lt;/p&gt;

&lt;p&gt;Saya ingin mengajukan pertanyaan secara langsung: untuk apa pembatasan seketat itu diperlukan dalam konteks mendengarkan radio dakwah?&lt;/p&gt;

&lt;p&gt;Teknologi Play Integrity tidak salah. Teknologi ini juga bukan hanya untuk perbankan. Tetapi ketika pemeriksaan integritas menjadi syarat akses radio, dampaknya nyata: layanan pihak ketiga kesulitan ikut menyebarkan siaran. Pertanyaan saya tetap sama: mengapa akses radio dakwah harus dibuat seperti ini?&lt;/p&gt;

&lt;p&gt;YouTube saja memiliki berbagai cara untuk membuat konten dapat ditonton dan dibagikan, sementara akses radio ini justru terasa semakin tertutup. Saya tidak sedang menyamakan seluruh sistem teknis keduanya. Saya sedang mempertanyakan prioritasnya: apakah pembatasan akses ini benar-benar lebih bermanfaat daripada memudahkan lebih banyak orang untuk mendengarkan?&lt;/p&gt;

&lt;p&gt;Ini radio dakwah. Saya kira tujuan utamanya adalah agar orang dapat mendengarkan kajian.&lt;/p&gt;

&lt;h3&gt;
  
  
  Saya tidak ingin terus bermain kucing dan tikus
&lt;/h3&gt;

&lt;p&gt;Sebenarnya saya masih bisa mencoba menambal MTA ONE agar radio tetap dapat diputar. Saya sudah melakukan beberapa percobaan. Ada cara yang sempat berhasil, tetapi kemudian akses berubah dan cara itu tidak lagi berjalan.&lt;/p&gt;

&lt;p&gt;Lalu saya mencoba lagi. Setelah itu berubah lagi.&lt;/p&gt;

&lt;p&gt;Sampai kapan?&lt;/p&gt;

&lt;p&gt;Saya hanya ingin ikut menyebarkan siaran radio MTA. Tetapi yang saya hadapi sekarang seperti permainan kucing dan tikus: setiap kali saya menemukan jalan, jalan itu berubah lagi. Saya harus memeriksa ulang, menulis kode lagi, menguji lagi, dan mengeluarkan waktu untuk masalah yang tidak saya kendalikan.&lt;/p&gt;

&lt;p&gt;Saya tidak ingin terus mengejar mekanisme akses yang sengaja atau secara teknis membatasi layanan pihak ketiga. Kalau pemilik layanan memutuskan bahwa radio hanya boleh diakses melalui jalur resmi mereka, saya harus menerima kenyataan bahwa saya tidak bisa menjamin fitur radio di MTA ONE akan tetap berjalan.&lt;/p&gt;

&lt;p&gt;Tetapi saya tetap ingin bertanya: mengapa radio online dakwah MTA harus se-eksklusif ini?&lt;/p&gt;

&lt;p&gt;Ada orang yang memotong video pendek pengajian lalu mengunggahnya ke media sosial. Ada orang yang membagikan rekaman kajian. Ada pihak yang berusaha memperluas jangkauan dakwah melalui caranya sendiri. Mengapa untuk radio online justru terasa berbeda?&lt;/p&gt;

&lt;p&gt;Saya tidak sedang meminta akses khusus untuk diri saya. Saya ingin pendengar yang menggunakan MTA ONE tetap bisa mendengarkan radio sebagaimana sebelumnya.&lt;/p&gt;

&lt;p&gt;Waw. Ternyata mempertahankan sebuah fitur yang tujuannya sederhana bisa menjadi serumit ini.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Tuduhan itu ditujukan kepada siapa?
&lt;/h2&gt;

&lt;p&gt;Saya ingin mengajak Anda membaca artikel di situs resmi MTA tentang peluncuran MTA Portal: &lt;a href="https://mta.or.id/2026/10/mta-resmi-luncurkan-aplikasi-mta-portal/" rel="noopener noreferrer"&gt;MTA Resmi Luncurkan Aplikasi MTA PORTAL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Di sana terdapat kalimat berikut:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Aplikasi ini diterbitkan untuk digunakan seluruh warga atau simpatisan MTA untuk memudahkan dalam mengaji dan agar warga tidak terkecoh karena adanya pihak-pihak tertentu yang memanfaatkan untuk mencari keuntungan pribadi dengan membuat aplikasi dengan nama MTA.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Saya ingin bertanya kepada Anda yang membaca tulisan ini: siapa yang dimaksud dengan “pihak-pihak tertentu” yang mencari keuntungan pribadi itu? Aplikasi apa yang dimaksud? Siapa pembuatnya?&lt;/p&gt;

&lt;p&gt;Tulisan tersebut tidak menyebut nama. Karena itu, saya tidak akan mengarang nama atau mengklaim tahu pasti siapa yang dimaksud. Tetapi saya juga tidak bisa berpura-pura bahwa kalimat tersebut tidak punya dampak terhadap orang yang membuat aplikasi dengan nama MTA.&lt;/p&gt;

&lt;p&gt;Sebelumnya saya sudah pernah mendengar tuduhan bahwa saya bukan warga MTA, mencari keuntungan dari agama, dan membuat aplikasi yang tidak semestinya digunakan. Sekarang, di situs resmi, muncul pernyataan tentang pihak tertentu yang mencari keuntungan pribadi melalui aplikasi dengan nama MTA.&lt;/p&gt;

&lt;p&gt;Menurut Anda, bagaimana saya harus membacanya?&lt;/p&gt;

&lt;p&gt;Saya merasa kecewa. Sangat kecewa.&lt;/p&gt;

&lt;p&gt;Saya membuat MTA ONE karena saya sendiri membutuhkan cara yang lebih mudah untuk mengikuti kajian. Saya belajar coding dari nol. Saya merawat aplikasi ini bertahun-tahun. Saya menanggung biaya dan waktu sendiri. Pada Januari 2026, saya datang membawa proposal untuk menghibahkan MTA ONE dan Brosur MTA Lengkap secara gratis kepada MTA.&lt;/p&gt;

&lt;p&gt;Saya tidak meminta MTA membeli aplikasi saya. Saya tidak meminta keuntungan dari pengalihan aplikasi tersebut. Saya justru menawarkan untuk menyerahkannya.&lt;/p&gt;

&lt;p&gt;Lalu proposal itu tidak mendapat jawaban yang jelas, dan sekarang saya membaca pernyataan seperti itu di situs resmi.&lt;/p&gt;

&lt;p&gt;Bagaimana saya tidak kecewa?&lt;/p&gt;

&lt;p&gt;Kalau memang ada masalah dengan aplikasi pihak ketiga, sebutkan dengan jelas persoalannya. Kalau ada pembuat aplikasi yang dianggap mengambil keuntungan pribadi, jelaskan hal yang menjadi dasar pernyataan tersebut. Jangan membuat kalimat yang luas, lalu membiarkan orang-orang menebak siapa yang dimaksud.&lt;/p&gt;

&lt;p&gt;Saya tidak punya dasar untuk menyatakan bahwa saya adalah sasaran kalimat itu. Tetapi kalimat tersebut terbit di ruang publik, tidak menyebut nama, dan muncul setelah riwayat yang saya ceritakan di atas. Dampaknya nyata: orang yang membaca bisa menghubungkannya dengan aplikasi seperti MTA ONE, sementara pihak yang dimaksud tidak pernah dijelaskan secara terang.&lt;/p&gt;

&lt;p&gt;Saya berharap persoalan seperti ini diselesaikan dengan tabayyun dan komunikasi langsung, bukan dengan kalimat yang membuat pembaca menafsirkan sendiri.&lt;/p&gt;

&lt;p&gt;Saya tidak meminta dipuji. Saya tidak meminta perlakuan istimewa. Saya hanya ingin niat saya tidak disimpulkan secara sepihak.&lt;/p&gt;

&lt;p&gt;Bukankah itu hal yang wajar?&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Lalu, apa akhirnya?
&lt;/h2&gt;

&lt;p&gt;Jujur, saya lelah.&lt;/p&gt;

&lt;p&gt;Selama kira-kira dua minggu terakhir, saya banyak menghabiskan waktu untuk mencari cara agar radio MTA tetap bisa didengarkan melalui MTA ONE. Saya mencoba patch, membuat relay radio seperti pendekatan yang saya lihat di layanan lain, sampai mencoba mengambil sumber siaran melalui YouTube.&lt;/p&gt;

&lt;p&gt;Apakah semuanya berjalan?&lt;/p&gt;

&lt;p&gt;Tidak.&lt;/p&gt;

&lt;p&gt;Ada yang berhasil sebentar lalu berhenti. Ada cara yang membutuhkan biaya tambahan. Ada kemungkinan saya harus terus mengubah kode ketika mekanisme akses berubah, atau mengeluarkan biaya untuk menjalankan relay sendiri tanpa kepastian bahwa cara itu akan bertahan.&lt;/p&gt;

&lt;p&gt;Saya sampai bertanya pada diri sendiri: apakah saya harus mengeluarkan lebih banyak uang setiap bulan hanya agar orang-orang masih bisa mendengarkan radio MTA melalui aplikasi saya? Apakah saya harus terus mengubah kode setiap kali akses berubah? Apakah saya harus menghabiskan waktu untuk mengejar mekanisme yang tidak saya kendalikan?&lt;/p&gt;

&lt;p&gt;Apakah itu sepadan?&lt;/p&gt;

&lt;p&gt;Saya sudah menulis di bagian pertama bahwa saya ingin sedikit lebih santai. Saya ingin tetap mengembangkan aplikasi, tetapi tidak ingin semua hal harus saya pikul sendirian.&lt;/p&gt;

&lt;p&gt;Namun, ketika radio tidak lagi dapat diakses, saya merasa tanggung jawab saya sebagai pembuat aplikasi belum selesai. Ada ribuan orang yang menggunakan MTA ONE. Mereka tidak tahu bahwa di balik layar saya sedang mencoba berbagai cara, membaca lalu lintas jaringan, memperbaiki kode, dan menguji ulang hanya agar sebuah fitur bisa bekerja lagi.&lt;/p&gt;

&lt;p&gt;Itulah kenapa dua minggu terakhir saya terus mencoba.&lt;/p&gt;

&lt;p&gt;Tetapi sepertinya sudah cukup.&lt;/p&gt;

&lt;p&gt;Saya ingin berhenti mengejar perubahan akses radio ini. Versi 4.0.9 sepertinya sudah cukup untuk menandai batas usaha saya saat ini. Saya tidak bisa menjamin radio akan terus berjalan normal, sebab jalur aksesnya tidak berada dalam kendali saya.&lt;/p&gt;

&lt;p&gt;Saya tidak ingin menulis seolah-olah semuanya baik-baik saja. Saya sudah berusaha. Saya sudah mencoba beberapa pendekatan. Saya sudah menghabiskan waktu untuk mencari jalan keluar. Dan saya mulai menyadari bahwa saya tidak bisa terus mengorbankan waktu, tenaga, dan biaya tanpa kepastian.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jadi, apakah MTA ONE akan berhenti?
&lt;/h3&gt;

&lt;p&gt;Saya belum mengatakan bahwa MTA ONE akan langsung ditutup. Aplikasi ini masih memiliki fitur lain dan masih digunakan orang untuk kebutuhan mereka.&lt;/p&gt;

&lt;p&gt;Tetapi saya juga tidak bisa menjanjikan bahwa MTA ONE akan terus berjalan seperti sebelumnya. Khususnya untuk radio online, saya tidak ingin terus menjanjikan perbaikan yang pada akhirnya bergantung pada layanan milik pihak lain.&lt;/p&gt;

&lt;p&gt;Saya harus mengerem.&lt;/p&gt;

&lt;p&gt;Bukan karena saya tidak peduli kepada pengguna. Justru karena saya peduli, selama dua minggu ini saya berusaha mencari solusi. Tetapi kepedulian tidak berarti saya harus terus memaksakan diri tanpa batas.&lt;/p&gt;

&lt;p&gt;Untuk Anda yang selama ini menggunakan MTA ONE, saya ingin mengucapkan terima kasih. Terima kasih sudah menggunakan aplikasi ini, memberi saran, mengirim masukan, memberi ulasan, dan ikut menyebarkannya.&lt;/p&gt;

&lt;p&gt;Dan saya benar-benar minta maaf.&lt;/p&gt;

&lt;p&gt;Saya ulangi: saya benar-benar minta maaf karena tidak bisa menjamin aplikasi ini terus berjalan normal, terutama untuk radio online. Saya tidak mengenal sebagian besar dari Anda. Tetapi setiap hari, ada ribuan orang yang menggunakan aplikasi ini untuk mendengarkan kajian dan mengakses kebutuhan MTA dengan lebih mudah.&lt;/p&gt;

&lt;p&gt;Saya tahu ada orang yang hanya ingin membuka aplikasi, menekan tombol radio, lalu mendengarkan. Mereka tidak seharusnya harus memikirkan semua persoalan yang saya ceritakan di sini.&lt;/p&gt;

&lt;p&gt;Saya minta maaf karena sekarang saya harus mengakui bahwa ada bagian dari aplikasi ini yang tidak lagi bisa saya jaga sendirian.&lt;/p&gt;




&lt;h2&gt;
  
  
  Saya hanya ingin menepi sebentar
&lt;/h2&gt;

&lt;p&gt;Saya senang MTA membuat aplikasi resmi. Saya berharap MTA Portal benar-benar diperbaiki dan dapat membantu warga serta simpatisan MTA. Saya tidak menganggap keberadaan aplikasi resmi sebagai masalah dengan sendirinya.&lt;/p&gt;

&lt;p&gt;Tetapi saya juga tidak bisa menghapus cerita yang terjadi di baliknya: proposal yang saya ajukan tidak mendapat jawaban yang jelas, radio online yang sekarang sulit diakses melalui aplikasi lain, dan pernyataan di situs resmi yang membuat saya bertanya-tanya bagaimana pembaca akan menilai pembuat aplikasi seperti saya.&lt;/p&gt;

&lt;p&gt;Saya sudah berusaha menjelaskan. Saya sudah mencoba memperbaiki. Saya sudah mencoba mencari jalan keluar.&lt;/p&gt;

&lt;p&gt;Saya kecewa karena komunikasi yang sederhana saja tidak saya dapatkan. Saya lelah karena harus terus berusaha mempertahankan fitur yang aksesnya tidak saya kendalikan. Dan saya sedih karena sesuatu yang saya rawat selama bertahun-tahun sekarang membuat saya harus bertanya apakah masih masuk akal untuk terus berjuang dengan cara yang sama.&lt;/p&gt;

&lt;p&gt;Saya tidak menulis ini agar orang membenci MTA Portal atau menyalahkan pengguna aplikasi resmi. Pengguna tidak bersalah. Mereka hanya memakai aplikasi yang tersedia untuk mengikuti kajian.&lt;/p&gt;

&lt;p&gt;Saya menulis karena saya juga perlu didengar. Saya ingin orang tahu bahwa di balik sebuah aplikasi ada orang yang mengerjakannya, ada waktu yang dihabiskan, ada biaya yang dibayar, dan ada perasaan yang tidak selalu bisa disimpan sendiri.&lt;/p&gt;

&lt;p&gt;MTA ONE mungkin masih akan saya rawat. Saya mungkin masih akan mengembangkan aplikasi lain. Tetapi untuk persoalan radio ini, saya ingin berhenti sebentar.&lt;/p&gt;

&lt;p&gt;Saya hanya ingin menepi.&lt;/p&gt;

&lt;p&gt;Terima kasih sudah membaca sampai akhir.&lt;/p&gt;

&lt;p&gt;Wassalamu’alaikum warahmatullahi wabarakatuh.&lt;/p&gt;

&lt;p&gt;Salam hangat dari pembuat aplikasi MTA ONE,&lt;/p&gt;

&lt;p&gt;Cahyanudien Aziz Saputra&lt;/p&gt;

</description>
    </item>
    <item>
      <title>MTA ONE 4.0.8: Membangun Pemutar MTA TV Native</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Wed, 14 Oct 2026 16:15:16 +0000</pubDate>
      <link>https://dev.to/cas8398/mta-one-408-membangun-pemutar-mta-tv-native-52mj</link>
      <guid>https://dev.to/cas8398/mta-one-408-membangun-pemutar-mta-tv-native-52mj</guid>
      <description>&lt;p&gt;&lt;em&gt;Perubahan pengalaman menonton MTA TV, pemutaran audio, dan upaya membangun aplikasi yang dapat diandalkan dalam jangka panjang.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;14 Oktober 2026 · Cahyanudien Aziz Saputra&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Beberapa versi terakhir MTA ONE saya gunakan untuk memperbaiki pengalaman pemutaran radio online. Pada versi 4.0.8, pengembangan berlanjut ke bagian lain: pemutar MTA TV.&lt;/p&gt;

&lt;p&gt;Sebelumnya, pengalaman menonton MTA TV masih mengandalkan WebView. Kali ini, saya mengembangkan pemutar video native yang terintegrasi langsung dengan aplikasi, lengkap dengan pilihan kualitas video, rotasi layar, dan mode layar penuh.&lt;/p&gt;

&lt;p&gt;Saya juga menambahkan pemutaran audio MTA TV serta memperbarui pemutar audio rekaman.&lt;/p&gt;

&lt;p&gt;Bagi saya, perubahan ini bukan sekadar mengganti pemutar video. Ada hal yang lebih penting dalam pengembangan aplikasi: bagaimana membuat fitur yang benar-benar berguna bagi pengguna sekaligus menjaga agar aplikasi dapat terus dikembangkan dalam jangka panjang.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dari WebView ke Pemutar Native
&lt;/h2&gt;

&lt;p&gt;WebView merupakan cara praktis untuk menampilkan konten web di dalam aplikasi. Namun, untuk pengalaman menonton MTA TV, saya ingin kontrol pemutaran yang lebih terintegrasi dengan aplikasi itu sendiri.&lt;/p&gt;

&lt;p&gt;Karena itu, pada versi 4.0.8, saya menghadirkan pemutar video native untuk MTA TV.&lt;/p&gt;

&lt;p&gt;Kontrol pemutaran dirancang agar tidak terus memenuhi layar. Saat video diputar, kontrol akan menghilang sehingga pengguna dapat fokus pada siaran. Ketika layar disentuh, kontrol akan muncul kembali.&lt;/p&gt;

&lt;p&gt;Saya juga menambahkan pilihan kualitas video agar pengguna dapat menyesuaikan pemutaran dengan kondisi koneksi internet yang tersedia.&lt;/p&gt;

&lt;p&gt;Untuk pengalaman menonton yang lebih nyaman, pengguna dapat beralih antara orientasi potret dan lanskap dengan satu sentuhan. Mode lanskap menggunakan tampilan layar penuh.&lt;/p&gt;

&lt;p&gt;Tujuannya sederhana: membuat pengalaman menonton MTA TV terasa sebagai bagian dari MTA ONE, bukan sekadar halaman web yang dibuka dari dalam aplikasi.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mendengarkan Siaran Tanpa Menonton Video
&lt;/h2&gt;

&lt;p&gt;Ada situasi ketika pengguna ingin mengikuti siaran tanpa harus terus menatap layar. Karena itu, saya juga menghadirkan pemutaran audio MTA TV secara langsung di dalam aplikasi.&lt;/p&gt;

&lt;p&gt;Pengguna dapat memilih untuk menonton video atau mendengarkan audionya sesuai kebutuhan.&lt;/p&gt;

&lt;p&gt;Pemutar audio untuk rekaman juga mendapatkan pembaruan. Saya menambahkan tampilan layar penuh, sampul audio yang lebih besar, animasi gelombang audio, bilah pengaturan posisi pemutaran, serta tombol untuk mundur dan maju 10 detik.&lt;/p&gt;

&lt;p&gt;Kontrol tersebut berguna ketika pengguna ingin mengulang bagian tertentu atau melewati bagian rekaman tanpa harus mencari posisi secara manual.&lt;/p&gt;

&lt;p&gt;Bagi saya, hal-hal seperti ini merupakan bagian dari pengalaman penggunaan sehari-hari. Fitur tidak harus besar untuk menjadi berguna; yang penting adalah apakah fitur tersebut benar-benar mempermudah aktivitas pengguna.&lt;/p&gt;

&lt;h2&gt;
  
  
  Perbaikan Radio dan Pengalaman Pemutaran
&lt;/h2&gt;

&lt;p&gt;Pengembangan pemutar MTA TV bukan satu-satunya pekerjaan dalam beberapa versi terakhir.&lt;/p&gt;

&lt;p&gt;Pada versi 4.0.5, saya mulai mencoba pendekatan pengelolaan stream radio yang lebih dinamis. Versi 4.0.6 melanjutkan pendekatan tersebut, kemudian versi 4.0.7 membawa pengembangan lebih lanjut untuk pengelolaan stream dan penanganan pemutaran audio.&lt;/p&gt;

&lt;p&gt;Proses tersebut menjadi bagian dari upaya memperbaiki pengalaman radio online yang sebelumnya mengalami masalah pemutaran.&lt;/p&gt;

&lt;p&gt;Pada versi 4.0.8, perhatian terhadap kondisi ketika terjadi gangguan juga diterapkan pada pengalaman pemutar yang baru. Tampilan pemuatan dan kesalahan dibuat lebih jelas, disertai pilihan &lt;strong&gt;Coba lagi&lt;/strong&gt; dan &lt;strong&gt;Sambung ulang&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tentu saja, tidak semua gangguan dapat diselesaikan oleh aplikasi. Koneksi internet yang tidak stabil atau sumber siaran yang sedang tidak tersedia tetap dapat memengaruhi pemutaran.&lt;/p&gt;

&lt;p&gt;Namun, aplikasi perlu memberikan respons yang jelas ketika kondisi tersebut terjadi, bukan membiarkan pengguna menghadapi layar yang tidak menjelaskan apa yang sedang berlangsung atau tindakan apa yang bisa dilakukan berikutnya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stabilitas Tidak Berhenti pada Satu Rilis
&lt;/h2&gt;

&lt;p&gt;Sebuah fitur tidak cukup hanya berfungsi ketika pertama kali dirilis. Fitur tersebut juga harus tetap dapat dipelihara ketika kebutuhan berubah, layanan pendukung mengalami perubahan, atau aplikasi mendapatkan pembaruan berikutnya.&lt;/p&gt;

&lt;p&gt;Hal ini menjadi semakin penting untuk fitur yang bergantung pada layanan eksternal, seperti siaran langsung. Informasi stream dapat berubah atau kedaluwarsa, sementara kondisi layanan di luar aplikasi tidak selalu dapat dikendalikan sepenuhnya.&lt;/p&gt;

&lt;p&gt;Karena itu, saya tidak ingin pemutar MTA TV hanya bergantung pada konfigurasi yang ditanamkan secara permanen di dalam aplikasi.&lt;/p&gt;

&lt;p&gt;Pemutar native dirancang untuk memperoleh informasi pemutaran dari server, termasuk stream yang tersedia, pilihan kualitas video, dan pengaturan pemutar. Dengan pendekatan ini, aplikasi dapat menggunakan konfigurasi yang disediakan layanan saat pengguna membuka pemutar.&lt;/p&gt;

&lt;p&gt;Jika informasi stream tidak lagi dapat digunakan, aplikasi dapat mencoba mengambil informasi pemutaran yang baru. Apabila jalur pemutaran native tetap tidak dapat digunakan, tersedia mekanisme untuk kembali ke pengalaman siaran berbasis web.&lt;/p&gt;

&lt;p&gt;Bagi pengguna, yang penting bukan bagaimana informasi tersebut dipertukarkan antara aplikasi dan server. Yang penting adalah aplikasi memiliki mekanisme untuk menangani kondisi ketika pemutaran utama tidak tersedia.&lt;/p&gt;

&lt;p&gt;Di sisi pengembangan, pendekatan ini membutuhkan kontrak yang jelas antara aplikasi dan layanan server. Keduanya perlu memiliki kesepakatan mengenai struktur informasi, perilaku yang diharapkan, dan cara perubahan dilakukan tanpa merusak kompatibilitas.&lt;/p&gt;

&lt;p&gt;Perubahan pada layanan tidak seharusnya sembarangan mengubah arti informasi yang sudah digunakan oleh aplikasi. Informasi baru juga perlu dirancang agar aplikasi yang belum mengenalnya tetap dapat berfungsi dengan benar.&lt;/p&gt;

&lt;p&gt;Ini bukan berarti gangguan akan selalu dapat dihindari. Namun, sistem dengan batasan dan mekanisme pemulihan yang jelas akan lebih siap menghadapi perubahan dibandingkan sistem yang hanya mengandalkan kondisi ideal.&lt;/p&gt;

&lt;p&gt;Bagi saya, inilah bagian penting dari pengembangan jangka panjang: bukan hanya membuat sesuatu bekerja hari ini, tetapi juga memikirkan bagaimana menjaganya tetap dapat digunakan dan dikembangkan pada masa mendatang.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apa yang Berubah pada MTA ONE 4.0.8?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fitur baru&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pemutar video MTA TV native yang terintegrasi dengan aplikasi.&lt;/li&gt;
&lt;li&gt;Pilihan kualitas video sesuai stream yang tersedia.&lt;/li&gt;
&lt;li&gt;Peralihan orientasi potret dan lanskap dengan satu sentuhan.&lt;/li&gt;
&lt;li&gt;Mode layar penuh untuk menonton dalam orientasi lanskap.&lt;/li&gt;
&lt;li&gt;Pemutaran audio siaran langsung MTA TV.&lt;/li&gt;
&lt;li&gt;Pemutar audio rekaman dengan tampilan layar penuh, sampul lebih besar, animasi gelombang audio, bilah pemutaran, serta tombol mundur dan maju 10 detik.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Peningkatan&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tampilan pemuatan dan kesalahan pemutaran yang lebih jelas.&lt;/li&gt;
&lt;li&gt;Pilihan Coba lagi dan Sambung ulang ketika terjadi gangguan siaran.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Melanjutkan Pengembangan
&lt;/h2&gt;

&lt;p&gt;Saya ingin MTA ONE terus berkembang berdasarkan kebutuhan penggunaan yang nyata. Bukan sekadar menambah fitur demi membuat daftar pembaruan terlihat panjang, tetapi memperbaiki pengalaman yang sudah ada dan menjaga agar fitur tersebut tetap dapat diandalkan.&lt;/p&gt;

&lt;p&gt;Versi 4.0.8 membawa perubahan yang cukup berarti pada pengalaman menonton dan mendengarkan siaran. Namun, pekerjaan pengembangan tidak berhenti pada rilis ini.&lt;/p&gt;

&lt;p&gt;Masih ada hal-hal yang perlu diuji, dievaluasi, dan diperbaiki seiring penggunaan aplikasi dan perubahan layanan pendukungnya.&lt;/p&gt;

&lt;p&gt;Bagi saya, membangun aplikasi bukan hanya tentang menyelesaikan fitur. Ini juga tentang mengambil keputusan yang tepat agar aplikasi dapat terus dikembangkan tanpa mengabaikan stabilitas dan kebutuhan penggunanya.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coba MTA ONE
&lt;/h2&gt;

&lt;p&gt;MTA ONE dikembangkan untuk memudahkan akses ke MTA TV, radio online, rekaman audio, brosur mingguan, jadwal salat, dan berbagai informasi MTA dalam satu aplikasi.&lt;/p&gt;

&lt;p&gt;Jika ingin mengenal MTA ONE lebih jauh dan melihat informasi lengkap mengenai fitur-fiturnya, kunjungi halaman berikut:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://flagodna.com/mta-one/" rel="noopener noreferrer"&gt;Lihat MTA ONE dan unduh aplikasinya secara gratis →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cahyanudien Aziz Saputra — pengembang independen di balik FlagoDNA.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;MTA ONE v4.0.8 · 14 Oktober 2026&lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>I Missed Flutter's debugPrint After Moving to Kotlin</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Fri, 02 Oct 2026 16:35:56 +0000</pubDate>
      <link>https://dev.to/cas8398/i-missed-flutters-debugprint-after-moving-to-kotlin-10ko</link>
      <guid>https://dev.to/cas8398/i-missed-flutters-debugprint-after-moving-to-kotlin-10ko</guid>
      <description>&lt;p&gt;For more than three years, Flutter was my main environment for building applications.&lt;/p&gt;

&lt;p&gt;Recently, I started working on several new projects with Kotlin and Jetpack Compose.&lt;/p&gt;

&lt;p&gt;There was no dramatic problem.&lt;/p&gt;

&lt;p&gt;Kotlin was fine. Android's tooling was fine. And Android already had a perfectly capable logging API.&lt;/p&gt;

&lt;p&gt;But there was one small thing that kept bothering me.&lt;/p&gt;

&lt;p&gt;Logging felt unnecessarily repetitive.&lt;/p&gt;

&lt;p&gt;In Flutter, I could simply write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight dart"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'User loaded: &lt;/span&gt;&lt;span class="si"&gt;$user&lt;/span&gt;&lt;span class="s"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In Kotlin, the equivalent usually looks more like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"MainActivity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"User loaded: $user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, this is not a serious problem.&lt;/p&gt;

&lt;p&gt;It's a few extra characters.&lt;/p&gt;

&lt;p&gt;But when you write something dozens or hundreds of times during development, these tiny decisions start becoming part of your workflow.&lt;/p&gt;

&lt;p&gt;I kept thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I don't need another logging framework. I just want the convenience I was used to.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So I built one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/cas8398/debugprint" rel="noopener noreferrer"&gt;https://github.com/cas8398/debugprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maven Central:&lt;/strong&gt; &lt;a href="https://central.sonatype.com/artifact/com.flagodna/debugprint" rel="noopener noreferrer"&gt;https://central.sonatype.com/artifact/com.flagodna/debugprint&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Not another logging framework
&lt;/h2&gt;

&lt;p&gt;The first mistake would have been trying to build a "better Android logging framework."&lt;/p&gt;

&lt;p&gt;I wasn't interested in that.&lt;/p&gt;

&lt;p&gt;Android already has &lt;code&gt;Logcat&lt;/code&gt;, and there are plenty of mature logging libraries for applications that need structured logging, persistence, remote logging, crash reporting, or sophisticated filtering.&lt;/p&gt;

&lt;p&gt;That wasn't the problem I was trying to solve.&lt;/p&gt;

&lt;p&gt;I wanted something much smaller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Loading user..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it.&lt;/p&gt;

&lt;p&gt;A tiny convenience layer for development-time logging.&lt;/p&gt;

&lt;p&gt;That became &lt;code&gt;debugprint&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The basic idea
&lt;/h2&gt;

&lt;p&gt;The API is intentionally close to the mental model I had from Flutter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Hello"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;i&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User signed in"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;w&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Cache miss"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;e&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Request failed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;v&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Verbose information"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Custom tags are still possible when I actually care about them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Auth"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Token expired"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;e&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Database"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Query failed"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The library is not trying to hide Android's logging system.&lt;/p&gt;

&lt;p&gt;It simply removes some of the repetitive parts that I don't always need while developing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Debug means debug
&lt;/h2&gt;

&lt;p&gt;One thing I wanted from the beginning was for the library to behave like its name suggests.&lt;/p&gt;

&lt;p&gt;If I'm using it for development debugging, I don't want to manually write this everywhere:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;BuildConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;DEBUG&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;.)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So &lt;code&gt;debugprint&lt;/code&gt; automatically enables logging for debug builds and disables it for release builds.&lt;/p&gt;

&lt;p&gt;The intended workflow is simply:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Debug build   → logging enabled
Release build → logging disabled
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No initialization call.&lt;/p&gt;

&lt;p&gt;No &lt;code&gt;Application&lt;/code&gt; setup.&lt;/p&gt;

&lt;p&gt;No configuration boilerplate.&lt;/p&gt;

&lt;p&gt;Add the dependency and use it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nf"&gt;implementation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"com.flagodna:debugprint:0.1.1"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The package is available on Maven Central:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://central.sonatype.com/artifact/com.flagodna/debugprint" rel="noopener noreferrer"&gt;https://central.sonatype.com/artifact/com.flagodna/debugprint&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Automatic caller information
&lt;/h2&gt;

&lt;p&gt;Another thing I found repetitive was tags.&lt;/p&gt;

&lt;p&gt;When debugging something locally, I often don't really care about creating a meaningful logging category for every single message.&lt;/p&gt;

&lt;p&gt;I mostly care about:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Where did this message come from?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So &lt;code&gt;debugprint&lt;/code&gt; can derive the tag from the caller.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nc"&gt;Log&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"SomeClass"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Loading..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;you can simply write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Loading..."&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and get caller information such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SomeClass.someFunction:42
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;There is an obvious trade-off here.&lt;/p&gt;

&lt;p&gt;Finding the caller requires inspecting the stack, and stack walking is not free.&lt;/p&gt;

&lt;p&gt;So automatic tagging can be disabled when necessary:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="nc"&gt;DebugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;autoTag&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And when I already know the tag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Database"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"Loaded 120 records"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;there is no reason to pay for automatic caller detection.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lazy messages
&lt;/h2&gt;

&lt;p&gt;This was probably one of the more important design decisions.&lt;/p&gt;

&lt;p&gt;Consider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"User: $user"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The message has to be constructed before the logging function receives it.&lt;/p&gt;

&lt;p&gt;That may be completely fine for a small string.&lt;/p&gt;

&lt;p&gt;But sometimes the value you're formatting is expensive.&lt;/p&gt;

&lt;p&gt;So &lt;code&gt;debugprint&lt;/code&gt; also accepts a lambda:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s"&gt;"User: ${expensiveOperation()}"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When debug logging is disabled, the lambda is not evaluated.&lt;/p&gt;

&lt;p&gt;That means the work required to construct the message can be skipped entirely.&lt;/p&gt;

&lt;p&gt;The API stays simple, but it gives me a way to avoid unnecessary work when logging is turned off.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small sink abstraction
&lt;/h2&gt;

&lt;p&gt;At first, everything simply went to Android's &lt;code&gt;Logcat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But I didn't want the implementation to be permanently tied to one output.&lt;/p&gt;

&lt;p&gt;So the library has a small sink abstraction.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;debugPrint
    ↓
  sink
    ↓
 Logcat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The sink can be replaced with a custom implementation.&lt;/p&gt;

&lt;p&gt;That could be useful for something like writing development logs to a file or forwarding them somewhere else.&lt;/p&gt;

&lt;p&gt;The important part for me is that the core API doesn't have to change.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can remain the same even if the destination changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Logging should not break the app
&lt;/h2&gt;

&lt;p&gt;There is one more rule I wanted to keep:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A logging failure should never become an application failure.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If a custom sink throws an exception, &lt;code&gt;debugprint&lt;/code&gt; treats that as a logging problem rather than an application problem.&lt;/p&gt;

&lt;p&gt;In other words:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;logging fails
     ↓
application continues
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A debug utility should not be capable of taking down the application it is helping me inspect.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I deliberately did not build
&lt;/h2&gt;

&lt;p&gt;There are many things I could have added.&lt;/p&gt;

&lt;p&gt;Timestamps.&lt;/p&gt;

&lt;p&gt;Colors.&lt;/p&gt;

&lt;p&gt;JSON formatting.&lt;/p&gt;

&lt;p&gt;Log persistence.&lt;/p&gt;

&lt;p&gt;Remote logging.&lt;/p&gt;

&lt;p&gt;Crash reporting.&lt;/p&gt;

&lt;p&gt;Network transport.&lt;/p&gt;

&lt;p&gt;Analytics.&lt;/p&gt;

&lt;p&gt;A configuration dashboard.&lt;/p&gt;

&lt;p&gt;And probably another hundred "useful" features.&lt;/p&gt;

&lt;p&gt;I intentionally left them out.&lt;/p&gt;

&lt;p&gt;The point of &lt;code&gt;debugprint&lt;/code&gt; is not to become a complete logging ecosystem.&lt;/p&gt;

&lt;p&gt;It is supposed to stay small.&lt;/p&gt;

&lt;p&gt;If I need a production logging system, I should use a production logging system.&lt;/p&gt;

&lt;p&gt;If I just want to write:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight kotlin"&gt;&lt;code&gt;&lt;span class="n"&gt;debugPrint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;d&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"Why is this null?"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I want that to be easy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why make it a public library?
&lt;/h2&gt;

&lt;p&gt;Honestly, the original motivation was personal.&lt;/p&gt;

&lt;p&gt;I was working on several Kotlin projects and wanted the same small convenience in all of them.&lt;/p&gt;

&lt;p&gt;So initially, this could have remained a private utility inside one project.&lt;/p&gt;

&lt;p&gt;Instead, I decided to turn it into my first published Kotlin/Android library and put it on Maven Central.&lt;/p&gt;

&lt;p&gt;That made the project slightly more interesting.&lt;/p&gt;

&lt;p&gt;Once something becomes a reusable library, even a tiny one, you have to think about API design differently.&lt;/p&gt;

&lt;p&gt;You start asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is this API actually understandable?&lt;/li&gt;
&lt;li&gt;Is the default behavior sensible?&lt;/li&gt;
&lt;li&gt;What should happen in release builds?&lt;/li&gt;
&lt;li&gt;What are the performance trade-offs?&lt;/li&gt;
&lt;li&gt;How much configuration is enough?&lt;/li&gt;
&lt;li&gt;What should never be part of the public API?&lt;/li&gt;
&lt;li&gt;Can I keep the dependency footprint small?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A utility that took a short time to write becomes a small exercise in software design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is this something everyone needs?
&lt;/h2&gt;

&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;And I think that's worth saying explicitly.&lt;/p&gt;

&lt;p&gt;Android already provides logging.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Logcat&lt;/code&gt; is not missing.&lt;/p&gt;

&lt;p&gt;There are already many mature logging libraries.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;debugprint&lt;/code&gt; is not trying to replace them.&lt;/p&gt;

&lt;p&gt;This library exists because I spent more than three years using one development workflow, moved to another ecosystem, and realized that I missed one tiny piece of that workflow.&lt;/p&gt;

&lt;p&gt;That's a very small reason to create a library.&lt;/p&gt;

&lt;p&gt;But sometimes small reasons are enough.&lt;/p&gt;

&lt;p&gt;For me, the interesting part wasn't inventing a new logging technology.&lt;/p&gt;

&lt;p&gt;It was noticing how much developer experience is made up of tiny conveniences that become invisible once you use them every day.&lt;/p&gt;

&lt;p&gt;After years of writing Flutter code, &lt;code&gt;debugPrint()&lt;/code&gt; had become one of those conveniences.&lt;/p&gt;

&lt;p&gt;So I brought the idea with me.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flutter
  ↓
debugPrint()
  ↓
years of muscle memory
  ↓
Kotlin
  ↓
"Why am I writing this tag again?"
  ↓
debugprint
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;My first Kotlin/Android library probably isn't going to change how people log on Android.&lt;/p&gt;

&lt;p&gt;It wasn't supposed to.&lt;/p&gt;

&lt;p&gt;I just wanted my new Kotlin projects to feel a little more familiar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Links
&lt;/h3&gt;

&lt;p&gt;GitHub repository:&lt;br&gt;
&lt;a href="https://github.com/cas8398/debugprint" rel="noopener noreferrer"&gt;https://github.com/cas8398/debugprint&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Maven Central:&lt;br&gt;
&lt;a href="https://central.sonatype.com/artifact/com.flagodna/debugprint" rel="noopener noreferrer"&gt;https://central.sonatype.com/artifact/com.flagodna/debugprint&lt;/a&gt;&lt;/p&gt;

</description>
      <category>kotlin</category>
      <category>android</category>
      <category>flutter</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Introducing the FlagoDNA Roadmap: Building in Public with Purpose</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Sat, 19 Sep 2026 06:58:44 +0000</pubDate>
      <link>https://dev.to/cas8398/introducing-the-flagodna-roadmap-building-in-public-with-purpose-35j6</link>
      <guid>https://dev.to/cas8398/introducing-the-flagodna-roadmap-building-in-public-with-purpose-35j6</guid>
      <description>&lt;p&gt;Today, I published the FlagoDNA Roadmap.&lt;/p&gt;

&lt;p&gt;This roadmap is created as a way to share the direction of FlagoDNA more openly — what we are building, what we are improving, and what ideas we are exploring for the future.&lt;/p&gt;

&lt;p&gt;FlagoDNA has always been built around a simple idea: technology should respect people.&lt;/p&gt;

&lt;p&gt;That means building software with a focus on privacy, simplicity, and long-term independence. No unnecessary tracking. No attention-driven design. Just tools that are useful and respectful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a roadmap?
&lt;/h2&gt;

&lt;p&gt;As FlagoDNA grows, more people are using its applications across different needs — from daily Muslim utilities to productivity and small business tools.&lt;/p&gt;

&lt;p&gt;A roadmap helps users understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What projects are currently being developed&lt;/li&gt;
&lt;li&gt;What improvements are coming next&lt;/li&gt;
&lt;li&gt;What ideas are still being explored&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is also a way for me, as an independent developer, to stay accountable to the direction of the ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the roadmap works
&lt;/h2&gt;

&lt;p&gt;The roadmap is divided into three stages:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now&lt;/strong&gt;&lt;br&gt;
Projects and improvements currently being worked on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next&lt;/strong&gt;&lt;br&gt;
Planned projects and updates that are being prepared.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Later&lt;/strong&gt;&lt;br&gt;
Long-term ideas that may be explored when the time and resources are right.&lt;/p&gt;

&lt;p&gt;The roadmap is not a fixed promise or a strict schedule. Development priorities can change based on user feedback, technical considerations, and available capacity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Focus
&lt;/h2&gt;

&lt;p&gt;Some of the current areas of development include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;HadisKu improvements with the next beta updates&lt;/li&gt;
&lt;li&gt;KasirCepat feature expansion&lt;/li&gt;
&lt;li&gt;Future exploration of projects like Muslim Launcher and Tiketea&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each project has its own journey, and the goal is to continue improving them step by step.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building Slowly, Building Meaningfully
&lt;/h2&gt;

&lt;p&gt;FlagoDNA is built independently, which means progress may sometimes be slower compared to larger companies with bigger teams.&lt;/p&gt;

&lt;p&gt;But independence also allows us to focus on what matters:&lt;/p&gt;

&lt;p&gt;Creating software that is simple, privacy-conscious, and built with respect for users.&lt;/p&gt;

&lt;p&gt;The roadmap is one small step toward making that journey more visible.&lt;/p&gt;

&lt;p&gt;You can view the FlagoDNA Roadmap here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://flagodna.com/roadmap/" rel="noopener noreferrer"&gt;https://flagodna.com/roadmap/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you to everyone who uses, supports, and follows the development of FlagoDNA.&lt;/p&gt;

&lt;p&gt;—&lt;br&gt;
Cahyanudien Aziz Saputra&lt;br&gt;
Founder of FlagoDNA&lt;/p&gt;

</description>
    </item>
    <item>
      <title>I Built Lens Browser Because the Internet Never Forgets</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Tue, 08 Sep 2026 07:45:25 +0000</pubDate>
      <link>https://dev.to/cas8398/i-built-lens-browser-because-the-internet-never-forgets-4a9a</link>
      <guid>https://dev.to/cas8398/i-built-lens-browser-because-the-internet-never-forgets-4a9a</guid>
      <description>&lt;p&gt;Every time we open a website, something happens behind the screen.&lt;/p&gt;

&lt;p&gt;A request is sent.&lt;/p&gt;

&lt;p&gt;A connection is created.&lt;/p&gt;

&lt;p&gt;Scripts are loaded.&lt;/p&gt;

&lt;p&gt;Trackers start working.&lt;/p&gt;

&lt;p&gt;And quietly, information about us begins to leave.&lt;/p&gt;

&lt;p&gt;Most people never see it.&lt;/p&gt;

&lt;p&gt;They simply open a page, search for something, read an article, or watch a video — while invisible systems collect signals about their behavior.&lt;/p&gt;

&lt;p&gt;The modern internet is powerful.&lt;/p&gt;

&lt;p&gt;But that power often comes with a hidden cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Our data.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Data Is Not Free
&lt;/h2&gt;

&lt;p&gt;Browsing history.&lt;/p&gt;

&lt;p&gt;Interests.&lt;/p&gt;

&lt;p&gt;Device information.&lt;/p&gt;

&lt;p&gt;Location signals.&lt;/p&gt;

&lt;p&gt;Online behavior.&lt;/p&gt;

&lt;p&gt;These things have value.&lt;/p&gt;

&lt;p&gt;Companies build products around this data. Advertisers use it to understand people. Analytics systems use it to measure behavior.&lt;/p&gt;

&lt;p&gt;But the question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do we really know how much of ourselves we give away every day?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Privacy should not be something only available to people who understand complicated settings.&lt;/p&gt;

&lt;p&gt;It should be the default.&lt;/p&gt;

&lt;p&gt;That is why I started building Lens Browser.&lt;/p&gt;




&lt;h2&gt;
  
  
  Not Another Browser
&lt;/h2&gt;

&lt;p&gt;There are already many browsers.&lt;/p&gt;

&lt;p&gt;Some are fast.&lt;/p&gt;

&lt;p&gt;Some have beautiful interfaces.&lt;/p&gt;

&lt;p&gt;Some have millions of users.&lt;/p&gt;

&lt;p&gt;I did not build Lens Browser because the world needed another browser.&lt;/p&gt;

&lt;p&gt;I built it because I wanted a browser that starts from a different idea:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The user should be in control.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A browser should be a window to the internet.&lt;/p&gt;

&lt;p&gt;Not a tool that quietly watches the person looking through that window.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privacy by Default
&lt;/h2&gt;

&lt;p&gt;Lens Browser was designed around a simple principle:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Browse privately. No compromise.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dual-layer ad blocking using connection-level filtering and JavaScript interception&lt;/li&gt;
&lt;li&gt;Anti-fingerprinting protection through Privacy Mode&lt;/li&gt;
&lt;li&gt;Automatic deletion of history, cookies, and cached data when closing the app&lt;/li&gt;
&lt;li&gt;Threat detection before dangerous pages fully load&lt;/li&gt;
&lt;li&gt;Trusted and blocked domain management&lt;/li&gt;
&lt;li&gt;Lightweight design with no account required&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No sign-up.&lt;/p&gt;

&lt;p&gt;No profile.&lt;/p&gt;

&lt;p&gt;No unnecessary tracking.&lt;/p&gt;

&lt;p&gt;Just open and browse.&lt;/p&gt;




&lt;h2&gt;
  
  
  Built Small, Built Carefully
&lt;/h2&gt;

&lt;p&gt;Lens Browser is built with modern Android technology:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kotlin&lt;/li&gt;
&lt;li&gt;Jetpack Compose&lt;/li&gt;
&lt;li&gt;MVVM architecture&lt;/li&gt;
&lt;li&gt;Android WebView with custom privacy layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The app is lightweight, around 10 MB, and supports Android 6.0+.&lt;/p&gt;

&lt;p&gt;It is also open source under the MIT License.&lt;/p&gt;

&lt;p&gt;I believe privacy tools should be transparent.&lt;/p&gt;

&lt;p&gt;People should be able to understand what they use.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Internet Was Built to Connect People
&lt;/h2&gt;

&lt;p&gt;Technology should make life better.&lt;/p&gt;

&lt;p&gt;It should help people discover, communicate, and create.&lt;/p&gt;

&lt;p&gt;But as the internet evolves, we should not forget one important thing:&lt;/p&gt;

&lt;p&gt;Behind every device is a person.&lt;/p&gt;

&lt;p&gt;Not a data point.&lt;/p&gt;

&lt;p&gt;Not a profile.&lt;/p&gt;

&lt;p&gt;Not a target.&lt;/p&gt;

&lt;p&gt;A person.&lt;/p&gt;

&lt;p&gt;Lens Browser is my small contribution toward a more private internet.&lt;/p&gt;

&lt;p&gt;A reminder that privacy still matters.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try Lens Browser
&lt;/h2&gt;

&lt;p&gt;Lens Browser is available for Android.&lt;/p&gt;

&lt;p&gt;Download:&lt;br&gt;
&lt;a href="https://flagodna.com/lens-browser/" rel="noopener noreferrer"&gt;https://flagodna.com/lens-browser/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>buildinpublic</category>
      <category>privacy</category>
      <category>showdev</category>
      <category>software</category>
    </item>
    <item>
      <title>Rebuilding MTA ONE v4: Why I Simplified an App That Already Worked</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Tue, 25 Aug 2026 06:04:31 +0000</pubDate>
      <link>https://dev.to/cas8398/rebuilding-mta-one-v4-why-i-simplified-an-app-that-already-worked-1p1p</link>
      <guid>https://dev.to/cas8398/rebuilding-mta-one-v4-why-i-simplified-an-app-that-already-worked-1p1p</guid>
      <description>&lt;p&gt;Sometimes, rebuilding an application is not because the old version is broken.&lt;/p&gt;

&lt;p&gt;Sometimes, it is because the application has become too complicated.&lt;/p&gt;

&lt;p&gt;MTA ONE was already working. Users could watch MTA TV, listen to online radio, read weekly brochures, and access several other features.&lt;/p&gt;

&lt;p&gt;But after years of development, I started to realize something:&lt;/p&gt;

&lt;p&gt;The application was trying to become too many things at once.&lt;/p&gt;

&lt;p&gt;And as a solo developer, maintaining everything with the same quality was becoming harder.&lt;/p&gt;

&lt;p&gt;That is why I decided to rebuild MTA ONE version 4.&lt;/p&gt;

&lt;p&gt;Not by adding more features.&lt;/p&gt;

&lt;p&gt;But by simplifying it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem Was Not the Code
&lt;/h2&gt;

&lt;p&gt;When an application grows, adding features feels like progress.&lt;/p&gt;

&lt;p&gt;A new menu here.&lt;br&gt;&lt;br&gt;
A new category there.&lt;br&gt;&lt;br&gt;
Another useful feature for users.&lt;/p&gt;

&lt;p&gt;At some point, the application becomes larger, but not necessarily better.&lt;/p&gt;

&lt;p&gt;Some features require continuous maintenance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Updating content&lt;/li&gt;
&lt;li&gt;Managing data&lt;/li&gt;
&lt;li&gt;Fixing edge cases&lt;/li&gt;
&lt;li&gt;Handling user reports&lt;/li&gt;
&lt;li&gt;Testing across different devices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These tasks are manageable when there is a dedicated team.&lt;/p&gt;

&lt;p&gt;But I am building and maintaining multiple applications by myself.&lt;/p&gt;

&lt;p&gt;So I needed to make a decision.&lt;/p&gt;

&lt;p&gt;Should I keep expanding MTA ONE into an application with many unrelated features?&lt;/p&gt;

&lt;p&gt;Or should I return to the core purpose?&lt;/p&gt;

&lt;p&gt;I chose the second option.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Flutter to Kotlin Native
&lt;/h2&gt;

&lt;p&gt;One of the biggest changes in MTA ONE v4 is the technology behind it.&lt;/p&gt;

&lt;p&gt;The previous version was built with Flutter.&lt;/p&gt;

&lt;p&gt;For version 4, I rebuilt it using Kotlin Native with Jetpack Compose.&lt;/p&gt;

&lt;p&gt;The migration started around &lt;strong&gt;August 19, 2026&lt;/strong&gt;, and the new version was released on &lt;strong&gt;August 21, 2026&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The reason was not because Flutter was bad.&lt;/p&gt;

&lt;p&gt;Flutter helped me build the previous version faster.&lt;/p&gt;

&lt;p&gt;But for this application, I wanted more control over the Android experience, especially for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Media playback&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;System integration&lt;/li&gt;
&lt;li&gt;Long-term maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moving to native Android gives me a stronger foundation for future development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Removing Features Was a Difficult Decision
&lt;/h2&gt;

&lt;p&gt;The previous MTA ONE version had several features that were useful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Qibla direction&lt;/li&gt;
&lt;li&gt;Offline Quran&lt;/li&gt;
&lt;li&gt;Prayer guidance&lt;/li&gt;
&lt;li&gt;Daily prayers&lt;/li&gt;
&lt;li&gt;Hijri calendar&lt;/li&gt;
&lt;li&gt;Weather information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, useful does not always mean it should stay inside the application.&lt;/p&gt;

&lt;p&gt;Every feature has a cost.&lt;/p&gt;

&lt;p&gt;A feature is not only about writing code once.&lt;/p&gt;

&lt;p&gt;It requires maintenance afterward.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;A weather feature requires weather data.&lt;/p&gt;

&lt;p&gt;A Quran feature requires content management.&lt;/p&gt;

&lt;p&gt;A calendar feature requires accuracy and updates.&lt;/p&gt;

&lt;p&gt;When many features are combined into one application, the responsibility grows significantly.&lt;/p&gt;

&lt;p&gt;I realized that if I wanted MTA ONE to continue improving, I needed to reduce the scope.&lt;/p&gt;

&lt;h2&gt;
  
  
  Returning to the Core of MTA ONE
&lt;/h2&gt;

&lt;p&gt;MTA ONE is now focused on the features that are directly connected with MTA content.&lt;/p&gt;

&lt;h3&gt;
  
  
  MTA TV
&lt;/h3&gt;

&lt;p&gt;The main video experience remains.&lt;/p&gt;

&lt;p&gt;Users can watch MTA TV directly from the application with a simpler interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Online Radio
&lt;/h3&gt;

&lt;p&gt;MTA ONE provides access to online radio channels from different regions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Persada FM — Solo / Sragen&lt;/li&gt;
&lt;li&gt;Suara Kesuma FM — Wonosobo&lt;/li&gt;
&lt;li&gt;Persada FM Pacitan — Pacitan&lt;/li&gt;
&lt;li&gt;Persada Bali FM — Bali&lt;/li&gt;
&lt;li&gt;Skar FM — Madiun&lt;/li&gt;
&lt;li&gt;Kharisma FM — Pontianak&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Open the application, select a channel, and listen.&lt;/p&gt;

&lt;h3&gt;
  
  
  Weekly Brochure
&lt;/h3&gt;

&lt;p&gt;Users can access the latest MTA weekly brochures.&lt;/p&gt;

&lt;p&gt;Instead of keeping a large archive, MTA ONE focuses on providing the latest content that users frequently need.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prayer Schedule
&lt;/h3&gt;

&lt;p&gt;Prayer schedules are still available for cities and districts across Indonesia.&lt;/p&gt;

&lt;h3&gt;
  
  
  MTA Updates and Information
&lt;/h3&gt;

&lt;p&gt;Users can also access:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Latest MTA news&lt;/li&gt;
&lt;li&gt;MTA profile&lt;/li&gt;
&lt;li&gt;Official study location information&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Smaller Application, A Better Direction
&lt;/h2&gt;

&lt;p&gt;This rebuild taught me something:&lt;/p&gt;

&lt;p&gt;More features do not always create a better application.&lt;/p&gt;

&lt;p&gt;Sometimes, removing features allows the important parts to become better.&lt;/p&gt;

&lt;p&gt;MTA ONE v4 is not a bigger application than before.&lt;/p&gt;

&lt;p&gt;It is a more focused application.&lt;/p&gt;

&lt;p&gt;With a smaller scope, I can spend more time improving:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stability&lt;/li&gt;
&lt;li&gt;Performance&lt;/li&gt;
&lt;li&gt;User experience&lt;/li&gt;
&lt;li&gt;Long-term maintenance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a solo developer, focus is not just a preference.&lt;/p&gt;

&lt;p&gt;It is a requirement.&lt;/p&gt;

&lt;p&gt;MTA ONE v4 is the next step in that direction.&lt;/p&gt;

&lt;p&gt;A simpler foundation for future improvements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try MTA ONE v4
&lt;/h2&gt;

&lt;p&gt;MTA ONE v4 is now available.&lt;/p&gt;

&lt;p&gt;You can download it from Google Play:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.mtaone" rel="noopener noreferrer"&gt;Download MTA ONE&lt;/a&gt;&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>productivity</category>
      <category>software</category>
    </item>
    <item>
      <title>Rebuilding Brosur MTA Lengkap: Why I Rebuilt an App That Already Worked</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Tue, 04 Aug 2026 04:23:48 +0000</pubDate>
      <link>https://dev.to/cas8398/rebuilding-brosur-mta-lengkap-why-i-rebuilt-an-app-that-already-worked-2p96</link>
      <guid>https://dev.to/cas8398/rebuilding-brosur-mta-lengkap-why-i-rebuilt-an-app-that-already-worked-2p96</guid>
      <description>&lt;p&gt;Sometimes the hardest decision in software development is not adding a new feature.&lt;/p&gt;

&lt;p&gt;It is deciding to rebuild something that already works.&lt;/p&gt;

&lt;p&gt;On August 3, 2026, I released Brosur MTA Lengkap version 4.0.0.&lt;/p&gt;

&lt;p&gt;This release represents a major turning point.&lt;/p&gt;

&lt;p&gt;It is not just an update.&lt;/p&gt;

&lt;p&gt;It is a complete rebuild.&lt;/p&gt;




&lt;h2&gt;
  
  
  The uncomfortable decision
&lt;/h2&gt;

&lt;p&gt;The previous version of Brosur MTA Lengkap was built with Flutter.&lt;/p&gt;

&lt;p&gt;Flutter helped me move quickly, experiment with ideas, and bring the application to users faster.&lt;/p&gt;

&lt;p&gt;For the early stage, it was the right decision.&lt;/p&gt;

&lt;p&gt;But over time, the application changed.&lt;/p&gt;

&lt;p&gt;It was no longer just a simple PDF reader.&lt;/p&gt;

&lt;p&gt;It became a place where users could explore thousands of Islamic materials: brochures, articles, documents, and other educational content.&lt;/p&gt;

&lt;p&gt;The needs became bigger:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster access to content.&lt;/li&gt;
&lt;li&gt;Better offline support.&lt;/li&gt;
&lt;li&gt;More reliable file management.&lt;/li&gt;
&lt;li&gt;A stronger foundation for future development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At that point, I had a choice:&lt;/p&gt;

&lt;p&gt;Continue building on the existing foundation, or rebuild it properly.&lt;/p&gt;

&lt;p&gt;I chose the harder path.&lt;/p&gt;




&lt;h2&gt;
  
  
  Rebuilding for the next phase
&lt;/h2&gt;

&lt;p&gt;Rewriting an application means accepting that some previous work will be left behind.&lt;/p&gt;

&lt;p&gt;It is not an easy decision.&lt;/p&gt;

&lt;p&gt;There is always a temptation to keep adding features because the existing application already works.&lt;/p&gt;

&lt;p&gt;But sometimes the biggest limitation is not the feature itself.&lt;/p&gt;

&lt;p&gt;It is the foundation underneath it.&lt;/p&gt;

&lt;p&gt;The goal was not simply changing technology.&lt;/p&gt;

&lt;p&gt;The goal was creating an application that could continue growing for years.&lt;/p&gt;




&lt;h2&gt;
  
  
  From an app to a digital library
&lt;/h2&gt;

&lt;p&gt;The vision for Brosur MTA Lengkap has changed.&lt;/p&gt;

&lt;p&gt;Originally, the application was mainly a way to open and read PDF brochures.&lt;/p&gt;

&lt;p&gt;Now, I see it as a small digital library.&lt;/p&gt;

&lt;p&gt;A library needs more than documents.&lt;/p&gt;

&lt;p&gt;It needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A simple way to discover content.&lt;/li&gt;
&lt;li&gt;A reliable way to read.&lt;/li&gt;
&lt;li&gt;A way to save important materials.&lt;/li&gt;
&lt;li&gt;A way to find information quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why version 4 focuses on the complete reading experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  Designed around offline access
&lt;/h2&gt;

&lt;p&gt;One important principle behind this rebuild is offline-first.&lt;/p&gt;

&lt;p&gt;Knowledge should not disappear just because an internet connection is unavailable.&lt;/p&gt;

&lt;p&gt;Version 4 improves local storage and caching so users can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access previously loaded content faster.&lt;/li&gt;
&lt;li&gt;Keep reading history and favorites locally.&lt;/li&gt;
&lt;li&gt;Open downloaded documents.&lt;/li&gt;
&lt;li&gt;Search content without depending entirely on a server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For educational applications, reliability matters.&lt;/p&gt;

&lt;p&gt;The user should focus on learning, not on whether the connection is available.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a better way to find knowledge
&lt;/h2&gt;

&lt;p&gt;As the number of documents grows, finding information becomes a challenge.&lt;/p&gt;

&lt;p&gt;A library is only useful if people can find what they need.&lt;/p&gt;

&lt;p&gt;That is why version 4 introduces offline full-text search.&lt;/p&gt;

&lt;p&gt;The search system is designed to work with large amounts of content while providing more relevant results through ranking and language processing.&lt;/p&gt;

&lt;p&gt;The goal is simple:&lt;/p&gt;

&lt;p&gt;Help people find knowledge, not just files.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Kotlin Native?
&lt;/h2&gt;

&lt;p&gt;This rebuild also moved the application from Flutter to Kotlin Native with Jetpack Compose.&lt;/p&gt;

&lt;p&gt;This was not a decision because one technology is universally better than another.&lt;/p&gt;

&lt;p&gt;Different tools are suitable for different stages.&lt;/p&gt;

&lt;p&gt;Flutter was valuable when speed of development was the priority.&lt;/p&gt;

&lt;p&gt;But for this next phase, I wanted deeper control over Android's native capabilities and a foundation closer to the platform where the application lives.&lt;/p&gt;




&lt;h2&gt;
  
  
  A new chapter for FlagoDNA
&lt;/h2&gt;

&lt;p&gt;Brosur MTA Lengkap version 4 is part of a bigger direction for FlagoDNA.&lt;/p&gt;

&lt;p&gt;I want to build software that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Useful.&lt;/li&gt;
&lt;li&gt;Simple.&lt;/li&gt;
&lt;li&gt;Privacy-respecting.&lt;/li&gt;
&lt;li&gt;Accessible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every application needs more notifications, more tracking, or more distractions.&lt;/p&gt;

&lt;p&gt;Sometimes the best software is the one that quietly helps people accomplish something meaningful.&lt;/p&gt;

&lt;p&gt;This rebuild is one step toward that direction.&lt;/p&gt;

&lt;p&gt;Thank you to everyone who has used the application, shared feedback, and supported this project.&lt;/p&gt;

&lt;p&gt;Version 4.0.0 is not the final destination. &lt;/p&gt;

&lt;p&gt;It is a new foundation for what comes next. &lt;/p&gt;

</description>
    </item>
    <item>
      <title>Redesigning FlagoDNA Around a Mission, Not Products</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Sun, 26 Jul 2026 05:32:49 +0000</pubDate>
      <link>https://dev.to/cas8398/redesigning-flagodna-around-a-mission-not-products-54no</link>
      <guid>https://dev.to/cas8398/redesigning-flagodna-around-a-mission-not-products-54no</guid>
      <description>&lt;p&gt;Today, I launched a completely redesigned version of the FlagoDNA website.&lt;/p&gt;

&lt;p&gt;At first glance, it might look like a visual refresh.&lt;/p&gt;

&lt;p&gt;New layouts.&lt;/p&gt;

&lt;p&gt;New sections.&lt;/p&gt;

&lt;p&gt;Better typography.&lt;/p&gt;

&lt;p&gt;A cleaner design.&lt;/p&gt;

&lt;p&gt;But the biggest change isn't what you see.&lt;/p&gt;

&lt;p&gt;It's the story the website tells.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Website Wasn't the Problem
&lt;/h2&gt;

&lt;p&gt;For a long time, the FlagoDNA homepage looked like many developer websites.&lt;/p&gt;

&lt;p&gt;It showcased applications.&lt;/p&gt;

&lt;p&gt;Visitors could browse Quran Today, HadisKu, Hijri Today, and other projects I had built over the years.&lt;/p&gt;

&lt;p&gt;Technically, it worked.&lt;/p&gt;

&lt;p&gt;But something was missing.&lt;/p&gt;

&lt;p&gt;People understood &lt;strong&gt;what I had built&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Very few understood &lt;strong&gt;why I built it&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That realization completely changed how I approached the redesign.&lt;/p&gt;




&lt;h2&gt;
  
  
  I Never Wanted to Build Just Another App Portfolio
&lt;/h2&gt;

&lt;p&gt;FlagoDNA never started with a business plan.&lt;/p&gt;

&lt;p&gt;There wasn't a pitch deck.&lt;/p&gt;

&lt;p&gt;There wasn't venture capital.&lt;/p&gt;

&lt;p&gt;There wasn't even a goal to start a company.&lt;/p&gt;

&lt;p&gt;I simply wanted to solve problems I experienced myself.&lt;/p&gt;

&lt;p&gt;One application became another.&lt;/p&gt;

&lt;p&gt;Each project taught me something—not only about software engineering, but about how technology quietly shapes the way people think, communicate, focus, and even practice their faith.&lt;/p&gt;

&lt;p&gt;Eventually, I realized I wasn't just building applications anymore.&lt;/p&gt;

&lt;p&gt;I was slowly building a philosophy.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Real Problem Was Never Missing Apps
&lt;/h2&gt;

&lt;p&gt;For years, I believed people simply needed better software.&lt;/p&gt;

&lt;p&gt;Eventually, I realized something much bigger.&lt;/p&gt;

&lt;p&gt;The real problem wasn't the lack of applications.&lt;/p&gt;

&lt;p&gt;It was the digital environment surrounding them.&lt;/p&gt;

&lt;p&gt;Modern software often competes for attention.&lt;/p&gt;

&lt;p&gt;Notifications interrupt focus.&lt;/p&gt;

&lt;p&gt;Advertisements become business models.&lt;/p&gt;

&lt;p&gt;Personal data becomes a product.&lt;/p&gt;

&lt;p&gt;Algorithms encourage people to stay longer instead of helping them leave sooner.&lt;/p&gt;

&lt;p&gt;I didn't want FlagoDNA to become another company optimizing for engagement.&lt;/p&gt;

&lt;p&gt;I wanted to build technology that respected people.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Different Philosophy
&lt;/h2&gt;

&lt;p&gt;That realization became the foundation of every product I build.&lt;/p&gt;

&lt;p&gt;Before adding a feature, I ask a simple question.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does this respect the user?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question influences everything.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this feature really need an account?&lt;/li&gt;
&lt;li&gt;Does it need an internet connection?&lt;/li&gt;
&lt;li&gt;Are we collecting information we don't actually need?&lt;/li&gt;
&lt;li&gt;Is this notification necessary?&lt;/li&gt;
&lt;li&gt;Does this make life simpler—or noisier?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Those questions eventually became the principles behind FlagoDNA.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Privacy First.&lt;/li&gt;
&lt;li&gt;No Ads.&lt;/li&gt;
&lt;li&gt;No User Tracking.&lt;/li&gt;
&lt;li&gt;No Selling Personal Data.&lt;/li&gt;
&lt;li&gt;Respect Human Attention.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Technology should quietly support people—not manipulate them.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Homepage Changed
&lt;/h2&gt;

&lt;p&gt;The redesign wasn't about making the website prettier.&lt;/p&gt;

&lt;p&gt;It was about telling the right story.&lt;/p&gt;

&lt;p&gt;Previously, visitors arrived and immediately saw products.&lt;/p&gt;

&lt;p&gt;Now they first see the mission.&lt;/p&gt;

&lt;p&gt;Then the beliefs.&lt;/p&gt;

&lt;p&gt;Then the principles.&lt;/p&gt;

&lt;p&gt;Only after understanding those things do they discover the products.&lt;/p&gt;

&lt;p&gt;Because Quran Today, HadisKu, Hijri Today, and every future project are not the story.&lt;/p&gt;

&lt;p&gt;They're the proof.&lt;/p&gt;

&lt;p&gt;They exist because they share the same philosophy.&lt;/p&gt;




&lt;h2&gt;
  
  
  Looking Beyond Individual Applications
&lt;/h2&gt;

&lt;p&gt;Another reason for the redesign was to communicate where FlagoDNA is heading.&lt;/p&gt;

&lt;p&gt;Many people naturally see FlagoDNA as an Android app developer.&lt;/p&gt;

&lt;p&gt;That isn't wrong.&lt;/p&gt;

&lt;p&gt;But it isn't the complete picture anymore.&lt;/p&gt;

&lt;p&gt;The long-term vision is much broader.&lt;/p&gt;

&lt;p&gt;FlagoDNA is gradually building a privacy-first digital ecosystem for Muslims.&lt;/p&gt;

&lt;p&gt;Applications are only the beginning.&lt;/p&gt;

&lt;p&gt;In the future, that ecosystem may include trusted AI, launcher experiences, shared infrastructure, developer tools, and other technologies that help Muslims embrace modern technology without sacrificing their faith, personal privacy, or attention.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building for the Long Term
&lt;/h2&gt;

&lt;p&gt;Many technology companies optimize for growth.&lt;/p&gt;

&lt;p&gt;More engagement.&lt;/p&gt;

&lt;p&gt;More impressions.&lt;/p&gt;

&lt;p&gt;More advertisements.&lt;/p&gt;

&lt;p&gt;More data.&lt;/p&gt;

&lt;p&gt;I believe there is another way.&lt;/p&gt;

&lt;p&gt;If someone opens one of my applications, accomplishes what they came to do, and then puts their phone away—that's success.&lt;/p&gt;

&lt;p&gt;Technology shouldn't compete with life.&lt;/p&gt;

&lt;p&gt;It should quietly support it.&lt;/p&gt;




&lt;h2&gt;
  
  
  More Than a New Website
&lt;/h2&gt;

&lt;p&gt;Looking back, I don't think the previous website was bad.&lt;/p&gt;

&lt;p&gt;It simply reflected an earlier stage of FlagoDNA.&lt;/p&gt;

&lt;p&gt;Back then, I was focused on showing what I had built.&lt;/p&gt;

&lt;p&gt;Today, I'm equally focused on explaining why it exists.&lt;/p&gt;

&lt;p&gt;The redesign marks an important shift.&lt;/p&gt;

&lt;p&gt;Not from one design to another.&lt;/p&gt;

&lt;p&gt;But from presenting products to communicating a mission.&lt;/p&gt;

&lt;p&gt;I hope that when someone visits FlagoDNA today, they don't simply think,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"This developer builds Android apps."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead, I hope they leave understanding something much more important.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;FlagoDNA is building technology that respects faith, protects personal privacy, and values human attention.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Explore the New FlagoDNA
&lt;/h2&gt;

&lt;p&gt;If you've followed my work over the years, thank you.&lt;/p&gt;

&lt;p&gt;And if this is your first time hearing about FlagoDNA, welcome.&lt;/p&gt;

&lt;p&gt;I invite you to explore the new website and discover the mission, beliefs, products, founder story, and long-term vision behind everything we're building.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 &lt;a href="https://flagodna.com" rel="noopener noreferrer"&gt;https://flagodna.com&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd genuinely love to hear your thoughts.&lt;/p&gt;

&lt;p&gt;Every conversation, suggestion, and piece of feedback helps shape what FlagoDNA becomes next.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>The Story Behind Quran Today, the Ad-Free Quran App I Built for Myself</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Fri, 17 Jul 2026 04:17:27 +0000</pubDate>
      <link>https://dev.to/cas8398/the-story-behind-quran-today-the-ad-free-quran-app-i-built-for-myself-1194</link>
      <guid>https://dev.to/cas8398/the-story-behind-quran-today-the-ad-free-quran-app-i-built-for-myself-1194</guid>
      <description>&lt;h3&gt;
  
  
  Why I stopped looking for an "Islamic super app" and built the simplest Quran app I could open every single day
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;(formerly known as FastiQuran)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I didn't build Quran Today because I thought the existing Quran apps were bad.&lt;/p&gt;

&lt;p&gt;Quite the opposite. Many of them are genuinely excellent.&lt;/p&gt;

&lt;p&gt;I built it because I was looking for a different kind of Quran reading experience — a free Quran app, with no ads, and no extra steps standing between me and actually reading.&lt;/p&gt;




&lt;h2&gt;
  
  
  It Started With Something Simple
&lt;/h2&gt;

&lt;p&gt;I only had two Quran apps on my phone. Both are among the most popular on the Play Store, and honestly, they deserve to be.&lt;/p&gt;

&lt;p&gt;They're packed with features. Prayer times, qibla direction, daily duas, dzikir, tafsir, translations, recitations from dozens of qaris, worship reminders, and a long list of other supporting tools.&lt;/p&gt;

&lt;p&gt;I never saw that as a flaw.&lt;/p&gt;

&lt;p&gt;The problem was on my end.&lt;/p&gt;

&lt;p&gt;I realized that almost every time I opened one of those apps, I was only trying to do one thing.&lt;/p&gt;

&lt;p&gt;I wanted to keep reading the Quran. Nothing more.&lt;/p&gt;

&lt;p&gt;I never opened the qibla compass. I rarely checked prayer times. I almost never touched the extra features — features that were, honestly, very well made.&lt;/p&gt;

&lt;p&gt;All I wanted was one simple experience.&lt;/p&gt;

&lt;p&gt;Open the app. Return to the last verse. Read. Done.&lt;/p&gt;

&lt;p&gt;Over time, it started to feel like Quran apps were quietly turning into &lt;strong&gt;Islamic super apps&lt;/strong&gt; — while all I wanted was a quiet, digital mushaf.&lt;/p&gt;




&lt;h2&gt;
  
  
  I Wasn't Looking for More Features
&lt;/h2&gt;

&lt;p&gt;So I started asking myself a question. If my needs were this simple, why did the apps I used keep getting more complex?&lt;/p&gt;

&lt;p&gt;More menus. More screens. More things to click through before I could actually start reading.&lt;/p&gt;

&lt;p&gt;Even the app size kept growing, carrying capabilities that might be useful to someone, somewhere — but that I almost never used.&lt;/p&gt;

&lt;p&gt;I began to think that maybe I didn't need a more complete app.&lt;/p&gt;

&lt;p&gt;What I actually needed was an app that was more honest about its one real purpose: helping someone read the Quran.&lt;/p&gt;




&lt;h2&gt;
  
  
  About Gamification
&lt;/h2&gt;

&lt;p&gt;There's one more thing I kept coming back to.&lt;/p&gt;

&lt;p&gt;Lately, more and more apps lean on gamification. Reading streaks. Badges. Stats. Daily targets. Notifications reminding you not to lose your progress.&lt;/p&gt;

&lt;p&gt;I understand the reasoning. As someone who builds apps myself, I know these mechanics genuinely increase engagement.&lt;/p&gt;

&lt;p&gt;But the more I sat with it, the more I felt that the Quran occupies a different kind of place in someone's life.&lt;/p&gt;

&lt;p&gt;A person's relationship with the Quran isn't a relationship between a user and an app. It's a relationship between a servant and the word of their Lord.&lt;/p&gt;

&lt;p&gt;I personally don't think that relationship needs to be propped up by numbers. It doesn't need to be protected by the fear of breaking a streak. It doesn't need to feel like a game you're supposed to win.&lt;/p&gt;

&lt;p&gt;If today I read one page with real presence of heart, that's already enough. If tomorrow I read less, my relationship with the Quran still isn't something a graph can measure.&lt;/p&gt;

&lt;p&gt;Plenty of people genuinely like gamification, and there's nothing wrong with that. I just know I'm not one of them.&lt;/p&gt;




&lt;h2&gt;
  
  
  So I Decided to Build It Myself
&lt;/h2&gt;

&lt;p&gt;That's where Quran Today was born.&lt;/p&gt;

&lt;p&gt;Not out of a desire to build something more impressive. Not because I thought I could build the "best" Quran app out there.&lt;/p&gt;

&lt;p&gt;I just wanted to build the app I myself would want to open every day.&lt;/p&gt;

&lt;p&gt;The principle was simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When you open the app, it takes you straight back to your last read verse.&lt;/li&gt;
&lt;li&gt;No friction before you start reading.&lt;/li&gt;
&lt;li&gt;No feature that exists just because "every other app has it."&lt;/li&gt;
&lt;li&gt;No ads.&lt;/li&gt;
&lt;li&gt;No tracking of reading habits.&lt;/li&gt;
&lt;li&gt;No streaks.&lt;/li&gt;
&lt;li&gt;No virtual rewards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted an app that, once opened, barely feels like it's there at all. Because the focus was never meant to be the app.&lt;/p&gt;

&lt;p&gt;It was always meant to be the Quran.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building It Turned Out to Be Harder Than It Sounded
&lt;/h2&gt;

&lt;p&gt;The first version of Quran Today was built in Flutter. It shipped. It launched successfully.&lt;/p&gt;

&lt;p&gt;But the results were unremarkable. About five hundred people installed it.&lt;/p&gt;

&lt;p&gt;At first, I was disappointed. I wondered if I'd just built yet another version of something that already existed hundreds of times over.&lt;/p&gt;

&lt;p&gt;After sitting with that for a while, though, I realized the idea wasn't the problem. How I built it was.&lt;/p&gt;

&lt;p&gt;The user experience wasn't mature enough. A lot of the design decisions hadn't actually solved the problem I originally set out to solve.&lt;/p&gt;

&lt;p&gt;That's when I made a fairly drastic call. I rebuilt everything from scratch.&lt;/p&gt;

&lt;p&gt;Not just a new tech stack — I restructured almost the entire foundation of the app. The codebase was simplified to be easier to maintain and extend. The interface was redesigned over and over until it finally felt natural to use.&lt;/p&gt;

&lt;p&gt;I spent a surprising amount of time on questions that seemed small.&lt;/p&gt;

&lt;p&gt;What's the most comfortable way to switch between surahs? Does the app even need a home screen? Should the surah list fill the whole screen, appear as a panel, or just be a simple dialog? How should verses be displayed — as cards, like modern apps do, or flowing continuously, like a mushaf?&lt;/p&gt;

&lt;p&gt;Questions like these ended up taking far more time than writing the code itself.&lt;/p&gt;




&lt;h2&gt;
  
  
  There Were Moments I Wanted to Quit
&lt;/h2&gt;

&lt;p&gt;Not every day felt good.&lt;/p&gt;

&lt;p&gt;Some nights I closed my laptop not because the work was done, but because my head was simply too full.&lt;/p&gt;

&lt;p&gt;Sometimes I'd think, &lt;em&gt;"Is any of this actually worth it?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I think almost anyone who's ever built something alone has had that moment.&lt;/p&gt;

&lt;p&gt;But every time that question came up, I kept coming back to the same answer.&lt;/p&gt;

&lt;p&gt;If an app like this didn't exist yet, then I'd build it. And if it turned out that I was the only one who ever used it, that would be fine too — because I built it for myself in the first place.&lt;/p&gt;




&lt;h2&gt;
  
  
  I've Made Peace With That Possibility
&lt;/h2&gt;

&lt;p&gt;Quran Today may never become the number one Quran app.&lt;/p&gt;

&lt;p&gt;It may never have millions of users. It may never go viral.&lt;/p&gt;

&lt;p&gt;And I'm genuinely at peace with that.&lt;/p&gt;

&lt;p&gt;I'd rather have an app I actually open every single day than one that's wildly popular but has lost the reason it was built in the first place.&lt;/p&gt;

&lt;p&gt;If it turns out other people are also looking for a calm, simple, distraction-free way to read the Quran, I'll be genuinely grateful. It would mean I'm not alone in wanting this.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why the Name Changed
&lt;/h2&gt;

&lt;p&gt;The app was originally called &lt;strong&gt;FastiQuran&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That name came from an idea about speed. Fast to open. Fast to use. Fast to get back to reading.&lt;/p&gt;

&lt;p&gt;But the longer I worked on it, the more I realized that name only explained &lt;em&gt;how&lt;/em&gt; the app worked. Not &lt;em&gt;why&lt;/em&gt; it existed.&lt;/p&gt;

&lt;p&gt;Eventually I landed on two words that felt much closer to the real purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quran Today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because in the end, this app was never really about speed. Never about technology. Never about how many features it had.&lt;/p&gt;

&lt;p&gt;It just wants to be ready, whenever someone wants to come back to the Quran — today.&lt;/p&gt;

&lt;p&gt;Today. At the exact verse they left off. Without friction. Without pressure. Without needing to be anything more than someone who reads the Quran.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;I don't know if Quran Today will ever become a big app.&lt;/p&gt;

&lt;p&gt;But I know one thing.&lt;/p&gt;

&lt;p&gt;Tomorrow morning, when I want to read the Quran again, this is the app I'll open.&lt;/p&gt;

&lt;p&gt;And maybe that's the best reason Quran Today exists at all.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're also looking for a calm Quran app — no ads, no account, no streaks making you feel guilty for missing a day — Quran Today is free to &lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.fastiquran" rel="noopener noreferrer"&gt;download on Google Play&lt;/a&gt;. No hidden costs, no premium tier. Install it once, and every time you open it, you're right back at the last verse you read.&lt;/p&gt;




&lt;h3&gt;
  
  
  About the Author
&lt;/h3&gt;

&lt;p&gt;Cahyanudien Aziz Saputra — Founder of &lt;a href="https://flagodna.com" rel="noopener noreferrer"&gt;FlagoDNA&lt;/a&gt;, building software for Muslim life with a focus on privacy, simplicity, and long-term digital independence. Developer. Writer. Independent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cahyanudien.site" rel="noopener noreferrer"&gt;Personal Website&lt;/a&gt; · &lt;a href="https://linkedin.com/in/cahyanudien" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; · &lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.fastiquran" rel="noopener noreferrer"&gt;Get Quran Today on Google Play&lt;/a&gt; &lt;/p&gt;

</description>
      <category>android</category>
      <category>mobile</category>
      <category>showdev</category>
      <category>sideprojects</category>
    </item>
    <item>
      <title>Quran Today: Ketika Saya Memutuskan Menghapus Semua yang Tidak Penting</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:41:53 +0000</pubDate>
      <link>https://dev.to/cas8398/quran-today-ketika-saya-memutuskan-menghapus-semua-yang-tidak-penting-mf6</link>
      <guid>https://dev.to/cas8398/quran-today-ketika-saya-memutuskan-menghapus-semua-yang-tidak-penting-mf6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Bagaimana jika aplikasi Al-Qur'an tidak mencoba melakukan segalanya?&lt;/p&gt;

&lt;p&gt;Bagaimana jika ia hanya membantu kita membaca?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Selama bertahun-tahun saya menggunakan dan mencoba banyak aplikasi Al-Qur'an.&lt;/p&gt;

&lt;p&gt;Sebagian memiliki fitur yang sangat lengkap. Ada dashboard, statistik, tantangan membaca, gamifikasi, akun, sinkronisasi cloud, hingga berbagai menu yang terus bertambah.&lt;/p&gt;

&lt;p&gt;Semuanya bagus.&lt;/p&gt;

&lt;p&gt;Namun suatu hari saya bertanya pada diri sendiri.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apakah saya benar-benar membutuhkan semua itu ketika ingin membaca Al-Qur'an?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jawaban saya ternyata sederhana.&lt;/p&gt;

&lt;p&gt;Tidak.&lt;/p&gt;

&lt;p&gt;Saya hanya ingin membuka aplikasi, lalu langsung membaca.&lt;/p&gt;




&lt;h2&gt;
  
  
  Berawal dari FastiQuran
&lt;/h2&gt;

&lt;p&gt;Sebelum bernama &lt;strong&gt;Quran Today&lt;/strong&gt;, aplikasi ini dikenal sebagai &lt;strong&gt;FastiQuran&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Awalnya proyek ini hanyalah eksperimen pribadi.&lt;/p&gt;

&lt;p&gt;Saya mencoba membuat pengalaman membaca yang lebih sederhana dibanding aplikasi Al-Qur'an pada umumnya.&lt;/p&gt;

&lt;p&gt;Seiring waktu, saya mulai menyadari bahwa arah aplikasinya semakin jelas.&lt;/p&gt;

&lt;p&gt;Bukan menjadi aplikasi dengan fitur paling banyak.&lt;/p&gt;

&lt;p&gt;Melainkan menjadi aplikasi yang paling nyaman digunakan untuk membaca.&lt;/p&gt;

&lt;p&gt;Karena itu saya memutuskan mengganti namanya menjadi &lt;strong&gt;Quran Today&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nama baru ini lebih mencerminkan tujuan utamanya.&lt;/p&gt;

&lt;p&gt;Membaca Al-Qur'an hari ini.&lt;/p&gt;

&lt;p&gt;Dan melanjutkannya lagi besok.&lt;/p&gt;




&lt;h2&gt;
  
  
  Saya Menghapus Banyak Hal
&lt;/h2&gt;

&lt;p&gt;Saat mengembangkan Quran Today, saya justru lebih sering menghapus daripada menambahkan fitur.&lt;/p&gt;

&lt;p&gt;Saya menghapus hal-hal yang menurut saya mengganggu proses membaca.&lt;/p&gt;

&lt;p&gt;Saya bertanya berulang kali.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apakah fitur ini benar-benar membantu seseorang membaca Al-Qur'an?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Jika jawabannya tidak jelas, saya memilih untuk tidak menambahkannya.&lt;/p&gt;

&lt;p&gt;Semakin sedikit langkah yang harus dilakukan pengguna sebelum mulai membaca, semakin baik.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tidak Ada Dashboard
&lt;/h2&gt;

&lt;p&gt;Ketika membuka Quran Today, Anda tidak akan menemukan halaman beranda.&lt;/p&gt;

&lt;p&gt;Tidak ada kartu informasi.&lt;/p&gt;

&lt;p&gt;Tidak ada statistik.&lt;/p&gt;

&lt;p&gt;Tidak ada menu yang harus dilewati.&lt;/p&gt;

&lt;p&gt;Aplikasi langsung membawa Anda kembali ke ayat terakhir yang dibaca.&lt;/p&gt;

&lt;p&gt;Bagi saya, layar terbaik adalah layar yang membuat pengguna segera membaca.&lt;/p&gt;




&lt;h2&gt;
  
  
  Privasi Bukan Fitur Tambahan
&lt;/h2&gt;

&lt;p&gt;Saya percaya membaca Al-Qur'an adalah aktivitas yang bersifat pribadi.&lt;/p&gt;

&lt;p&gt;Karena itu Quran Today dibuat dengan prinsip yang sederhana.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tidak perlu akun.&lt;/li&gt;
&lt;li&gt;Tidak perlu login.&lt;/li&gt;
&lt;li&gt;Tidak ada analytics.&lt;/li&gt;
&lt;li&gt;Tidak ada pelacakan.&lt;/li&gt;
&lt;li&gt;Tidak ada iklan.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Seluruh progres membaca, bookmark, daftar hafalan, dan pengaturan tetap berada di perangkat pengguna.&lt;/p&gt;

&lt;p&gt;Saya tidak ingin mengetahui kapan seseorang membaca Al-Qur'an.&lt;/p&gt;

&lt;p&gt;Saya juga tidak ingin mengumpulkan data yang sebenarnya tidak saya perlukan.&lt;/p&gt;




&lt;h2&gt;
  
  
  Gratis Selamanya
&lt;/h2&gt;

&lt;p&gt;Quran Today tidak memiliki langganan.&lt;/p&gt;

&lt;p&gt;Tidak ada fitur premium.&lt;/p&gt;

&lt;p&gt;Tidak ada iklan.&lt;/p&gt;

&lt;p&gt;Semua fitur tersedia sejak pertama kali aplikasi dipasang.&lt;/p&gt;

&lt;p&gt;Saya ingin setiap orang dapat menikmati pengalaman membaca yang sama, tanpa harus membayar untuk membuka fitur tertentu.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dibangun Ulang dari Flutter ke Kotlin
&lt;/h2&gt;

&lt;p&gt;Salah satu keputusan terbesar selama pengembangan adalah memindahkan proyek ini dari Flutter ke Kotlin Native menggunakan Jetpack Compose.&lt;/p&gt;

&lt;p&gt;Keputusan ini tidak mudah.&lt;/p&gt;

&lt;p&gt;Artinya saya harus menulis ulang hampir seluruh aplikasi.&lt;/p&gt;

&lt;p&gt;Namun hasilnya sepadan.&lt;/p&gt;

&lt;p&gt;Rendering teks Arab menjadi lebih baik.&lt;/p&gt;

&lt;p&gt;Scrolling terasa lebih halus.&lt;/p&gt;

&lt;p&gt;Integrasi Android menjadi lebih alami.&lt;/p&gt;

&lt;p&gt;Dan saya memiliki kontrol yang lebih besar terhadap performa aplikasi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dibuat oleh Satu Orang
&lt;/h2&gt;

&lt;p&gt;Quran Today tidak dibuat oleh sebuah tim besar.&lt;/p&gt;

&lt;p&gt;Tidak ada desainer.&lt;/p&gt;

&lt;p&gt;Tidak ada product manager.&lt;/p&gt;

&lt;p&gt;Tidak ada investor.&lt;/p&gt;

&lt;p&gt;Saya mengerjakan semuanya sendiri.&lt;/p&gt;

&lt;p&gt;Mulai dari desain antarmuka, pemrograman, optimasi database, terjemahan, hingga halaman website dan dokumentasi.&lt;/p&gt;

&lt;p&gt;Perjalanannya memang lebih lambat.&lt;/p&gt;

&lt;p&gt;Tetapi saya menikmati setiap prosesnya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Saya Berharap...
&lt;/h2&gt;

&lt;p&gt;Saya tidak berharap Quran Today menjadi aplikasi Al-Qur'an terbesar.&lt;/p&gt;

&lt;p&gt;Saya hanya berharap ketika seseorang ingin membaca Al-Qur'an, aplikasi ini tidak menghalangi niat baiknya.&lt;/p&gt;

&lt;p&gt;Ia cukup membuka aplikasi.&lt;/p&gt;

&lt;p&gt;Dan langsung membaca.&lt;/p&gt;

&lt;p&gt;Kalau suatu hari ada seseorang yang berkata,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Saya jadi lebih sering membaca Al-Qur'an karena aplikasi ini."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Mungkin itu sudah menjadi pencapaian terbesar bagi saya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ingin Mencobanya?
&lt;/h2&gt;

&lt;p&gt;Quran Today adalah proyek independen yang saya bangun seorang diri dengan satu tujuan sederhana: membuat pengalaman membaca Al-Qur'an menjadi lebih nyaman, lebih tenang, dan tanpa gangguan.&lt;/p&gt;

&lt;p&gt;Jika menurut Anda filosofi tersebut menarik, silakan mencobanya.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌐 Website&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://flagodna.com/quran-today/" rel="noopener noreferrer"&gt;https://flagodna.com/quran-today/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📱 Google Play&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.fastiquran" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.flagodna.fastiquran&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Masukan, kritik, maupun saran akan sangat berarti untuk membantu Quran Today menjadi aplikasi yang lebih baik.&lt;/p&gt;




&lt;p&gt;Terima kasih telah menggunakan Quran Today.&lt;/p&gt;

&lt;p&gt;Semoga aplikasi kecil ini bisa menjadi teman dalam perjalanan membaca Al-Qur'an, satu ayat demi satu ayat.&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
  </channel>
</rss>
