<?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>Dari Satu Pertanyaan Ibu, Sebuah Aplikasi Digunakan di Berbagai Belahan Dunia</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Fri, 26 Jun 2026 13:10:51 +0000</pubDate>
      <link>https://dev.to/cas8398/dari-satu-pertanyaan-ibu-sebuah-aplikasi-digunakan-di-berbagai-belahan-dunia-12nm</link>
      <guid>https://dev.to/cas8398/dari-satu-pertanyaan-ibu-sebuah-aplikasi-digunakan-di-berbagai-belahan-dunia-12nm</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Terkadang sebuah aplikasi tidak lahir dari ide startup.&lt;/p&gt;

&lt;p&gt;Ia lahir dari seseorang yang kita sayangi.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Saya tidak pernah memiliki rencana membuat aplikasi kalender Hijriah.&lt;/p&gt;

&lt;p&gt;Tidak ada business plan.&lt;/p&gt;

&lt;p&gt;Tidak ada riset pasar.&lt;/p&gt;

&lt;p&gt;Tidak ada target unduhan.&lt;/p&gt;

&lt;p&gt;Semuanya berawal dari satu percakapan sederhana dengan ibu saya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sebuah Pertanyaan yang Sangat Sederhana
&lt;/h2&gt;

&lt;p&gt;Suatu hari ibu saya berkata,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Besok Ayyamul Bidh ya? Sekarang sudah tanggal berapa Hijriah?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Saya menyadari sesuatu.&lt;/p&gt;

&lt;p&gt;Kalender Masehi ada di mana-mana.&lt;/p&gt;

&lt;p&gt;Di ponsel.&lt;/p&gt;

&lt;p&gt;Di laptop.&lt;/p&gt;

&lt;p&gt;Di jam tangan.&lt;/p&gt;

&lt;p&gt;Di kalender dinding.&lt;/p&gt;

&lt;p&gt;Tetapi kalender Hijriah sering kali harus dicari terlebih dahulu, padahal banyak ibadah bergantung padanya.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Puasa Ayyamul Bidh&lt;/li&gt;
&lt;li&gt;Puasa Arafah&lt;/li&gt;
&lt;li&gt;Awal Ramadan&lt;/li&gt;
&lt;li&gt;Hari Raya&lt;/li&gt;
&lt;li&gt;Bulan-bulan Haram&lt;/li&gt;
&lt;li&gt;Dan berbagai momen penting lainnya&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saya berpikir,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Kalau ibu saya mengalami kesulitan ini, mungkin banyak orang lain juga mengalaminya."&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Saya Hanya Ingin Membantu Ibu
&lt;/h2&gt;

&lt;p&gt;Saat mulai membuat Hijri Today, saya tidak pernah berpikir tentang monetisasi.&lt;/p&gt;

&lt;p&gt;Saya hanya bertanya kepada diri sendiri:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apakah ibu saya bisa menggunakannya?&lt;/li&gt;
&lt;li&gt;Apakah tampilannya cukup sederhana?&lt;/li&gt;
&lt;li&gt;Apakah tanggal Hijriahnya mudah dibaca?&lt;/li&gt;
&lt;li&gt;Apakah beliau bisa langsung mengetahui hari ini tanggal berapa?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kalau semua itu terjawab, berarti aplikasi ini sudah berhasil.&lt;/p&gt;




&lt;h2&gt;
  
  
  Setelah Selesai...
&lt;/h2&gt;

&lt;p&gt;Saya mengunggahnya ke Google Play.&lt;/p&gt;

&lt;p&gt;Dengan keputusan yang sangat sederhana.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Gratis&lt;/li&gt;
&lt;li&gt;✅ Tanpa iklan&lt;/li&gt;
&lt;li&gt;✅ Tanpa langganan&lt;/li&gt;
&lt;li&gt;✅ Tanpa pembelian dalam aplikasi&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Saya tidak meminta siapa pun untuk mengunduhnya.&lt;/p&gt;

&lt;p&gt;Saya juga tidak menjalankan kampanye pemasaran.&lt;/p&gt;

&lt;p&gt;Saya hanya menekan tombol &lt;strong&gt;Publish&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lalu melanjutkan hidup seperti biasa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sampai Suatu Hari...
&lt;/h2&gt;

&lt;p&gt;Beberapa waktu kemudian saya mulai membuka statistik Google Play Console.&lt;/p&gt;

&lt;p&gt;Awalnya saya hanya melihat jumlah unduhan.&lt;/p&gt;

&lt;p&gt;Lalu perhatian saya beralih ke daftar negara.&lt;/p&gt;

&lt;p&gt;Bukan hanya Indonesia.&lt;/p&gt;

&lt;p&gt;Ada India.&lt;/p&gt;

&lt;p&gt;Pakistan.&lt;/p&gt;

&lt;p&gt;Mesir.&lt;/p&gt;

&lt;p&gt;Nigeria.&lt;/p&gt;

&lt;p&gt;Somalia.&lt;/p&gt;

&lt;p&gt;Malaysia.&lt;/p&gt;

&lt;p&gt;Arab Saudi.&lt;/p&gt;

&lt;p&gt;Inggris.&lt;/p&gt;

&lt;p&gt;Amerika Serikat.&lt;/p&gt;

&lt;p&gt;Dan masih banyak negara lainnya.&lt;/p&gt;

&lt;p&gt;Saya sempat berhenti beberapa saat.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bagaimana mereka bisa menemukan aplikasi kecil yang dibuat seseorang dari Indonesia?&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Hari Ini
&lt;/h2&gt;

&lt;p&gt;Berikut beberapa negara dengan jumlah pengguna aktif terbesar saat saya menulis artikel ini.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Negara&lt;/th&gt;
&lt;th&gt;Pengguna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;🇮🇩 Indonesia&lt;/td&gt;
&lt;td&gt;298&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇮🇳 India&lt;/td&gt;
&lt;td&gt;284&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇵🇰 Pakistan&lt;/td&gt;
&lt;td&gt;278&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇪🇬 Mesir&lt;/td&gt;
&lt;td&gt;215&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇳🇬 Nigeria&lt;/td&gt;
&lt;td&gt;134&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇸🇴 Somalia&lt;/td&gt;
&lt;td&gt;99&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇲🇾 Malaysia&lt;/td&gt;
&lt;td&gt;87&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇬🇧 Inggris&lt;/td&gt;
&lt;td&gt;84&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇸🇦 Arab Saudi&lt;/td&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇺🇸 Amerika Serikat&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇪🇹 Ethiopia&lt;/td&gt;
&lt;td&gt;49&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇨🇮 Pantai Gading&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🇰🇪 Kenya&lt;/td&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Dan masih banyak pengguna dari negara-negara lainnya.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Yang Membuat Saya Bersyukur
&lt;/h2&gt;

&lt;p&gt;Yang paling membuat saya bersyukur bukanlah angka unduhannya.&lt;/p&gt;

&lt;p&gt;Bukan pula jumlah negara yang tercatat.&lt;/p&gt;

&lt;p&gt;Tetapi membayangkan bahwa seseorang di Pakistan...&lt;/p&gt;

&lt;p&gt;atau Mesir...&lt;/p&gt;

&lt;p&gt;atau Somalia...&lt;/p&gt;

&lt;p&gt;sedang membuka aplikasi yang awalnya saya buat hanya untuk membantu ibu saya.&lt;/p&gt;

&lt;p&gt;Saya tidak mengenal mereka.&lt;/p&gt;

&lt;p&gt;Mereka juga tidak mengenal saya.&lt;/p&gt;

&lt;p&gt;Namun kami dipertemukan oleh sebuah aplikasi sederhana.&lt;/p&gt;




&lt;h2&gt;
  
  
  Saya Tidak Mengejar Validasi
&lt;/h2&gt;

&lt;p&gt;Banyak orang bertanya mengapa aplikasi saya gratis.&lt;/p&gt;

&lt;p&gt;Mengapa tidak dipenuhi iklan.&lt;/p&gt;

&lt;p&gt;Mengapa tidak dibuat berlangganan.&lt;/p&gt;

&lt;p&gt;Jawaban saya sederhana.&lt;/p&gt;

&lt;p&gt;Sejak awal saya memang tidak membangunnya untuk itu.&lt;/p&gt;

&lt;p&gt;Saya hanya ingin membuat sesuatu yang berguna.&lt;/p&gt;

&lt;p&gt;Kalau suatu hari seseorang bisa menjalankan ibadah dengan lebih mudah karena aplikasi yang saya buat, rasanya itu sudah cukup berarti.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pelajaran yang Saya Dapat
&lt;/h2&gt;

&lt;p&gt;Saya belajar bahwa tidak semua karya harus dimulai dari masalah yang besar.&lt;/p&gt;

&lt;p&gt;Kadang justru dimulai dari pertanyaan yang sangat dekat.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Masalah apa yang sedang dialami orang tua saya?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ketika kita menyelesaikan masalah yang nyata, sering kali ternyata ribuan orang lain mengalami masalah yang sama.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sebelum Hidup Ini Selesai
&lt;/h2&gt;

&lt;p&gt;Saya tidak tahu berapa lama lagi saya bisa terus membuat aplikasi.&lt;/p&gt;

&lt;p&gt;Tetapi saya berharap, sebelum hidup ini selesai, saya pernah meninggalkan sesuatu yang benar-benar bermanfaat bagi orang lain.&lt;/p&gt;

&lt;p&gt;Tidak harus menjadi perusahaan besar.&lt;/p&gt;

&lt;p&gt;Tidak harus menjadi aplikasi nomor satu.&lt;/p&gt;

&lt;p&gt;Tidak harus dikenal banyak orang.&lt;/p&gt;

&lt;p&gt;Cukup menjadi alat yang membantu seseorang.&lt;/p&gt;

&lt;p&gt;Kalau suatu hari ada seseorang di belahan dunia lain yang mengetahui tanggal Hijriah hari itu melalui aplikasi yang awalnya saya buat untuk ibu saya, maka saya rasa perjalanan ini tidak sia-sia.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Aplikasi Kasir Gratis yang Jujur: Kenapa KasirCepat Berbeda dari Aplikasi POS Lainnya</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Thu, 11 Jun 2026 03:34:05 +0000</pubDate>
      <link>https://dev.to/cas8398/aplikasi-kasir-gratis-yang-jujur-kenapa-kasircepat-berbeda-dari-aplikasi-pos-lainnya-5g02</link>
      <guid>https://dev.to/cas8398/aplikasi-kasir-gratis-yang-jujur-kenapa-kasircepat-berbeda-dari-aplikasi-pos-lainnya-5g02</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Warung dan toko kecil Indonesia layak mendapatkan software yang tidak mengeksploitasi mereka.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Kalau kamu pernah mencoba aplikasi kasir digital untuk warung atau toko kelontong, kamu mungkin sudah familiar dengan rasa frustasi ini:&lt;/p&gt;

&lt;p&gt;Produk ke-31 tiba-tiba terkunci. Riwayat transaksi bulan lalu hilang. Aplikasinya tidak bisa dipakai waktu internet mati. Dan di suatu hari, kamu membaca &lt;em&gt;privacy policy&lt;/em&gt;-nya — dan menemukan bahwa data penjualan tokomu bisa "dianalisa dan dilisensikan ke pihak ketiga."&lt;/p&gt;

&lt;p&gt;Ini bukan skenario hipotetikal. Ini adalah praktik nyata yang dilakukan banyak aplikasi kasir populer di Indonesia hari ini.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KasirCepat&lt;/strong&gt; hadir sebagai jawaban atas masalah ini.&lt;/p&gt;




&lt;h2&gt;
  
  
  Apa Itu KasirCepat?
&lt;/h2&gt;

&lt;p&gt;KasirCepat adalah aplikasi POS (&lt;em&gt;Point of Sale&lt;/em&gt;) offline-first yang dirancang khusus untuk warung, toko kelontong, kios pasar, dan usaha kecil di Indonesia.&lt;/p&gt;

&lt;p&gt;Tersedia di tiga platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Android&lt;/strong&gt; (Google Play Store)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows&lt;/strong&gt; (Windows 10/11)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Linux&lt;/strong&gt; (Ubuntu, Debian, Fedora)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gratis selamanya untuk 1 perangkat — tanpa batas produk, tanpa batas transaksi, tanpa iklan.&lt;/p&gt;




&lt;h2&gt;
  
  
  Masalah yang Coba Diselesaikan
&lt;/h2&gt;

&lt;p&gt;Sebelum bicara soal fitur, penting untuk memahami &lt;em&gt;mengapa&lt;/em&gt; KasirCepat dibuat.&lt;/p&gt;

&lt;p&gt;Mayoritas aplikasi kasir di pasar hari ini dibangun dengan model bisnis yang pada dasarnya bertentangan dengan kepentingan pengguna kecil:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Paywall yang agresif&lt;/strong&gt;&lt;br&gt;
Setelah memasukkan 30 produk, kamu dipaksa berlangganan. Ini bukan fitur premium — ini fitur dasar yang sengaja dikunci.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Data yang hilang tanpa izin&lt;/strong&gt;&lt;br&gt;
Riwayat transaksi dihapus otomatis setelah periode tertentu. Bagi pemilik toko kecil, data ini adalah catatan bisnis mereka yang paling berharga.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. "Offline mode" yang palsu&lt;/strong&gt;&lt;br&gt;
Banyak aplikasi mengklaim bisa digunakan offline, tapi sinkronisasi dan login tetap butuh koneksi internet. Di area dengan sinyal tidak stabil — yang sangat umum di Indonesia — ini adalah masalah nyata.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Privasi data yang dipertanyakan&lt;/strong&gt;&lt;br&gt;
Data transaksi tokomu — produk apa yang laku, jam berapa ramai, berapa margin keuntunganmu — adalah data bisnis yang sangat berharga. Beberapa aplikasi memperbolehkan data ini dianalisa dan dijual ke pihak ketiga.&lt;/p&gt;

&lt;p&gt;KasirCepat membangun solusi dari nol dengan filosofi yang berlawanan: &lt;strong&gt;tokomu, datamu, kendalimu&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fitur Utama KasirCepat
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🛒 Kasir (POS) yang Cepat dan Simpel
&lt;/h3&gt;

&lt;p&gt;Alur transaksi dirancang untuk kasir yang memegang HP saat toko ramai:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cari produk dengan ketuk atau scan barcode langsung dari kamera&lt;/li&gt;
&lt;li&gt;Tambah ke keranjang, stok berkurang otomatis&lt;/li&gt;
&lt;li&gt;Pilih metode pembayaran: &lt;strong&gt;Tunai, Transfer, QRIS, atau Utang&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Kembalian dihitung otomatis&lt;/li&gt;
&lt;li&gt;Tombol cepat nominal Rp 10.000 – Rp 1.000.000&lt;/li&gt;
&lt;li&gt;Print struk thermal (58mm/80mm) atau kirim via WhatsApp&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Satu layar. Satu alur. Langsung bisa dipakai tanpa training.&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 Manajemen Produk Lengkap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Nama, harga jual, harga modal, dan stok&lt;/li&gt;
&lt;li&gt;Scanner barcode langsung dari kamera HP&lt;/li&gt;
&lt;li&gt;Foto produk dari kamera&lt;/li&gt;
&lt;li&gt;Kategori produk custom&lt;/li&gt;
&lt;li&gt;Notifikasi stok menipis&lt;/li&gt;
&lt;li&gt;Import/Export produk via CSV (kompatibel Excel)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  📋 Riwayat Transaksi yang Tidak Pernah Dihapus
&lt;/h3&gt;

&lt;p&gt;Ini adalah salah satu komitmen paling penting KasirCepat: &lt;strong&gt;riwayat transaksi tidak pernah dihapus otomatis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Filter berdasarkan hari ini, 7 hari, atau bulan ini. Lihat total pendapatan dan laba bersih. Edit atau hapus transaksi (stok otomatis kembali). Cetak ulang struk kapanpun.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚙️ Backup &amp;amp; Export Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Backup data lokal dengan password&lt;/li&gt;
&lt;li&gt;Restore kapanpun dari file backup&lt;/li&gt;
&lt;li&gt;Export CSV transaksi dan produk&lt;/li&gt;
&lt;li&gt;Export PDF laporan penjualan&lt;/li&gt;
&lt;li&gt;Import produk dari CSV&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Offline-First: Bukan Fitur, Tapi Arsitektur
&lt;/h2&gt;

&lt;p&gt;Ini adalah perbedaan fundamental yang perlu dipahami.&lt;/p&gt;

&lt;p&gt;Sebagian besar aplikasi kasir memiliki "mode offline" sebagai &lt;em&gt;fallback&lt;/em&gt; — artinya, sistem utamanya tetap bergantung pada koneksi internet, dan offline hanya diaktifkan saat koneksi terputus.&lt;/p&gt;

&lt;p&gt;KasirCepat dirancang sebaliknya: &lt;strong&gt;offline adalah mode utama&lt;/strong&gt;. Data tersimpan sepenuhnya di perangkatmu. Tidak ada data transaksi yang dikirim ke server KasirCepat — titik.&lt;/p&gt;

&lt;p&gt;Untuk pemilik toko yang menggunakan beberapa perangkat (misalnya HP kasir dan laptop owner), sinkronisasi dilakukan lewat WiFi toko — &lt;strong&gt;tanpa internet, tanpa akun cloud&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paket Harga yang Transparan
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Paket&lt;/th&gt;
&lt;th&gt;Harga&lt;/th&gt;
&lt;th&gt;Untuk Siapa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Free&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rp 0 selamanya&lt;/td&gt;
&lt;td&gt;Toko dengan 1 perangkat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Pro&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rp 129.000/tahun&lt;/td&gt;
&lt;td&gt;Toko dengan beberapa kasir/perangkat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Cloud+&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;TBD (belum tersedia)&lt;/td&gt;
&lt;td&gt;Multi-cabang (opsional di masa depan)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Paket Free&lt;/strong&gt; mencakup POS penuh, produk dan transaksi tidak terbatas, riwayat lengkap, laporan harian, dan backup/restore lokal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paket Pro&lt;/strong&gt; menambahkan fitur multi-device via WiFi lokal, auto print struk, scanner barcode USB/Bluetooth, dan laporan yang lebih lengkap.&lt;/p&gt;

&lt;p&gt;Yang penting: &lt;strong&gt;fitur gratis tidak akan pindah ke Pro&lt;/strong&gt;. Ini bukan janji marketing — ini komitmen produk yang tertulis jelas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Untuk Siapa KasirCepat Cocok?
&lt;/h2&gt;

&lt;p&gt;KasirCepat paling cocok untuk:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Warung dan toko kelontong&lt;/strong&gt; yang ingin mencatat transaksi digital tanpa ribet&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kios pasar&lt;/strong&gt; dengan koneksi internet yang tidak stabil&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Toko dengan 1-3 kasir&lt;/strong&gt; yang butuh sistem multi-perangkat tanpa biaya cloud&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pemilik usaha kecil&lt;/strong&gt; yang peduli dengan privasi data bisnis mereka&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kasir pemula&lt;/strong&gt; yang butuh UI simpel dan bisa langsung dipakai&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Filosofi di Balik Produk
&lt;/h2&gt;

&lt;p&gt;Ada satu kutipan dari halaman produk KasirCepat yang cukup menggambarkan filosofinya:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Kompetitor membangun kasir untuk investor mereka. Kami membangun kasir untuk tokomu."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ini bukan sekadar tagline. Keputusan produk mereka — dari arsitektur offline-first, data yang tidak pernah meninggalkan perangkat, sampai fitur gratis yang tidak dikunci — semuanya konsisten dengan filosofi ini.&lt;/p&gt;

&lt;p&gt;Di industri SaaS yang sering mengutamakan growth metric di atas pengalaman pengguna, pendekatan ini terasa menyegarkan.&lt;/p&gt;




&lt;h2&gt;
  
  
  Cara Unduh KasirCepat
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Android&lt;/strong&gt;: &lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.kasircepat" rel="noopener noreferrer"&gt;Google Play Store&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Windows &amp;amp; Linux&lt;/strong&gt;: &lt;a href="https://github.com/Flagodna-Developer/kasir-cepat/releases" rel="noopener noreferrer"&gt;GitHub Releases&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Info lebih lanjut&lt;/strong&gt;: &lt;a href="https://flagodna.com/kasir-cepat/" rel="noopener noreferrer"&gt;flagodna.com/kasir-cepat&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;KasirCepat adalah produk dari Flagodna, studio teknologi privacy-first yang berbasis di Indonesia. Dibuat dengan jujur di Indonesia 🇮🇩&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tag:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;#UKM&lt;/code&gt; &lt;code&gt;#Warung&lt;/code&gt; &lt;code&gt;#AplikasiKasir&lt;/code&gt; &lt;code&gt;#UMKM&lt;/code&gt; &lt;code&gt;#Indonesia&lt;/code&gt; &lt;code&gt;#PrivacyFirst&lt;/code&gt; &lt;code&gt;#OfflineFirst&lt;/code&gt; &lt;code&gt;#TechIndonesia&lt;/code&gt; &lt;code&gt;#StartupIndonesia&lt;/code&gt; &lt;code&gt;#POS&lt;/code&gt;&lt;/p&gt;

</description>
      <category>umkm</category>
      <category>aplikasikasir</category>
      <category>warung</category>
    </item>
    <item>
      <title>KasirCepat Officially Launches: Free Offline-First POS for Indonesia's Small Businesses</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Wed, 10 Jun 2026 04:27:55 +0000</pubDate>
      <link>https://dev.to/flagodna/kasircepat-officially-launches-free-offline-first-pos-for-indonesias-small-businesses-2</link>
      <guid>https://dev.to/flagodna/kasircepat-officially-launches-free-offline-first-pos-for-indonesias-small-businesses-2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Surakarta, Indonesia — June 2026&lt;/strong&gt; — Flagodna today announced the official launch of &lt;strong&gt;KasirCepat&lt;/strong&gt;, a free offline-first point-of-sale (POS) application designed specifically for small businesses, market stalls, street vendors, and micro enterprises across Indonesia.&lt;/p&gt;

&lt;p&gt;Built with a simple principle — &lt;em&gt;a cashier system should continue working even when the internet does not&lt;/em&gt; — KasirCepat aims to provide a practical alternative to cloud-dependent POS solutions that may become difficult to use in areas with unstable connectivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built for Real Business Conditions
&lt;/h2&gt;

&lt;p&gt;Many small businesses across Indonesia operate in environments where internet access is not always reliable. Yet most modern POS systems assume a constant online connection.&lt;/p&gt;

&lt;p&gt;KasirCepat was developed with a different approach.&lt;/p&gt;

&lt;p&gt;Rather than relying on remote servers for daily operations, the application stores business data locally on the user's device. Sales transactions, inventory management, product catalogs, reports, and customer records remain accessible even when the internet is unavailable.&lt;/p&gt;

&lt;p&gt;This offline-first architecture ensures businesses can continue operating without interruptions caused by network outages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designed Around Simplicity
&lt;/h2&gt;

&lt;p&gt;The goal of KasirCepat is not to become the most feature-packed POS system on the market.&lt;/p&gt;

&lt;p&gt;Instead, it focuses on helping merchants complete everyday transactions quickly and efficiently.&lt;/p&gt;

&lt;p&gt;Core capabilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Product and inventory management&lt;/li&gt;
&lt;li&gt;Barcode scanning&lt;/li&gt;
&lt;li&gt;Real-time stock tracking&lt;/li&gt;
&lt;li&gt;Automatic cash change calculation&lt;/li&gt;
&lt;li&gt;Multiple payment methods&lt;/li&gt;
&lt;li&gt;Thermal receipt printing&lt;/li&gt;
&lt;li&gt;Digital receipts via WhatsApp&lt;/li&gt;
&lt;li&gt;Daily sales and profit reports&lt;/li&gt;
&lt;li&gt;CSV import and export&lt;/li&gt;
&lt;li&gt;Backup and restore functionality&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The application is designed to remain lightweight, responsive, and easy to learn for first-time users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Privacy-First by Design
&lt;/h2&gt;

&lt;p&gt;Flagodna believes business owners should retain control over their own data.&lt;/p&gt;

&lt;p&gt;For that reason, KasirCepat is designed so that day-to-day business operations do not depend on external servers.&lt;/p&gt;

&lt;p&gt;Transaction records, inventory data, and business information remain under the merchant's control.&lt;/p&gt;

&lt;p&gt;This approach helps reduce reliance on third-party services while providing a more transparent experience for users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Available Across Multiple Platforms
&lt;/h2&gt;

&lt;p&gt;KasirCepat is available on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Android&lt;/li&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;li&gt;Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Businesses can choose the platform that best fits their workflow while maintaining access to their data through built-in backup and restore functionality.&lt;/p&gt;

&lt;p&gt;For users who require multi-device operation, KasirCepat also supports local WiFi synchronization, allowing devices to communicate directly within the same network without requiring cloud infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Genuinely Free Tier
&lt;/h2&gt;

&lt;p&gt;Unlike many POS solutions that impose transaction limits, product limits, or advertising, KasirCepat offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlimited products&lt;/li&gt;
&lt;li&gt;Unlimited transactions&lt;/li&gt;
&lt;li&gt;No advertisements&lt;/li&gt;
&lt;li&gt;No mandatory subscription&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The objective is simple: provide accessible business software that small businesses can adopt without unnecessary barriers.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Message from the Founder
&lt;/h2&gt;

&lt;p&gt;"Many POS systems are designed around the assumption that internet access is always available," said &lt;strong&gt;Mochammad Zuhri&lt;/strong&gt;, Founder of Flagodna.&lt;/p&gt;

&lt;p&gt;"KasirCepat was built with a different assumption: merchants should be able to continue selling regardless of network conditions. Technology should support business operations, not become another dependency."&lt;/p&gt;

&lt;h2&gt;
  
  
  About KasirCepat
&lt;/h2&gt;

&lt;p&gt;KasirCepat is an offline-first POS application developed by Flagodna for small businesses, market stalls, retail stores, and micro enterprises in Indonesia.&lt;/p&gt;

&lt;p&gt;The software focuses on speed, simplicity, privacy, and user control while providing essential tools required for daily business operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Availability
&lt;/h2&gt;

&lt;p&gt;KasirCepat is available now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product Website:&lt;/strong&gt;&lt;br&gt;
&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;&lt;strong&gt;Google Play Store:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://play.google.com/store/apps/details?id=com.flagodna.kasircepat" rel="noopener noreferrer"&gt;https://play.google.com/store/apps/details?id=com.flagodna.kasircepat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Guide:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://flagodna.com/kasir-cepat/panduan/" rel="noopener noreferrer"&gt;https://flagodna.com/kasir-cepat/panduan/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy Policy:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://flagodna.com/kasir-cepat/documents/kebijakan-privasi/" rel="noopener noreferrer"&gt;https://flagodna.com/kasir-cepat/documents/kebijakan-privasi/&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  About Flagodna
&lt;/h3&gt;

&lt;p&gt;Flagodna is an independent software developer based in Surakarta, Central Java, Indonesia.&lt;/p&gt;

&lt;p&gt;The company develops privacy-focused and offline-first software products for consumers, communities, and small businesses. Its mission is to build practical technology that remains simple, transparent, and respectful of user data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your Store. Your Data. Your Control.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>product</category>
      <category>showdev</category>
      <category>startup</category>
    </item>
    <item>
      <title>141 Jam Membangun Aplikasi Kasir yang Tidak Terlihat Seperti Excel</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Tue, 09 Jun 2026 14:29:10 +0000</pubDate>
      <link>https://dev.to/cas8398/141-jam-membangun-aplikasi-kasir-yang-tidak-terlihat-seperti-excel-h3g</link>
      <guid>https://dev.to/cas8398/141-jam-membangun-aplikasi-kasir-yang-tidak-terlihat-seperti-excel-h3g</guid>
      <description>&lt;p&gt;Saya tidak pernah berencana membuat aplikasi kasir.&lt;/p&gt;

&lt;p&gt;Kalau beberapa tahun lalu ada yang bilang saya akan menghabiskan lebih dari 141 jam membangun aplikasi POS, mungkin saya akan tertawa.&lt;/p&gt;

&lt;p&gt;Namun semuanya berubah setelah saya melihat bagaimana banyak aplikasi kasir digunakan di dunia nyata.&lt;/p&gt;

&lt;p&gt;Bukan saat dipresentasikan.&lt;/p&gt;

&lt;p&gt;Bukan saat dipromosikan.&lt;/p&gt;

&lt;p&gt;Bukan saat ada demo yang sudah disiapkan dengan rapi.&lt;/p&gt;

&lt;p&gt;Melainkan saat benar-benar digunakan untuk bekerja.&lt;/p&gt;

&lt;p&gt;Dan yang saya lihat membuat saya tidak nyaman.&lt;/p&gt;




&lt;h2&gt;
  
  
  Tampilannya seperti Excel yang dipaksa menjadi aplikasi.
&lt;/h2&gt;

&lt;p&gt;Kolom di mana-mana.&lt;/p&gt;

&lt;p&gt;Tabel memenuhi layar.&lt;/p&gt;

&lt;p&gt;Tombol kecil berjejer tanpa prioritas.&lt;/p&gt;

&lt;p&gt;Menu bertingkat.&lt;/p&gt;

&lt;p&gt;Laporan yang lebih menonjol daripada transaksi.&lt;/p&gt;

&lt;p&gt;Grafik yang terlihat mengesankan tetapi jarang disentuh.&lt;/p&gt;

&lt;p&gt;Saya melihat beberapa aplikasi kasir dan terus memikirkan satu pertanyaan:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Siapa sebenarnya yang menggunakan aplikasi ini?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Karena yang saya lihat bukan akuntan.&lt;/p&gt;

&lt;p&gt;Bukan analis data.&lt;/p&gt;

&lt;p&gt;Bukan orang yang duduk delapan jam di depan monitor.&lt;/p&gt;

&lt;p&gt;Yang saya lihat adalah pemilik warung.&lt;/p&gt;

&lt;p&gt;Penjual gorengan.&lt;/p&gt;

&lt;p&gt;Pemilik toko kelontong.&lt;/p&gt;

&lt;p&gt;Pedagang kecil yang harus melayani pembeli, menerima barang, menghitung stok, menjawab telepon, dan menyelesaikan banyak hal sekaligus.&lt;/p&gt;

&lt;p&gt;Mereka tidak membuka aplikasi untuk menganalisis data.&lt;/p&gt;

&lt;p&gt;Mereka membuka aplikasi untuk menyelesaikan transaksi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Semakin saya melihat, semakin saya merasa ada sesuatu yang terbalik.
&lt;/h2&gt;

&lt;p&gt;Banyak software modern terlihat hebat saat dipresentasikan.&lt;/p&gt;

&lt;p&gt;Dashboard penuh grafik.&lt;/p&gt;

&lt;p&gt;Statistik.&lt;/p&gt;

&lt;p&gt;Insight.&lt;/p&gt;

&lt;p&gt;Analitik.&lt;/p&gt;

&lt;p&gt;Animasi.&lt;/p&gt;

&lt;p&gt;Integrasi.&lt;/p&gt;

&lt;p&gt;Semuanya terlihat mengesankan.&lt;/p&gt;

&lt;p&gt;Tetapi saya mulai bertanya:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apakah semua ini benar-benar membantu pengguna?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Atau hanya terlihat bagus saat dipresentasikan kepada investor, manajer, atau calon pelanggan?&lt;/p&gt;

&lt;p&gt;Karena semakin lama saya mengamati, semakin sering saya menemukan pola yang sama.&lt;/p&gt;

&lt;p&gt;Software dibuat dengan fokus pada apa yang bisa ditambahkan.&lt;/p&gt;

&lt;p&gt;Bukan pada apa yang bisa disederhanakan.&lt;/p&gt;

&lt;p&gt;Padahal pengguna tidak membeli kompleksitas.&lt;/p&gt;

&lt;p&gt;Mereka membeli kemudahan.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kebutuhan mereka sebenarnya sederhana.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Cari barang.&lt;/li&gt;
&lt;li&gt;Masukkan jumlah.&lt;/li&gt;
&lt;li&gt;Terima pembayaran.&lt;/li&gt;
&lt;li&gt;Selesai.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Empat langkah.&lt;/p&gt;

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

&lt;p&gt;Namun entah bagaimana empat langkah sederhana itu sering berubah menjadi antarmuka yang terasa seperti sistem administrasi perusahaan besar.&lt;/p&gt;

&lt;p&gt;Saya tidak mengatakan semua aplikasi kasir buruk.&lt;/p&gt;

&lt;p&gt;Saya hanya merasa banyak di antaranya dibangun dari perspektif yang berbeda dengan penggunanya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lalu muncul pertanyaan yang terus mengganggu saya.
&lt;/h2&gt;

&lt;p&gt;Bagaimana jika aplikasi kasir berhenti mencoba menjadi segalanya?&lt;/p&gt;

&lt;p&gt;Bagaimana jika ia hanya fokus menjadi kasir yang baik?&lt;/p&gt;

&lt;p&gt;Bukan yang paling lengkap.&lt;/p&gt;

&lt;p&gt;Bukan yang paling canggih.&lt;/p&gt;

&lt;p&gt;Bukan yang paling banyak fitur.&lt;/p&gt;

&lt;p&gt;Hanya menjadi alat yang membantu orang menyelesaikan pekerjaannya.&lt;/p&gt;

&lt;p&gt;Cepat.&lt;/p&gt;

&lt;p&gt;Jelas.&lt;/p&gt;

&lt;p&gt;Tanpa membuat pengguna berpikir terlalu banyak.&lt;/p&gt;

&lt;p&gt;Pertanyaan itu terus muncul sampai akhirnya saya memutuskan untuk membangun sendiri jawabannya.&lt;/p&gt;

&lt;p&gt;Jawaban itu saya beri nama &lt;strong&gt;KasirCepat&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Saya memulai dari prinsip yang sangat sederhana.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Offline bukan fitur tambahan.
&lt;/h3&gt;

&lt;p&gt;Offline adalah fondasi.&lt;/p&gt;

&lt;p&gt;Internet mati bukan kejadian langka.&lt;/p&gt;

&lt;p&gt;Terutama bagi banyak usaha kecil di Indonesia.&lt;/p&gt;

&lt;p&gt;Jika aplikasi berhenti bekerja ketika koneksi hilang, maka aplikasi tersebut gagal menjalankan tugas utamanya.&lt;/p&gt;

&lt;p&gt;Karena transaksi tidak menunggu sinyal kembali.&lt;/p&gt;

&lt;h3&gt;
  
  
  Speed lebih penting daripada efek visual.
&lt;/h3&gt;

&lt;p&gt;Saya berkali-kali membuang ide yang sebenarnya terlihat menarik.&lt;/p&gt;

&lt;p&gt;Animasi.&lt;/p&gt;

&lt;p&gt;Efek transisi.&lt;/p&gt;

&lt;p&gt;Komponen tambahan.&lt;/p&gt;

&lt;p&gt;Bukan karena semuanya buruk.&lt;/p&gt;

&lt;p&gt;Tetapi karena setiap tambahan memiliki biaya.&lt;/p&gt;

&lt;p&gt;Dan biaya itu dibayar oleh pengguna dalam bentuk waktu.&lt;/p&gt;

&lt;h3&gt;
  
  
  Satu layar, satu tujuan.
&lt;/h3&gt;

&lt;p&gt;Saya tidak ingin pengguna membuka halaman transaksi lalu harus mencari tombol yang dibutuhkan.&lt;/p&gt;

&lt;p&gt;Saya tidak ingin pengguna merasa tersesat.&lt;/p&gt;

&lt;p&gt;Setiap layar harus memiliki tujuan yang jelas.&lt;/p&gt;

&lt;p&gt;Sesederhana mungkin.&lt;/p&gt;




&lt;h2&gt;
  
  
  Ada alasan lain yang lebih personal.
&lt;/h2&gt;

&lt;p&gt;Saya muak melihat software yang terasa dibuat untuk dipresentasikan.&lt;/p&gt;

&lt;p&gt;Bukan untuk digunakan.&lt;/p&gt;

&lt;p&gt;Dashboard yang indah belum tentu nyaman digunakan setiap hari.&lt;/p&gt;

&lt;p&gt;Grafik yang keren belum tentu membuat transaksi lebih cepat.&lt;/p&gt;

&lt;p&gt;Fitur yang panjang belum tentu menyelesaikan masalah.&lt;/p&gt;

&lt;p&gt;Kadang yang dibutuhkan pengguna hanyalah sesuatu yang bekerja.&lt;/p&gt;

&lt;p&gt;Dan terus bekerja.&lt;/p&gt;

&lt;p&gt;Tanpa membuat hidup mereka lebih rumit.&lt;/p&gt;




&lt;h2&gt;
  
  
  141 jam. Tiga minggu. Dua hari demam.
&lt;/h2&gt;

&lt;p&gt;Kalau dihitung, angka itu sebenarnya tidak terlalu istimewa.&lt;/p&gt;

&lt;p&gt;Banyak orang menghabiskan waktu lebih lama untuk membangun sesuatu.&lt;/p&gt;

&lt;p&gt;Tetapi bagi saya, angka itu menyimpan cerita yang berbeda.&lt;/p&gt;

&lt;p&gt;Karena tidak ada investor yang menunggu.&lt;/p&gt;

&lt;p&gt;Tidak ada perusahaan yang memberi tenggat waktu.&lt;/p&gt;

&lt;p&gt;Tidak ada tim besar yang mendorong pekerjaan ini maju.&lt;/p&gt;

&lt;p&gt;Hanya saya.&lt;/p&gt;

&lt;p&gt;Laptop.&lt;/p&gt;

&lt;p&gt;Dan keyakinan bahwa masalah ini layak diselesaikan.&lt;/p&gt;

&lt;p&gt;Dua hari di antaranya saya bahkan sedang demam.&lt;/p&gt;

&lt;p&gt;Saya masih ingat membuka laptop sambil berpikir bahwa mungkin saya seharusnya beristirahat.&lt;/p&gt;

&lt;p&gt;Tetapi setiap kali menutup layar, pikiran itu kembali lagi.&lt;/p&gt;

&lt;p&gt;Mengapa pekerjaan sederhana harus terasa rumit hanya karena software yang digunakan?&lt;/p&gt;

&lt;p&gt;Pertanyaan itu terdengar kecil.&lt;/p&gt;

&lt;p&gt;Tetapi justru pertanyaan kecil seperti itulah yang membuat banyak produk lahir.&lt;/p&gt;




&lt;h2&gt;
  
  
  Sebelum KasirCepat, ada banyak hal yang tidak berjalan sesuai rencana.
&lt;/h2&gt;

&lt;p&gt;Interview yang gagal.&lt;/p&gt;

&lt;p&gt;Email yang tidak pernah mendapat balasan.&lt;/p&gt;

&lt;p&gt;Proyek yang selesai dibangun tetapi hampir tidak mendapat perhatian.&lt;/p&gt;

&lt;p&gt;Mungkin sebagian besar pembuat produk independen pernah mengalami fase seperti itu.&lt;/p&gt;

&lt;p&gt;Fase ketika kita mulai mempertanyakan apakah semua usaha yang dilakukan benar-benar berarti.&lt;/p&gt;

&lt;p&gt;Saya juga pernah berada di titik itu.&lt;/p&gt;

&lt;p&gt;Dan mungkin sesekali masih berada di sana.&lt;/p&gt;

&lt;p&gt;Tetapi KasirCepat terasa berbeda.&lt;/p&gt;

&lt;p&gt;Karena untuk pertama kalinya saya tidak membayangkan angka unduhan.&lt;/p&gt;

&lt;p&gt;Saya tidak membayangkan statistik.&lt;/p&gt;

&lt;p&gt;Saya tidak membayangkan pertumbuhan pengguna.&lt;/p&gt;

&lt;p&gt;Saya membayangkan seseorang membuka aplikasi ini sebelum tokonya buka.&lt;/p&gt;

&lt;p&gt;Menggunakannya sepanjang hari.&lt;/p&gt;

&lt;p&gt;Lalu menutup tokonya tanpa harus berdebat dengan aplikasi yang ia gunakan.&lt;/p&gt;

&lt;p&gt;Gambaran itu terasa jauh lebih nyata daripada grafik apa pun.&lt;/p&gt;




&lt;h2&gt;
  
  
  Pada akhirnya, ini bukan cerita tentang aplikasi kasir.
&lt;/h2&gt;

&lt;p&gt;Ini cerita tentang rasa hormat terhadap waktu pengguna.&lt;/p&gt;

&lt;p&gt;Tentang keyakinan bahwa software seharusnya membuat pekerjaan lebih mudah, bukan lebih rumit.&lt;/p&gt;

&lt;p&gt;Tentang keberanian untuk menghapus sesuatu ketika tidak diperlukan.&lt;/p&gt;

&lt;p&gt;Tentang memilih kesederhanaan ketika kompleksitas terlihat lebih mengesankan.&lt;/p&gt;

&lt;p&gt;Dan mungkin, tentang keyakinan yang agak keras kepala bahwa hal-hal kecil tetap layak diperjuangkan.&lt;/p&gt;

&lt;p&gt;Bahkan ketika tidak banyak orang yang memperhatikannya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Jika ada satu hal yang ingin saya capai.
&lt;/h2&gt;

&lt;p&gt;Saya tidak ingin membuat aplikasi kasir terbesar.&lt;/p&gt;

&lt;p&gt;Saya tidak ingin membuat aplikasi kasir paling canggih.&lt;/p&gt;

&lt;p&gt;Saya hanya ingin membuat aplikasi yang membantu seseorang bekerja sedikit lebih mudah hari ini dibanding kemarin.&lt;/p&gt;

&lt;p&gt;Kalau itu berhasil terjadi, maka 141 jam, tiga minggu, dan dua hari demam terasa seperti harga yang layak dibayar.&lt;/p&gt;




&lt;h2&gt;
  
  
  Coba KasirCepat
&lt;/h2&gt;

&lt;p&gt;KasirCepat adalah aplikasi kasir offline untuk UMKM Indonesia.&lt;/p&gt;

&lt;p&gt;Tersedia untuk Android, Windows, dan Linux.&lt;/p&gt;

&lt;p&gt;Gratis digunakan.&lt;/p&gt;

&lt;p&gt;Tanpa batas produk.&lt;/p&gt;

&lt;p&gt;Tanpa batas transaksi.&lt;/p&gt;

&lt;p&gt;Dan tetap berjalan meskipun internet tidak tersedia.&lt;/p&gt;

&lt;p&gt;🔗 &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;Kalau kamu mengenal pemilik warung, toko kelontong, atau usaha kecil yang masih mencatat manual, mungkin aplikasi ini bisa membantu mereka bekerja sedikit lebih mudah setiap hari.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>kasir</category>
      <category>flagodna</category>
    </item>
    <item>
      <title>I Got Tired of Writing the Same Flutter Code Over and Over, So I Made a Package (flow_nav)</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Wed, 03 Jun 2026 04:11:22 +0000</pubDate>
      <link>https://dev.to/cas8398/i-got-tired-of-writing-the-same-flutter-code-over-and-over-so-i-made-a-package-flownav-10h1</link>
      <guid>https://dev.to/cas8398/i-got-tired-of-writing-the-same-flutter-code-over-and-over-so-i-made-a-package-flownav-10h1</guid>
      <description>&lt;h2&gt;
  
  
  The app worked. But only on phone.
&lt;/h2&gt;

&lt;p&gt;Every Flutter project I started ended up the same way.&lt;/p&gt;

&lt;p&gt;I'd build something, it'd look great on my phone, and then I'd open it on a tablet or resize the window on desktop — and it'd just be this sad, stretched list taking up the entire screen. One column. No sidebar. No detail panel. Just vibes.&lt;/p&gt;

&lt;p&gt;So I'd go fix it. And that's where the real pain started.&lt;/p&gt;




&lt;h2&gt;
  
  
  The if-else spiral
&lt;/h2&gt;

&lt;p&gt;You've seen this code. You've probably written it too.&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="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MediaQuery&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// desktop layout&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MediaQuery&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;of&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;width&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;600&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// tablet layout&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// phone layout&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fine for one widget. But then you need it in the AppBar. And the navigation logic. And the detail panel. And the sidebar. And the FAB visibility. And before you know it, every file in your project has this same conditional sitting inside &lt;code&gt;build()&lt;/code&gt;, each with slightly different magic numbers.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;600&lt;/code&gt;. &lt;code&gt;720&lt;/code&gt;. &lt;code&gt;1024&lt;/code&gt;. &lt;code&gt;800&lt;/code&gt;. Scattered everywhere. Not one source of truth.&lt;/p&gt;

&lt;p&gt;And when the designer says "actually let's change the tablet breakpoint to 680" — you grep through 15 files and pray you got them all.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then I tried existing packages
&lt;/h2&gt;

&lt;p&gt;There are some good ones out there. But most of them came with opinions I didn't ask for.&lt;/p&gt;

&lt;p&gt;They'd give me a &lt;code&gt;NavigationRail&lt;/code&gt; I didn't want. Or a &lt;code&gt;Drawer&lt;/code&gt; that looked nothing like my app. Or a pre-built scaffold that handled layout but had no answer for navigation — so I still had to wire up the push/pop myself and figure out when to show a detail panel vs when to push a new route.&lt;/p&gt;

&lt;p&gt;The packages that handled layout didn't handle navigation.&lt;br&gt;&lt;br&gt;
The ones that handled navigation didn't handle layout.&lt;br&gt;&lt;br&gt;
None of them cared about my router.&lt;/p&gt;

&lt;p&gt;I was using GoRouter. The package assumed &lt;code&gt;Navigator.push&lt;/code&gt;. I'd end up writing adapter code just to make the two talk to each other, which kind of defeats the point.&lt;/p&gt;


&lt;h2&gt;
  
  
  The navigation thing was the worst part
&lt;/h2&gt;

&lt;p&gt;Here's the scenario I kept running into:&lt;/p&gt;

&lt;p&gt;User taps an item in a list.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On &lt;strong&gt;phone&lt;/strong&gt;: push a new route, full screen.&lt;/li&gt;
&lt;li&gt;On &lt;strong&gt;tablet/desktop&lt;/strong&gt;: swap the detail panel on the right. Don't push anything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple concept. But the code to handle this correctly — accounting for screen size, calling the right navigation method, keeping the detail panel state in sync — ended up being this tangled mess that lived in every single screen that had a list.&lt;/p&gt;

&lt;p&gt;Every. Single. One.&lt;/p&gt;

&lt;p&gt;I'd copy-paste it, tweak it slightly, forget to update one of the copies, and end up with bugs that only appeared on tablet. The kind that slip past testing because you test on your phone.&lt;/p&gt;


&lt;h2&gt;
  
  
  So I pulled it all out
&lt;/h2&gt;

&lt;p&gt;I started extracting this logic into a shared utility. Then the utility grew. Then I realized it was basically a mini framework for adaptive Flutter apps — and other people probably needed it too.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F056crquok49ckfzbdb0i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F056crquok49ckfzbdb0i.png" alt="flow_nav desktop" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea is simple: &lt;strong&gt;you describe your layout once, and the package figures out what to do based on screen size.&lt;/strong&gt; You don't write breakpoint checks. You don't wire up navigation conditionals. You just tell it what your body is, what your detail panel is, what your sidebar is — and it handles the rest.&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;FlowScaffold&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;appBar:&lt;/span&gt; &lt;span class="n"&gt;FlowAppBar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;title:&lt;/span&gt; &lt;span class="n"&gt;Text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'My App'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="nl"&gt;toolbarWidget:&lt;/span&gt; &lt;span class="n"&gt;MyDesktopToolbar&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nl"&gt;body:&lt;/span&gt; &lt;span class="n"&gt;MyListView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="nl"&gt;onItemTap:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;FlowNavController&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="nl"&gt;context:&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nl"&gt;builder:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;DetailPage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nl"&gt;item:&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nl"&gt;onDetailOpen:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;(()&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;_detail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;),&lt;/span&gt;
  &lt;span class="nl"&gt;detailPanel:&lt;/span&gt; &lt;span class="n"&gt;_detail&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nl"&gt;sidebar:&lt;/span&gt; &lt;span class="n"&gt;MySidebar&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;On phone, &lt;code&gt;sidebar&lt;/code&gt; is ignored, &lt;code&gt;detailPanel&lt;/code&gt; is ignored, tapping an item pushes a new route.&lt;br&gt;&lt;br&gt;
On tablet, you get a split view — list on the left, detail on the right.&lt;br&gt;&lt;br&gt;
On desktop, you get three columns — sidebar, list, detail.&lt;/p&gt;

&lt;p&gt;One widget. All three layouts.&lt;/p&gt;


&lt;h2&gt;
  
  
  It doesn't touch your UI
&lt;/h2&gt;

&lt;p&gt;This was the thing I was most careful about.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;flow_nav&lt;/code&gt; has no default styles, no pre-built components, no color scheme, no navigation rail, no drawer chrome. It provides &lt;strong&gt;zero UI opinions&lt;/strong&gt;. Your &lt;code&gt;AppBar&lt;/code&gt; looks like your &lt;code&gt;AppBar&lt;/code&gt;. Your sidebar looks like whatever you pass in. Your detail panel is just a widget.&lt;/p&gt;

&lt;p&gt;The package handles &lt;em&gt;when&lt;/em&gt; and &lt;em&gt;where&lt;/em&gt; things appear. You handle &lt;em&gt;what&lt;/em&gt; they look like.&lt;/p&gt;

&lt;p&gt;That also means it doesn't care about your router. You can plug in GoRouter, GetX, AutoRoute, or just the plain &lt;code&gt;Navigator&lt;/code&gt;:&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="c1"&gt;// GoRouter&lt;/span&gt;
&lt;span class="n"&gt;FlowNavConfig&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nl"&gt;onPush:&lt;/span&gt; &lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;required&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fullscreenDialog&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'/detail'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;Future&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="nl"&gt;onPop:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;pop&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;Set it once in &lt;code&gt;main.dart&lt;/code&gt; and forget it. &lt;code&gt;FlowNavController.open()&lt;/code&gt; will use your router on phone and skip it entirely on larger screens.&lt;/p&gt;




&lt;h2&gt;
  
  
  What it looks like across screen sizes
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Phone&lt;/th&gt;
&lt;th&gt;Tablet&lt;/th&gt;
&lt;th&gt;Desktop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AppBar&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Toolbar in split view&lt;/td&gt;
&lt;td&gt;Toolbar above content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Layout&lt;/td&gt;
&lt;td&gt;Single column&lt;/td&gt;
&lt;td&gt;List + Detail&lt;/td&gt;
&lt;td&gt;Sidebar + List + Detail&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Navigation&lt;/td&gt;
&lt;td&gt;Full-screen push&lt;/td&gt;
&lt;td&gt;Detail panel swap&lt;/td&gt;
&lt;td&gt;Detail panel swap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bottom nav&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Is it perfect?
&lt;/h2&gt;

&lt;p&gt;No. It's 1.0.0.&lt;/p&gt;

&lt;p&gt;There are things I want to add — better animation when the detail panel swaps, a more flexible column sizing API, maybe some helpers for common empty states. If you use it and run into something rough, open an issue. I'll actually look at it.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to get it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;dependencies&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;flow_nav&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;^1.0.0&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;pub.dev&lt;/strong&gt;: &lt;a href="https://pub.dev/packages/flow_nav" rel="noopener noreferrer"&gt;pub.dev/packages/flow_nav&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/cas8398/flow_nav" rel="noopener noreferrer"&gt;github.com/cas8398/flow_nav&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If it saves you from writing one more &lt;code&gt;MediaQuery.of(context).size.width &amp;gt; 600&lt;/code&gt; check, it did its job.&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>dart</category>
      <category>cahyanudien</category>
      <category>wecoded</category>
    </item>
    <item>
      <title>JDU — Jira Desktop Unofficial: I Got Tired of Opening Jira in My Browser. So I Built a Desktop App.</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Sun, 31 May 2026 02:31:24 +0000</pubDate>
      <link>https://dev.to/cas8398/jdu-jira-desktop-unofficial-i-got-tired-of-opening-jira-in-my-browser-so-i-built-a-desktop-app-1o8b</link>
      <guid>https://dev.to/cas8398/jdu-jira-desktop-unofficial-i-got-tired-of-opening-jira-in-my-browser-so-i-built-a-desktop-app-1o8b</guid>
      <description>&lt;p&gt;Every developer has that one browser tab that never closes.&lt;/p&gt;

&lt;p&gt;For me, it was Jira.&lt;/p&gt;

&lt;p&gt;It lived somewhere between Gmail and Stack Overflow, buried under 20 other tabs — waiting for me to accidentally close it and lose the URL I'd typed in three times that morning. One day I just got fed up. Not with Jira itself, but with the &lt;em&gt;friction&lt;/em&gt; of running it inside a browser.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;JDU — Jira Desktop Unofficial&lt;/strong&gt;. A lightweight, dedicated Jira desktop app built with Tauri and Rust.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Built JDU (Jira Desktop Unofficial)
&lt;/h2&gt;

&lt;p&gt;Nothing is technically wrong with Jira's web interface. It works fine. But keeping it inside a browser tab means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It competes with 20 other tabs for your attention&lt;/li&gt;
&lt;li&gt;Chrome silently "memory-saves" the tab and you lose your place&lt;/li&gt;
&lt;li&gt;There's no dedicated window you can &lt;code&gt;Cmd+Tab&lt;/code&gt; into directly&lt;/li&gt;
&lt;li&gt;Every browser update is one more thing that could quietly break your workflow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I wanted was simple: &lt;strong&gt;Jira in its own window. Nothing else.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Tauri — and Not Electron?
&lt;/h2&gt;

&lt;p&gt;This is the first question everyone asks.&lt;/p&gt;

&lt;p&gt;Electron is the obvious choice. It's popular, well-documented, and battle-tested. But Electron ships an &lt;em&gt;entire Chromium browser engine&lt;/em&gt; inside every app — 100MB+ just to render a webpage. That's like buying a cargo ship to deliver a letter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tauri&lt;/strong&gt; takes a smarter approach. It uses the webview that's &lt;em&gt;already installed on your OS&lt;/em&gt; — WebView2 on Windows, WebKit on macOS and Linux. The backend is written in Rust. No bundled browser. No bloat.&lt;/p&gt;

&lt;p&gt;The result speaks for itself:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;JDU (Jira Desktop Unofficial)&lt;/th&gt;
&lt;th&gt;Typical Electron App&lt;/th&gt;
&lt;th&gt;Browser Tab&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Memory Usage&lt;/td&gt;
&lt;td&gt;~80 MB&lt;/td&gt;
&lt;td&gt;~350 MB&lt;/td&gt;
&lt;td&gt;~150 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup Time&lt;/td&gt;
&lt;td&gt;&amp;lt; 2 seconds&lt;/td&gt;
&lt;td&gt;5–8 seconds&lt;/td&gt;
&lt;td&gt;Instant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download Size&lt;/td&gt;
&lt;td&gt;~8 MB&lt;/td&gt;
&lt;td&gt;~120 MB&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background CPU&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;~8 MB download. ~80 MB RAM. Under 2 seconds to launch.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For an app I have open all day, every day — those numbers matter a lot.&lt;/p&gt;




&lt;h2&gt;
  
  
  What JDU Does (and Doesn't Do)
&lt;/h2&gt;

&lt;p&gt;JDU is a &lt;em&gt;thin wrapper&lt;/em&gt;, not a reimplementation of Jira. It gives Jira its own window and gets out of the way.&lt;/p&gt;

&lt;p&gt;✅ Works with any Jira instance — Cloud, Server, or Data Center&lt;br&gt;&lt;br&gt;
✅ Remembers your Jira URL and window preferences across sessions&lt;br&gt;&lt;br&gt;
✅ Dedicated desktop window, completely separate from your browser&lt;br&gt;&lt;br&gt;
✅ Zero telemetry, zero tracking, zero data collection&lt;br&gt;&lt;br&gt;
✅ Native OS feel — respects system themes&lt;br&gt;&lt;br&gt;
✅ MIT licensed and fully open source  &lt;/p&gt;

&lt;p&gt;❌ Not affiliated with or endorsed by Atlassian&lt;br&gt;&lt;br&gt;
❌ Doesn't handle your credentials — Jira's own login system does, exactly like a browser&lt;br&gt;&lt;br&gt;
❌ Multi-account support isn't here yet (it's on the roadmap)  &lt;/p&gt;

&lt;p&gt;Your login. Your data. Your workflow. JDU just gives it a proper home.&lt;/p&gt;


&lt;h2&gt;
  
  
  Installing JDU
&lt;/h2&gt;

&lt;p&gt;Download is available for &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;macOS&lt;/strong&gt;, and &lt;strong&gt;Linux&lt;/strong&gt; from the &lt;a href="https://github.com/cas8398/jira-desktop-unofficial/releases" rel="noopener noreferrer"&gt;GitHub releases page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Prefer to build from source? You'll need Rust, Node.js, and the &lt;a href="https://tauri.app/start/prerequisites/" rel="noopener noreferrer"&gt;Tauri prerequisites&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/cas8398/jira-desktop-unofficial
&lt;span class="nb"&gt;cd &lt;/span&gt;jira-desktop-unofficial
pnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; pnpm tauri build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  The Honest Part
&lt;/h2&gt;

&lt;p&gt;This isn't a revolutionary product. It's a small tool that solves a specific, annoying problem.&lt;/p&gt;

&lt;p&gt;I built it because I wanted it to exist. I published it because maybe you do too. The source is on GitHub, the license is MIT, and issues and PRs are genuinely welcome.&lt;/p&gt;

&lt;p&gt;If you've ever wished Jira had a real desktop app — &lt;strong&gt;JDU (Jira Desktop Unofficial)&lt;/strong&gt; is the Jira desktop client that Atlassian never built. Free, open source, and under 8 MB.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Try JDU:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🌐 &lt;a href="https://cas8398.github.io/jira-desktop-unofficial/" rel="noopener noreferrer"&gt;Landing page&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💻 &lt;a href="https://github.com/cas8398/jira-desktop-unofficial" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;📦 &lt;a href="https://github.com/cas8398/jira-desktop-unofficial/releases" rel="noopener noreferrer"&gt;Download latest release&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>jira</category>
      <category>jdu</category>
      <category>cahyanudien</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Three Phases Everyone Goes Through But Nobody Talks About: Roots, Growth, Sky</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Mon, 18 May 2026 15:16:52 +0000</pubDate>
      <link>https://dev.to/cas8398/three-phases-everyone-goes-through-but-nobody-talks-about-roots-growth-sky-4nja</link>
      <guid>https://dev.to/cas8398/three-phases-everyone-goes-through-but-nobody-talks-about-roots-growth-sky-4nja</guid>
      <description>&lt;p&gt;Have you ever felt stuck — but couldn't point to why?&lt;/p&gt;

&lt;p&gt;Not a work problem. Not a relationship problem. Not one specific thing you could name. Just a heaviness sitting in your chest, and you didn't know how long it had been there.&lt;/p&gt;

&lt;p&gt;I've been there. And when I started writing poetry, I realized — this isn't a unique experience. It's a phase. And almost everyone goes through it.&lt;/p&gt;

&lt;p&gt;We just never gave it a name.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase One: Roots
&lt;/h2&gt;

&lt;p&gt;This is the hardest phase — because you don't yet know it's a phase.&lt;/p&gt;

&lt;p&gt;It feels like waking up inside a cave. Dark. Quiet. You move, but the weight only gets heavier, not lighter. You ask: &lt;em&gt;where is the light?&lt;/em&gt; But even that question feels exhausting.&lt;/p&gt;

&lt;p&gt;A lot of people stop moving here. Not because they give up — but because they don't know which direction to move.&lt;/p&gt;

&lt;p&gt;What's actually happening: you're putting down roots. Roots aren't visible from the outside. Roots aren't beautiful. They grow downward first, into the darkness, before the tree can stand.&lt;/p&gt;

&lt;p&gt;This isn't regression. This is foundation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase Two: Growth
&lt;/h2&gt;

&lt;p&gt;This phase is more confusing than the first — because things look fine on the outside, but something inside still isn't finished.&lt;/p&gt;

&lt;p&gt;You start moving again. There are good moments, bright moments. People say you seem better. You almost believe them.&lt;/p&gt;

&lt;p&gt;But time doesn't stand still. It keeps moving, and you realize — you're not quite ready to keep pretending everything is comfortable. Something is growing, and growth isn't always clean.&lt;/p&gt;

&lt;p&gt;Sometimes growing means letting go. Sometimes it means separating from an older version of yourself. Sometimes it means admitting you need more time than you thought.&lt;/p&gt;

&lt;p&gt;That's not weakness. That's the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Phase Three: Sky
&lt;/h2&gt;

&lt;p&gt;This isn't the phase where everything is perfect. This isn't a happy ending.&lt;/p&gt;

&lt;p&gt;Sky is the phase where you can see further — not because the problems disappeared, but because you've climbed high enough to see that they're part of a larger landscape.&lt;/p&gt;

&lt;p&gt;Here you start to feel grateful. Not a forced gratitude — but the kind that grows slowly, like realizing that everything heavy from before shaped who you are now.&lt;/p&gt;

&lt;p&gt;And here you understand: this journey never really ends. You just keep walking, with different weight, with slightly more wisdom.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why naming these phases matters
&lt;/h2&gt;

&lt;p&gt;Because when you know you're in the Roots phase — you won't think you're broken.&lt;/p&gt;

&lt;p&gt;When you know you're in the Growth phase — you won't rush to arrive.&lt;/p&gt;

&lt;p&gt;And when you finally reach Sky — you'll look back and understand why all of it needed to happen.&lt;/p&gt;




&lt;p&gt;These three phases are the backbone of my first poetry book, &lt;strong&gt;Stillness That Walks&lt;/strong&gt;. Twenty-four poems, three parts, one journey that offers no answers — only company.&lt;/p&gt;

&lt;p&gt;If you're in one of these phases right now, maybe there's a line in there that feels like yours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cahyanudien.site/stillness-that-walks/" rel="noopener noreferrer"&gt;cahyanudien.site/stillness-that-walks&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cahyanudien Aziz Saputra is the founder of FlagoDNA, a self-taught app developer. He lives in quiet — writing code, assembling logic, arranging meaning. Many people use what he builds. No one knows how many nights he spent in silence. This book is one of the ways he finally spoke.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>stillnessthatwalks</category>
      <category>cahyanudien</category>
      <category>reflection</category>
      <category>books</category>
    </item>
    <item>
      <title>Tiga Fase yang Semua Orang Lewati Tapi Jarang Diakui: Akar, Tumbuh, Langit</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Sat, 16 May 2026 06:58:43 +0000</pubDate>
      <link>https://dev.to/cas8398/tiga-fase-yang-semua-orang-lewati-tapi-jarang-diakui-akar-tumbuh-langit-12lm</link>
      <guid>https://dev.to/cas8398/tiga-fase-yang-semua-orang-lewati-tapi-jarang-diakui-akar-tumbuh-langit-12lm</guid>
      <description>&lt;p&gt;Ada yang pernah merasa terjebak — tapi tidak tahu terjebak di mana?&lt;/p&gt;

&lt;p&gt;Bukan masalah kerjaan. Bukan masalah hubungan. Bukan satu hal yang bisa ditunjuk. Hanya sebuah perasaan berat yang duduk di dada, dan kamu tidak tahu sejak kapan ia di sana.&lt;/p&gt;

&lt;p&gt;Aku pernah di situ. Dan ketika aku mulai menulis puisi, aku sadar — ini bukan pengalaman yang unik. Ini fase. Dan hampir semua orang melewatinya.&lt;/p&gt;

&lt;p&gt;Hanya saja tidak ada yang menyebutnya dengan nama.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase Pertama: Akar
&lt;/h2&gt;

&lt;p&gt;Ini fase paling berat — karena kamu belum tahu ini sebuah fase.&lt;/p&gt;

&lt;p&gt;Rasanya seperti terbangun di dalam gua. Gelap. Sunyi. Kamu melangkah tapi beban di hati semakin berat, bukan berkurang. Kamu bertanya: &lt;em&gt;di mana cahaya itu?&lt;/em&gt; Tapi bahkan pertanyaan itu terasa menguras tenaga.&lt;/p&gt;

&lt;p&gt;Di sini banyak orang berhenti bergerak. Bukan karena menyerah — tapi karena tidak tahu harus bergerak ke arah mana.&lt;/p&gt;

&lt;p&gt;Yang sebenarnya terjadi: kamu sedang berakar. Akar tidak kelihatan dari luar. Akar tidak indah. Akar tumbuh ke bawah dulu, ke dalam kegelapan, sebelum pohon bisa berdiri.&lt;/p&gt;

&lt;p&gt;Ini bukan kemunduran. Ini fondasi.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase Kedua: Tumbuh
&lt;/h2&gt;

&lt;p&gt;Fase ini lebih membingungkan dari yang pertama — karena terasa baik-baik saja di luar, tapi di dalam masih ada yang belum selesai.&lt;/p&gt;

&lt;p&gt;Kamu mulai bergerak lagi. Ada momen riang, ada momen gemerlap. Orang-orang bilang kamu sudah baikan. Kamu sendiri hampir percaya.&lt;/p&gt;

&lt;p&gt;Tapi waktu tidak berdiam diri. Ia terus berjalan, dan kamu sadar — jiwa ini belum siap untuk terus berpura-pura nyaman. Ada pertumbuhan yang sedang terjadi, dan pertumbuhan itu tidak selalu mulus.&lt;/p&gt;

&lt;p&gt;Kadang tumbuh artinya melepas. Kadang artinya berpisah dengan versi dirimu yang lama. Kadang artinya mengakui bahwa kamu butuh waktu lebih lama dari yang kamu kira.&lt;/p&gt;

&lt;p&gt;Itu bukan kelemahan. Itu proses.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fase Ketiga: Langit
&lt;/h2&gt;

&lt;p&gt;Ini bukan fase di mana semuanya sempurna. Ini bukan &lt;em&gt;happy ending&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Langit adalah fase di mana kamu bisa melihat lebih jauh — bukan karena masalahnya hilang, tapi karena kamu sudah cukup tinggi untuk melihat bahwa masalah itu bagian dari lanskap yang lebih besar.&lt;/p&gt;

&lt;p&gt;Di sini kamu mulai bisa berterima kasih. Bukan terima kasih yang dipaksakan — tapi yang tumbuh perlahan, seperti menyadari bahwa semua yang berat dulu, membentukmu sekarang.&lt;/p&gt;

&lt;p&gt;Dan di sini kamu sadar: perjalanan ini tidak pernah benar-benar selesai. Kamu hanya terus berjalan, dengan beban yang berbeda, dengan cara yang sedikit lebih bijak.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kenapa penting memberi nama pada fase ini?
&lt;/h2&gt;

&lt;p&gt;Karena ketika kamu tahu kamu sedang di fase Akar — kamu tidak akan mengira dirimu rusak.&lt;/p&gt;

&lt;p&gt;Ketika kamu tahu kamu sedang di fase Tumbuh — kamu tidak akan terburu-buru untuk sampai.&lt;/p&gt;

&lt;p&gt;Dan ketika kamu akhirnya di fase Langit — kamu akan menoleh ke belakang dan mengerti kenapa semua itu perlu terjadi.&lt;/p&gt;




&lt;p&gt;Tiga fase ini yang menjadi tulang punggung buku puisi pertamaku, &lt;strong&gt;Hening yang Berjalan&lt;/strong&gt;. Dua puluh empat puisi, tiga bagian, satu perjalanan yang tidak menawarkan jawaban — hanya menemani.&lt;/p&gt;

&lt;p&gt;Kalau kamu sedang di salah satu fase itu sekarang, mungkin ada baris di sana yang terasa seperti milikmu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.cahyanudien.site/hening-yang-berjalan/" rel="noopener noreferrer"&gt;cahyanudien.site/hening-yang-berjalan&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cahyanudien Aziz Saputra adalah pendiri FlagoDNA, pengembang aplikasi yang belajar mandiri. Banyak orang memakai apa yang ia buat. Tidak ada yang tahu berapa malam ia habiskan dalam sunyi. Buku ini adalah salah satu caranya berbicara.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>books</category>
      <category>cahyanudien</category>
      <category>puisi</category>
    </item>
    <item>
      <title>I Write Code All Day. Then I Write Poetry at Night. Here’s Why</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Thu, 14 May 2026 07:14:46 +0000</pubDate>
      <link>https://dev.to/cas8398/i-write-code-all-day-then-i-write-poetry-at-night-heres-why-321c</link>
      <guid>https://dev.to/cas8398/i-write-code-all-day-then-i-write-poetry-at-night-heres-why-321c</guid>
      <description>&lt;p&gt;I never planned to be a poet.&lt;/p&gt;

&lt;p&gt;I planned to be a developer. And that's what happened — I build apps, write code, ship products. A lot of people use what I make. Most of them don't know my name.&lt;/p&gt;

&lt;p&gt;But there are things code cannot fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  Code is a precise language. Poetry is an honest one.
&lt;/h2&gt;

&lt;p&gt;When I write a function, I know what it wants. There's an input, an output, logic in between. Everything is testable. If something's wrong, there's an error message.&lt;/p&gt;

&lt;p&gt;Life doesn't work like that.&lt;/p&gt;

&lt;p&gt;There are days that feel heavy without reason. Losses that never got named. Questions that are more comfortable left unanswered than resolved.&lt;/p&gt;

&lt;p&gt;Code can't hold that. Poetry can.&lt;/p&gt;

&lt;p&gt;Not because poetry has answers — quite the opposite. Poetry is the space where questions are allowed to stay questions. Where "I don't know" isn't an error, it's part of the process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Night is the only honest time
&lt;/h2&gt;

&lt;p&gt;During the day, I'm busy. Features to ship, bugs to fix, notifications that don't stop. All of it is real and needs to get done.&lt;/p&gt;

&lt;p&gt;But the night — the night is mine.&lt;/p&gt;

&lt;p&gt;That's where I started writing. Not with a specific goal. Not with a word count target. Just sitting down and letting something come out.&lt;/p&gt;

&lt;p&gt;Some nights only a few lines came. Some nights nothing at all. But there were nights when I wrote something and felt — &lt;em&gt;this&lt;/em&gt;. This is the thing I couldn't say any other way.&lt;/p&gt;




&lt;h2&gt;
  
  
  Two languages, one person
&lt;/h2&gt;

&lt;p&gt;People often ask: how can you be a developer and write poetry?&lt;/p&gt;

&lt;p&gt;The better question might be: how could you not?&lt;/p&gt;

&lt;p&gt;Both are ways of making something from nothing. Both start from a question that doesn't have an answer yet. Both require the patience to sit in uncertainty until something becomes clear.&lt;/p&gt;

&lt;p&gt;The difference — code is done when it runs. Poetry is done when it feels right.&lt;/p&gt;




&lt;h2&gt;
  
  
  Then it became a book
&lt;/h2&gt;

&lt;p&gt;After writing long enough in the nights, I had a collection of words that didn't know where to go.&lt;/p&gt;

&lt;p&gt;I arranged them. Read them again. Removed what wasn't honest, kept what felt true.&lt;/p&gt;

&lt;p&gt;That became &lt;strong&gt;Stillness That Walks&lt;/strong&gt; — my first poetry book. Twenty-four poems in three parts: Roots, Growth, Sky. A journey that doesn't offer conclusions, only company.&lt;/p&gt;

&lt;p&gt;I didn't write it as someone who has arrived. I wrote it as someone still walking.&lt;/p&gt;

&lt;p&gt;Maybe you've been at that point too.&lt;/p&gt;




&lt;p&gt;If you're curious, the book is here: &lt;a href="https://www.cahyanudien.site/stillness-that-walks/" rel="noopener noreferrer"&gt;cahyanudien.site/stillness-that-walks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And if you're also a developer quietly carrying something — maybe it's time to let it out.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cahyanudien Aziz Saputra is the founder of FlagoDNA, a self-taught app developer. He lives in quiet — writing code, assembling logic, arranging meaning. Many people use what he builds. No one knows how many nights he spent in silence. This book is one of the ways he finally spoke.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>books</category>
      <category>flagodna</category>
      <category>cahyanudien</category>
    </item>
    <item>
      <title>JDU — Jira Desktop Unofficial: A Minimal Jira Desktop Wrapper Built with Tauri | Cahyanudien Blogs</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Thu, 14 May 2026 02:56:35 +0000</pubDate>
      <link>https://dev.to/cas8398/jdu-jira-desktop-unofficial-a-minimal-jira-desktop-wrapper-built-with-tauri-cahyanudien-blogs-i9j</link>
      <guid>https://dev.to/cas8398/jdu-jira-desktop-unofficial-a-minimal-jira-desktop-wrapper-built-with-tauri-cahyanudien-blogs-i9j</guid>
      <description>&lt;h2&gt;
  
  
  Stop letting browser tabs steal your focus.
&lt;/h2&gt;

&lt;p&gt;If you use Jira every day, you already know the feeling. You open a new tab to check a ticket. Five minutes later you're reading an article, skimming a notification, or stuck in a rabbit hole you didn't plan for. The work you opened Jira for? Still waiting.&lt;/p&gt;

&lt;p&gt;This is the problem &lt;strong&gt;JDU — Jira Desktop Unofficial&lt;/strong&gt; was built to solve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;JDU&lt;/strong&gt; (short for &lt;em&gt;Jira Desktop Unofficial&lt;/em&gt;) is a minimal, focused desktop wrapper for Jira — built with &lt;a href="https://tauri.app" rel="noopener noreferrer"&gt;Tauri&lt;/a&gt; and Rust. It gives Jira its own dedicated window, completely separate from your browser. No tabs. No distractions. Just your work.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 &lt;strong&gt;JDU = Jira Desktop Unofficial (JDU) — A Minimal Jira Desktop Wrapper Built with Tauri.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
That's the full name. You'll see it everywhere: in the app, in the releases, and in the community.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🔗 Quick Links
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;📥 Download&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cas8398/jira-desktop-unofficial/releases" rel="noopener noreferrer"&gt;github.com/cas8398/jira-desktop-unofficial/releases&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;⭐ GitHub&lt;/td&gt;
&lt;td&gt;&lt;a href="https://github.com/cas8398/jira-desktop-unofficial" rel="noopener noreferrer"&gt;github.com/cas8398/jira-desktop-unofficial&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🌐 Project Page&lt;/td&gt;
&lt;td&gt;&lt;a href="https://cas8398.github.io/jira-desktop-unofficial/" rel="noopener noreferrer"&gt;cas8398.github.io/jira-desktop-unofficial&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📖 Medium&lt;/td&gt;
&lt;td&gt;&lt;a href="https://medium.com/@cas8398/jira-desktop-unofficial-a-minimal-jira-desktop-wrapper-built-with-tauri-5ab15a3586aa" rel="noopener noreferrer"&gt;Read the original story&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🖥️ What Is JDU?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;JDU — Jira Desktop Unofficial&lt;/strong&gt; is a desktop application that wraps your Jira instance in a clean, native window. It doesn't add new features to Jira itself — it changes &lt;em&gt;how&lt;/em&gt; you access it.&lt;/p&gt;

&lt;p&gt;Instead of opening Jira inside a browser tab surrounded by noise, JDU gives it its own space. You launch it like you launch Slack or VS Code. It opens directly into Jira. You work. You close it. That's it.&lt;/p&gt;

&lt;p&gt;Under the hood, JDU uses &lt;strong&gt;Tauri&lt;/strong&gt; — a modern framework that combines a Rust backend with your operating system's native webview. This means no Chromium bundled inside, no Node.js bloat, and no 300MB memory drain before you've even logged in.&lt;/p&gt;

&lt;p&gt;It supports &lt;strong&gt;any Jira instance&lt;/strong&gt;: Jira Cloud, Jira Server, and Jira Data Center. On first launch, you paste in your URL. JDU remembers it. Every launch after that goes straight to your board.&lt;/p&gt;




&lt;h2&gt;
  
  
  ✨ Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  🖥️ Dedicated Window
&lt;/h3&gt;

&lt;p&gt;Jira gets its own window — completely isolated from your browser. Alt-Tab to JDU the same way you'd switch to Slack or your terminal. Your other tabs stay clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚡ Ultra-Lightweight
&lt;/h3&gt;

&lt;p&gt;JDU uses ~80MB of RAM at runtime and downloads at under 8MB. It starts in under 2 seconds. Compare that to a typical Electron app at 350MB RAM and 120MB to download.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔒 Privacy-First
&lt;/h3&gt;

&lt;p&gt;Zero tracking. Zero telemetry. Zero data collection of any kind. Your Jira credentials are handled entirely by Jira's own login system — exactly as in a browser. JDU has no backend servers and sends nothing anywhere. The full source code is on GitHub.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌐 Works With Any Jira
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Jira Cloud (&lt;code&gt;*.atlassian.net&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;✅ Jira Server (self-hosted)&lt;/li&gt;
&lt;li&gt;✅ Jira Data Center&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🧠 Smart Memory
&lt;/h3&gt;

&lt;p&gt;JDU remembers your Jira URL and window size/position across sessions. Open the app, get straight to your board — no setup, no re-entering URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  🎨 Custom Backgrounds &amp;amp; Overlay
&lt;/h3&gt;

&lt;p&gt;Starting in v0.1.3, you can personalize the JDU window with 5 curated background images and fine-tune overlay opacity (0–100%) to match your taste.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 Dynamic Window Titles
&lt;/h3&gt;

&lt;p&gt;The window title updates as you navigate between Jira pages — so if you use your taskbar or window switcher, you always know exactly where you are.&lt;/p&gt;

&lt;h3&gt;
  
  
  📱 Cross-Platform
&lt;/h3&gt;

&lt;p&gt;JDU runs natively on &lt;strong&gt;Windows&lt;/strong&gt;, &lt;strong&gt;macOS&lt;/strong&gt;, and &lt;strong&gt;Linux&lt;/strong&gt;. Same experience, same performance, everywhere.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧩 Why Not Electron? (And Why This Matters for Jira Users)
&lt;/h2&gt;

&lt;p&gt;This is the question most developers ask first — and it's a fair one. Almost every "desktop wrapper" app you've used was built with Electron. There's a reason JDU is different.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Electron problem
&lt;/h3&gt;

&lt;p&gt;Electron works by bundling an entire copy of Chromium — Google Chrome's rendering engine — into every app. Every. Single. App. That means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your Jira wrapper carries ~120MB of download just to boot&lt;/li&gt;
&lt;li&gt;It consumes 300–500MB of RAM before you've opened a single ticket&lt;/li&gt;
&lt;li&gt;Startup takes 5–8 seconds&lt;/li&gt;
&lt;li&gt;Background CPU usage stays elevated even when idle&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you have multiple Electron apps running (Slack, VS Code, Notion, etc.), the cumulative memory cost becomes significant. Adding a Jira Electron wrapper on top of that is just more tax.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Tauri approach
&lt;/h3&gt;

&lt;p&gt;Tauri doesn't bundle Chromium. Instead, it uses the &lt;strong&gt;webview already built into your OS&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;WebView2&lt;/strong&gt; on Windows (powered by Edge)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebKit&lt;/strong&gt; on macOS and Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rendering quality is identical. The resource cost is a fraction. And because the backend is written in Rust — a memory-safe, compiled systems language — the app is secure and fast by design.&lt;/p&gt;

&lt;p&gt;For Jira users specifically, this matters because JDU is likely running all day. A tool you keep open for 8 hours should not be quietly draining your battery and RAM for 8 hours.&lt;/p&gt;




&lt;h2&gt;
  
  
  📈 Performance at a Glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;JDU&lt;/th&gt;
&lt;th&gt;Typical Electron App&lt;/th&gt;
&lt;th&gt;Browser Tab&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Memory Usage&lt;/td&gt;
&lt;td&gt;~80 MB&lt;/td&gt;
&lt;td&gt;~350 MB&lt;/td&gt;
&lt;td&gt;~150 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Startup Time&lt;/td&gt;
&lt;td&gt;&amp;lt; 2 seconds&lt;/td&gt;
&lt;td&gt;5–8 seconds&lt;/td&gt;
&lt;td&gt;Instant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Download Size&lt;/td&gt;
&lt;td&gt;~8 MB&lt;/td&gt;
&lt;td&gt;~120 MB&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Background CPU&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;High (with other tabs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tracking / Telemetry&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Varies&lt;/td&gt;
&lt;td&gt;Browser-level&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🚀 Getting Started in 60 Seconds
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 — Download
&lt;/h3&gt;

&lt;p&gt;Head to the &lt;a href="https://github.com/cas8398/jira-desktop-unofficial/releases" rel="noopener noreferrer"&gt;GitHub releases page&lt;/a&gt; and grab the installer for your OS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2 — Install
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;🪟 Windows&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Run the &lt;code&gt;.msi&lt;/code&gt; or &lt;code&gt;.exe&lt;/code&gt; installer. JDU requires &lt;strong&gt;Microsoft Edge WebView2&lt;/strong&gt; — most Windows 10/11 machines already have it. If not, &lt;a href="https://developer.microsoft.com/en-us/microsoft-edge/webview2/" rel="noopener noreferrer"&gt;download it here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🍎 macOS&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Open the &lt;code&gt;.dmg&lt;/code&gt; file and drag JDU to your Applications folder.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🐧 Linux&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Available as &lt;code&gt;.AppImage&lt;/code&gt;, &lt;code&gt;.deb&lt;/code&gt;, or &lt;code&gt;.rpm&lt;/code&gt;. Download the format that fits your distro.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔧 Build from Source&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/cas8398/jira-desktop-unofficial
&lt;span class="nb"&gt;cd &lt;/span&gt;jira-desktop-unofficial
pnpm &lt;span class="nb"&gt;install
&lt;/span&gt;pnpm tauri build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Requires Rust, Node.js, and the &lt;a href="https://tauri.app/start/prerequisites/" rel="noopener noreferrer"&gt;Tauri prerequisites&lt;/a&gt; for your platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3 — Launch
&lt;/h3&gt;

&lt;p&gt;Open JDU, paste your Jira instance URL (e.g. &lt;code&gt;https://yourcompany.atlassian.net&lt;/code&gt;), press Enter — and you're in. JDU remembers the URL from now on.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔍 Deep Dive: JDU for Power Jira Users
&lt;/h2&gt;

&lt;p&gt;If you live in Jira — sprints, backlogs, board views, Confluence-linked tickets, JQL filters — here's what JDU specifically does and doesn't change for you.&lt;/p&gt;

&lt;h3&gt;
  
  
  What stays the same
&lt;/h3&gt;

&lt;p&gt;Everything Jira does in the browser works identically in JDU. JDU is a wrapper — it renders the real Jira web interface inside a native window. Your keyboard shortcuts, your saved filters, your board layouts, your integrations — all untouched.&lt;/p&gt;

&lt;h3&gt;
  
  
  What gets better
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Focus&lt;/strong&gt;: No browser tabs means no accidental navigation away from Jira mid-task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Switching&lt;/strong&gt;: JDU appears in your taskbar/dock like any native app. Alt-Tab to it in one move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Window memory&lt;/strong&gt;: JDU remembers where you left the window and how big it was. Reopen it, it's right where you left it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Background behavior&lt;/strong&gt;: JDU uses minimal CPU when it's not in focus, unlike a browser tab that may keep running scripts actively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Custom aesthetic&lt;/strong&gt;: With v0.1.3, you can now set a background image and control overlay opacity — making your Jira window feel more personal.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What's still on the roadmap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Desktop push notifications for Jira updates&lt;/li&gt;
&lt;li&gt;Keyboard shortcut layer for quick actions&lt;/li&gt;
&lt;li&gt;Dark mode and custom theme support&lt;/li&gt;
&lt;li&gt;Multi-account / multi-instance support&lt;/li&gt;
&lt;li&gt;Offline connection status indicators&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔖 What's New in v0.1.3
&lt;/h2&gt;

&lt;p&gt;The latest release brings meaningful visual and UX improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom Backgrounds&lt;/strong&gt; — 5 curated Pexels images to personalize your workspace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Window Titles&lt;/strong&gt; — The title bar updates as you move between Jira pages&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modern UI Redesign&lt;/strong&gt; — Cleaner interface throughout the app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better URL Validation&lt;/strong&gt; — Handles trailing slashes and edge-case URLs correctly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smarter Domain Detection&lt;/strong&gt; — More reliable Cloud vs. Server instance detection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overlay Opacity Control&lt;/strong&gt; — Slider from 0 to 100% to control background darkness&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bug Fix&lt;/strong&gt; — URL validation issue (&lt;a href="https://github.com/cas8398/jira-desktop-unofficial/issues/2" rel="noopener noreferrer"&gt;#2&lt;/a&gt;) resolved&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Special thanks to &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/tsenzuk"&gt;@tsenzuk&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;@bupemko&lt;/strong&gt;, &lt;strong&gt;@pdkrg&lt;/strong&gt;, and &lt;strong&gt;@mitrapartha&lt;/strong&gt; for reporting and helping fix the URL validation bug.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Who Should Use JDU?
&lt;/h2&gt;

&lt;p&gt;JDU is for you if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You're a &lt;strong&gt;developer, tech lead, or engineering manager&lt;/strong&gt; who navigates Jira daily&lt;/li&gt;
&lt;li&gt;You're a &lt;strong&gt;project manager or Scrum Master&lt;/strong&gt; who lives on the board and backlog views&lt;/li&gt;
&lt;li&gt;You care about &lt;strong&gt;lightweight, efficient tooling&lt;/strong&gt; and hate RAM-hungry Electron apps&lt;/li&gt;
&lt;li&gt;You want a &lt;strong&gt;distraction-free workflow&lt;/strong&gt; and browser tab chaos is real for you&lt;/li&gt;
&lt;li&gt;You value &lt;strong&gt;open-source, auditable software&lt;/strong&gt; with no hidden data collection&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;JDU is probably not for you if you primarily use Jira occasionally and don't mind the browser tab experience.&lt;/p&gt;




&lt;h2&gt;
  
  
  🤝 Contributing &amp;amp; Community
&lt;/h2&gt;

&lt;p&gt;JDU is fully open source under the MIT license and welcomes contributions of all kinds.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bug reports&lt;/strong&gt; → &lt;a href="https://github.com/cas8398/jira-desktop-unofficial/issues" rel="noopener noreferrer"&gt;GitHub Issues&lt;/a&gt; — include your OS, app version, and steps to reproduce&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature requests&lt;/strong&gt; → &lt;a href="https://github.com/cas8398/jira-desktop-unofficial/discussions" rel="noopener noreferrer"&gt;GitHub Discussions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pull requests&lt;/strong&gt; → Fork the repo, make your change, open a PR&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give it a star&lt;/strong&gt; → Helps the project get discovered by others who'd benefit from it&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📥 Download JDU Now
&lt;/h2&gt;

&lt;p&gt;Free. Open source. Under 8MB. No Electron. No bloat.&lt;/p&gt;

&lt;p&gt;➡️ &lt;strong&gt;&lt;a href="https://github.com/cas8398/jira-desktop-unofficial/releases" rel="noopener noreferrer"&gt;Download JDU — Jira Desktop Unofficial&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;⭐ &lt;strong&gt;&lt;a href="https://github.com/cas8398/jira-desktop-unofficial" rel="noopener noreferrer"&gt;Star on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;&lt;a href="https://cas8398.github.io/jira-desktop-unofficial/" rel="noopener noreferrer"&gt;Visit the Project Page&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;🛑 &lt;strong&gt;Disclaimer:&lt;/strong&gt; JDU is an independent, community-built project and is not affiliated with or endorsed by Atlassian. Jira is a registered trademark of Atlassian Corporation Plc. JDU is a desktop wrapper around the official Jira web interface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Built with ❤️ by &lt;a href="https://github.com/cas8398" rel="noopener noreferrer"&gt;cas8398&lt;/a&gt; using &lt;a href="https://tauri.app" rel="noopener noreferrer"&gt;Tauri&lt;/a&gt; — MIT License&lt;/em&gt;&lt;/p&gt;

</description>
      <category>jdu</category>
      <category>rust</category>
      <category>wecoded</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Aku Nulis Kode Seharian. Lalu Nulis Puisi di Malam Hari. Ini Kenapa</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Wed, 13 May 2026 02:59:01 +0000</pubDate>
      <link>https://dev.to/cas8398/aku-nulis-kode-seharian-lalu-nulis-puisi-di-malam-hari-ini-kenapa-2h7k</link>
      <guid>https://dev.to/cas8398/aku-nulis-kode-seharian-lalu-nulis-puisi-di-malam-hari-ini-kenapa-2h7k</guid>
      <description>&lt;p&gt;Aku tidak pernah merencanakan jadi penyair.&lt;/p&gt;

&lt;p&gt;Aku merencanakan jadi developer. Dan itu yang terjadi — aku membangun aplikasi, menulis kode, merilis produk. Banyak orang memakai apa yang aku buat. Sebagian besar tidak tahu namaku.&lt;/p&gt;

&lt;p&gt;Tapi ada sesuatu yang tidak bisa diselesaikan dengan kode.&lt;/p&gt;




&lt;h2&gt;
  
  
  Kode adalah bahasa yang jelas. Puisi adalah bahasa yang jujur.
&lt;/h2&gt;

&lt;p&gt;Ketika aku menulis fungsi, aku tahu apa yang diinginkan. Ada input, ada output, ada logika di antaranya. Semuanya bisa diuji. Kalau salah, ada pesan error.&lt;/p&gt;

&lt;p&gt;Hidup tidak bekerja seperti itu.&lt;/p&gt;

&lt;p&gt;Ada hari-hari yang terasa panjang tanpa alasan. Ada kehilangan yang tidak sempat diberi nama. Ada pertanyaan yang lebih nyaman dibiarkan menggantung daripada dijawab.&lt;/p&gt;

&lt;p&gt;Kode tidak bisa menampung itu. Puisi bisa.&lt;/p&gt;

&lt;p&gt;Bukan karena puisi punya jawaban — justru sebaliknya. Puisi adalah ruang di mana pertanyaan boleh tetap menjadi pertanyaan. Di mana "aku tidak tahu" bukan error, tapi bagian dari prosesnya.&lt;/p&gt;




&lt;h2&gt;
  
  
  Malam adalah satu-satunya waktu yang jujur
&lt;/h2&gt;

&lt;p&gt;Siang hari aku sibuk. Ada fitur yang harus dirilis, bug yang harus diperbaiki, notifikasi yang tidak berhenti. Semua itu nyata dan perlu dikerjakan.&lt;/p&gt;

&lt;p&gt;Tapi malam — malam adalah milikku sendiri.&lt;/p&gt;

&lt;p&gt;Di situlah aku mulai menulis. Bukan dengan tujuan tertentu. Bukan dengan target kata. Hanya duduk, dan membiarkan sesuatu keluar.&lt;/p&gt;

&lt;p&gt;Beberapa malam yang keluar hanya beberapa baris. Beberapa malam tidak ada apa-apa. Tapi ada malam-malam ketika aku menulis sesuatu dan merasa — &lt;em&gt;ini&lt;/em&gt;. Ini hal yang selama ini tidak bisa kuucapkan dengan cara lain.&lt;/p&gt;




&lt;h2&gt;
  
  
  Dua bahasa, satu orang
&lt;/h2&gt;

&lt;p&gt;Orang-orang sering bertanya: bagaimana bisa kamu developer sekaligus nulis puisi?&lt;/p&gt;

&lt;p&gt;Pertanyaan yang lebih tepat mungkin: bagaimana bisa kamu tidak?&lt;/p&gt;

&lt;p&gt;Keduanya adalah cara untuk membuat sesuatu dari kekosongan. Keduanya dimulai dari pertanyaan yang belum ada jawabannya. Keduanya membutuhkan kesabaran untuk duduk dalam ketidakpastian sampai sesuatu menjadi jelas.&lt;/p&gt;

&lt;p&gt;Bedanya — kode selesai ketika berjalan. Puisi selesai ketika terasa.&lt;/p&gt;




&lt;h2&gt;
  
  
  Lalu jadilah buku
&lt;/h2&gt;

&lt;p&gt;Setelah cukup lama menulis di malam hari, aku punya sekumpulan kata yang tidak tahu harus pergi ke mana.&lt;/p&gt;

&lt;p&gt;Aku susun. Aku baca ulang. Aku hapus yang tidak jujur, aku pertahankan yang terasa benar.&lt;/p&gt;

&lt;p&gt;Jadilah &lt;strong&gt;Hening yang Berjalan&lt;/strong&gt; — buku puisi pertamaku. Dua puluh empat puisi yang dibagi dalam tiga bagian: Akar, Tumbuh, Langit. Sebuah perjalanan yang tidak menawarkan kesimpulan, hanya menemani.&lt;/p&gt;

&lt;p&gt;Aku tidak menulisnya sebagai seseorang yang sudah sampai. Aku menulisnya sebagai seseorang yang masih berjalan.&lt;/p&gt;

&lt;p&gt;Mungkin kamu juga pernah di titik itu.&lt;/p&gt;




&lt;p&gt;Kalau kamu penasaran, bukunya ada di sini: &lt;a href="https://www.cahyanudien.site/hening-yang-berjalan/" rel="noopener noreferrer"&gt;cahyanudien.site/hening-yang-berjalan&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dan kalau kamu juga seorang developer yang diam-diam menyimpan sesuatu — mungkin sudah waktunya dikeluarkan.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Cahyanudien Aziz Saputra adalah pendiri FlagoDNA, pengembang aplikasi yang belajar mandiri. Banyak orang memakai apa yang ia buat. Tidak ada yang tahu berapa malam ia habiskan dalam sunyi. Buku ini adalah salah satu caranya berbicara.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>puisi</category>
      <category>cahyanudien</category>
      <category>indiedev</category>
      <category>flagodna</category>
    </item>
    <item>
      <title>The HadisKu Website Needed a Redesign. So I Did It.</title>
      <dc:creator>Cahyanudien Aziz Saputra</dc:creator>
      <pubDate>Fri, 08 May 2026 13:26:28 +0000</pubDate>
      <link>https://dev.to/cas8398/the-hadisku-website-needed-a-redesign-so-i-did-it-13ap</link>
      <guid>https://dev.to/cas8398/the-hadisku-website-needed-a-redesign-so-i-did-it-13ap</guid>
      <description>&lt;p&gt;Being an indie developer is simple, actually.&lt;/p&gt;

&lt;p&gt;You update this. You build that. You ship. You look at it a week later and think — hmm. Something's off. Then you fix it.&lt;/p&gt;

&lt;p&gt;That's the whole loop.&lt;/p&gt;




&lt;p&gt;This time it was the HadisKu website.&lt;/p&gt;

&lt;p&gt;HadisKu is my app. A hadis library — 75,000+ hadis from 14 Imam, free, no ads, no subscriptions. I built it because I wanted it to exist. That's the only reason. No business plan. No target market. Just: this should exist, and I'm the one who can make it.&lt;/p&gt;

&lt;p&gt;The app itself felt right. Dark, quiet, focused. The kind of thing you open at night before sleep to read something that actually means something.&lt;/p&gt;

&lt;p&gt;The website didn't feel like that at all.&lt;/p&gt;

&lt;p&gt;It was fine. Informative. It told you what HadisKu was. But it didn't &lt;em&gt;feel&lt;/em&gt; like HadisKu. It felt like a readme. And I kept closing my laptop slightly annoyed about it, for months, without doing anything.&lt;/p&gt;

&lt;p&gt;Then one weekend I just... did something.&lt;/p&gt;




&lt;h2&gt;
  
  
  No plan. Just a feeling.
&lt;/h2&gt;

&lt;p&gt;I didn't sit down with a mood board or a color theory document.&lt;/p&gt;

&lt;p&gt;I sat down and asked: what does HadisKu &lt;em&gt;feel&lt;/em&gt; like?&lt;/p&gt;

&lt;p&gt;Dark. Quiet. A little bit like opening an old book. Gold on the edges, like the border of a manuscript. Arabic text that actually looks like Arabic text, not a font that happens to support it.&lt;/p&gt;

&lt;p&gt;So that's what I built toward. A dark background the color of a room at 3am. Gold as the accent — not flashy gold, old-manuscript gold. A headline font rooted in Arabic typography. And the first thing you see on the page? Not a description of the app. A hadis. Bukhari No. 1.&lt;/p&gt;

&lt;p&gt;Before you read a single word about what HadisKu is, you've already read something from it.&lt;/p&gt;

&lt;p&gt;That felt right.&lt;/p&gt;




&lt;h2&gt;
  
  
  The old site told you. The new one shows you.
&lt;/h2&gt;

&lt;p&gt;That's the difference, honestly.&lt;/p&gt;

&lt;p&gt;The old one said: "HadisKu is an app with 75,000 hadis from 14 Imam."&lt;/p&gt;

&lt;p&gt;The new one just... puts the hadis in front of you. Live, from the database. Arabic text. Indonesian translation. Right there on the landing page.&lt;/p&gt;

&lt;p&gt;You don't need to install anything to know what it is. You already felt it.&lt;/p&gt;




&lt;h2&gt;
  
  
  The question nobody asks about indie work
&lt;/h2&gt;

&lt;p&gt;When you're building alone, you make every call.&lt;/p&gt;

&lt;p&gt;The color. The font. The copy. Whether to add the noise texture on the background (yes) or skip it because nobody will notice (they won't, but I will). Whether the card hover animation lifts 2px or 3px.&lt;/p&gt;

&lt;p&gt;Every single thing is yours.&lt;/p&gt;

&lt;p&gt;That's freedom. Real freedom, not the motivational-poster kind. You answer to nobody. If something looks wrong, you change it. If something looks right, you keep it. No approval needed. No committee.&lt;/p&gt;

&lt;p&gt;But it's also all yours when it's bad. When the site looks off for six months and you keep closing your laptop slightly annoyed — that's yours too. Nobody's going to fix it for you.&lt;/p&gt;

&lt;p&gt;So: is that a burden or a blessing?&lt;/p&gt;

&lt;p&gt;Honestly, both. At the same time. Always.&lt;/p&gt;




&lt;p&gt;I think that's just what indie development is. You carry the whole thing. The weight and the freedom are the same object. You can't separate them.&lt;/p&gt;

&lt;p&gt;And sometimes on a random weekend, you just pick it up and do the thing you'd been putting off.&lt;/p&gt;

&lt;p&gt;The website looks better now.&lt;/p&gt;

&lt;p&gt;On to the next thing.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;HadisKu — Kitab Hadis 14 Imam. Free, no ads, no subscriptions.&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Android · Windows · Linux · Web&lt;/em&gt;&lt;br&gt;
&lt;em&gt;&lt;a href="https://flagodna-developer.github.io/hadisku/" rel="noopener noreferrer"&gt;HadisKu Web&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>hadisku</category>
      <category>flagodna</category>
      <category>hadith</category>
    </item>
  </channel>
</rss>
