Situs ini dikemudikan dua tombol, seperti mesin pemiliknya. Membaca: j dan k menggulir, d dan u setengah layar, gg ke atas, G ke bawah, H dan L pindah jendela, ? membuka panduan. Spasi adalah kunci leader Neovim dan mengurus isi: Spasi lalu h beranda, r riset, p proyek, g gear, a tentang, / tag, atau Spasi lalu angka untuk melompat ke jendela bernomor itu. Home adalah prefix tmux dan mengurus jendela: Home lalu c membuka terminal, Home lalu & menutup jendela, Home lalu spasi ke jendela berikutnya. Saat fokus ada di papan ketik, h j k l memindahkan pilihan antar tombol dan Enter membukanya.

RisetR TentangA Gear — G untuk gear — papan ketik, terminal, editor, homelab.G
    ProyekP Tag — / seperti di vim: cari./
    ×
    Menu

    Tentang

    Apa yang saya bangun, dan bagaimana biasanya saya mengerjakannya.

    Nama saya Aris Jirat Kurniawan. Saya menulis perangkat lunak, dan kalau perangkat lunaknya butuh benda fisik untuk dijalankan, biasanya benda itu ikut saya buat sendiri.

    Saya kuliah Sistem Komputer di sebuah universitas di Jakarta. Server yang menyajikan halaman ini ada di rumah saya dan saya urus sendiri — jadi kalau situs ini mati, itu salah saya.

    01 — Gajah

    Ada stiker gajah di tutup laptop saya. Bukan logo yang saya desain — stiker itu menempel, tidak pernah saya lepas, dan sejak itu jadi penanda saya. Ceritanya cuma sebatas itu.

    Yang lebih layak diceritakan adalah kebiasaan di baliknya: saya lebih suka membongkar sesuatu sampai ke dasarnya daripada berhenti begitu ia mulai jalan, dan lebih suka menyelesaikan satu benda sampai tuntas daripada menggantung tiga.

    Karena itu matematika untuk pendeteksi jalan berlubang saya turunkan di kertas dulu sebelum jadi kode, papan ketiknya berjalan dari model 3D ke papan yang disolder sampai firmware-nya sendiri, dan catatan pembuatannya masih menyimpan sepuluh cetakan yang gagal berikut dua sebabnya. Namanya catatan, bukan etalase.

    02 — Yang saya bangun

    • ArkButton

      Papan ketik yang sedang saya pakai mengetik ini. Saya gambar sendiri, saya cetak, saya solder tombol demi tombol, dan firmware-nya saya tulis sendiri — sebagian besar supaya tombol yang paling sering saya tekan bisa duduk di bawah ibu jari, di tempat yang saya pilih.

    • pothole-detection

      Program yang belajar mengenali jalan berlubang dari foto — dan matematikanya saya turunkan sendiri, bukan memanggil pustaka siap pakai, lalu saya cocokkan dengan hitungan angka untuk membuktikan turunannya memang benar.

    • homelab-platform

      Sekumpulan mesin kecil di rumah yang menyajikan halaman ini, disusun supaya satu-satunya cara mengubah sesuatu adalah menuliskannya dulu — kalau saya mengutak-atik langsung sistem yang sedang jalan, dia mengembalikannya sendiri.

    • fate

      Pustaka yang menjaga sebuah proses panjang tetap tahu ia sedang berada di langkah mana — pembukuan di balik hal seperti alur pembayaran atau antrean persetujuan — berikut alat pendamping, fate-studio , yang menggambar seluruh prosesnya jadi diagram yang bisa ditelusuri sambil berjalan.

    • otm

      Cara mengirim kata sandi ke orang lain tanpa meninggalkannya selamanya di riwayat percakapan: Anda dapat satu tautan, dan tautan itu berhenti bekerja begitu dibuka.

    • clowner

      Skrip kecil yang mengubah satu aplikasi macOS jadi dua salinan yang benar-benar terpisah, supaya urusan kerja dan urusan pribadi bisa jalan berdampingan tanpa keluar-masuk akun.

    03 — Pernah ikut kerjakan

    Terbaru dulu. Baris berpanah di bawah tiap tempat adalah yang terbawa dari tempat sebelumnya ke sana.

    1. BFI Finance sekarang

      • Layanan proses berbasis workflow

        Proses persetujuan yang berjalan berhari-hari, dijalankan sebagai workflow yang tahan restart. Yang membuatnya menarik bukan itu, tapi cara urutannya ditentukan: tiap langkah mendeklarasikan bidang data apa yang ia BACA dan apa yang ia TULIS, lalu penjadwalnya menurunkan urutan eksekusi dari deklarasi itu — bukan dari rangkaian yang digambar tangan. Kalau satu nilai di hulu berubah, langkah-langkah yang terlanjur memakainya dibatalkan dan dihitung ulang; yang masukannya ternyata sama persis dengan sebelumnya memakai hasil lama, tidak dijalankan dua kali. Antar-service berkirim pesan lewat NATS JetStream dan RabbitMQ, dan riwayat tiap bidang disimpan sebagai rantai perubahan yang tidak pernah ditimpa. Layar operatornya bukan aplikasi satu halaman: formulirnya dirender di server sebagai potongan HTML, ditukar ke halaman oleh HTMX, dan hanya kontrol yang benar-benar interaktif yang dihidrasi sebagai web component.

      • Perkakas developer untuk tim platform

        CLI yang menyatukan belasan service dari repositori terpisah menjadi satu lingkungan kerja lokal: satu worktree per fitur, reverse proxy ber-HTTPS di depannya, dan proses sisa dari sesi sebelumnya dihentikan otomatis sebelum instance baru dijalankan. Sebagian besar shell — karena yang diurusnya memang proses, port, sertifikat, dan direktori — dengan Node untuk bagian yang butuh lebih dari itu.

      • Platform pelanggan, dan draf yang tidak boleh hilang

        Muka webnya dibangun di atas tumpukan yang sama dengan web pendaftaran sehingga komponennya dipakai bersama. Yang lebih menarik ada di belakangnya: verifikasi mandiri itu panjang, orang meninggalkannya di tengah dan kembali berhari-hari kemudian, jadi tiap ketikan disimpan otomatis ke penyimpanan kunci-nilai yang cepat. Isinya kemudian dipindahkan ke basis data relasional lewat baca-tembus — dibaca dari tempat baru dulu, jatuh ke tempat lama kalau belum ada di sana — supaya perpindahannya tidak pernah kehilangan draf siapa pun.

      • Aplikasi ponsel untuk agen lapangan

        Dipakai di lokasi pelanggan, bukan di meja. Jaringan di lapangan naik-turun, jadi alurnya dirancang untuk tetap konsisten ketika sambungan hilang di tengah pengisian. Firebase menangani autentikasi, pemberitahuan, dan sinkronisasi ke belakang.

      • Web pendaftaran untuk mitra di luar perusahaan

        Alur pendaftaran panjang yang diisi dari luar kantor, sering lewat ponsel dan sering terputus di tengah. Isian bertahan lintas sesi, unggahan dokumen bisa dilanjutkan, dan tiap layar punya alamatnya sendiri sehingga bisa dibuka ulang dari tautan yang sama. Bagian terbesar dari tiga tahun pertama.

      tiap langkah menyebut kebutuhannya sendiri langkah A tulis: alamat langkah B baca: alamattulis: jarak langkah C baca: jaraktulis: skor penjadwal menurunkan urutan urutan yang tidak pernah ditulis siapa pun A B C alamat berubah → B dan C dibatalkan, dihitung ulang yang masukannya sama persis: hasil lama dipakai lagi
      Urutan langkahnya tidak digambar tangan — ia diturunkan dari deklarasi baca-tulis tiap langkah, seperti lembar sebar yang menghitung ulang sel yang bergantung pada sel yang barusan diubah.

      keadaan jadi benda, bukan tumpukan boolean

    2. Ruangguru

      • Pemutar video dengan kuis di dalamnya

        Video berhenti di titik yang ditentukan, menampilkan soal, dan melanjut setelah dijawab. Sumbernya bukan berkas tunggal: potongan dikirim bertahap, kualitas berganti mengikuti bandwidth, dan tiap potongan terenkripsi sehingga pemutar harus menegosiasikan kunci ke server lisensi dan menangani kunci yang ditolak. Kombinasi keadaan itu dikelola sebagai mesin keadaan, sehingga "menyangga", "bertanya", dan "sudah dijawab" tidak dapat aktif bersamaan.

      • Web belajar untuk salah satu produknya

        Beberapa aplikasi web dalam satu monorepo dengan kumpulan komponen bersama, sehingga perbaikan diterapkan sekali dan berlaku di semuanya.

      • CMS yang dipakai bersama banyak produk

        Satu antarmuka penyuntingan untuk beberapa produk sekaligus, ditulis dalam ReasonML — bahasa bertipe ketat yang dikompilasi ke JavaScript, sehingga bentuk data yang tidak sesuai tertangkap saat kompilasi. Dirender di server lebih dulu agar halaman berisi banyak data tetap cepat tampil.

      • Registri kontrak antar-service

        Definisi bersama untuk banyak service, sehingga perubahan yang merusak kompatibilitas tertangkap sebelum rilis. Kontribusinya terpusat pada sisi kontrak: aturan otorisasi per pemanggil dan penandaan bidang yang boleh kosong.

      keadaan yang dipegang orang lain keadaan yang dia pegang sendiri XState Temporal fate pemutar video · 2021 layanan proses · 2025 miliknya · 2026 di peramban → di server dipakai → ditulis 2021 2025 2026
      Mesin keadaan masuk lewat pemutar video di peramban, muncul lagi lima tahun kemudian sebagai orkestrasi proses di server, lalu berhenti jadi pustaka orang lain.

      merawat pemutar orang lain → membangun sendiri

    3. Mola TV

      • Pemeliharaan pemutar video streaming

        Pemeliharaan pemutar yang sudah berjalan di produksi: penanganan galat pemutaran, perilaku saat bandwidth berubah, dan perbaikan pada jalur yang sering gagal.

      • Pembayaran berulang dan giliran jaga

        Bagian dari tim penagihan langganan berulang, yang kegagalannya harus terdeteksi dan bukan lewat diam-diam. Termasuk giliran jaga untuk insiden produksi.

      dari halaman ke produk: tanggal, stok, orang di lapangan

    4. YukStay

      • Halaman depan dan pencarian hunian

        Sewa apartemen dan kost bulanan. Layar pertamanya sebuah pencarian lokasi dengan jumlah unit tersedia per area, dalam dua bahasa sejak awal. Halamannya dirender di server lalu di-hydrate di peramban, jadi hasil pencarian sudah ada di HTML sebelum JavaScript-nya jalan — penting untuk halaman yang harus terindeks dan harus cepat di ponsel. Versi AMP-nya dilayani terpisah untuk hasil pencarian Google.

      • Kalender ketersediaan dan panel admin

        Ketersediaan hunian ditampilkan sebagai kalender karena penyewaan terikat rentang tanggal, bukan daftar item. Panel adminnya terhubung ke aplikasi agen lapangan berbasis React Native, dengan Firebase sebagai jembatannya.

      cepat itu keputusan awal, bukan tambalan akhir

    5. Workmate

      • Pemeliharaan klien AngularJS dan halaman baru dengan Vue

        Platform pencarian pekerja harian dengan pola permintaan bergelombang mengikuti acara dan jadwal pelatihan. Klien AngularJS yang sudah berjalan tetap dipelihara sementara halaman baru ditulis dengan Vue di sebelahnya, termasuk alur pendaftaran singkat yang dirilis dalam satu sprint.

      • Revamp dengan React dan Netlify

        Penulisan ulang antarmuka dengan React, dilayankan lewat Netlify. Anggaran waktu muat dan keterbacaan oleh mesin pencari ditetapkan di awal — pendekatan yang dibawa dari pengerjaan AMP sebelumnya — bukan dioptimalkan setelah rilis.

      kebiasaan pertama, dari seorang mentor: buktikan, jangan percaya

    6. Docotel

      • Eproc

        Sistem e-procurement mereka, dikerjakan dengan tes ditulis lebih dulu. Struktur berkas dan konvensi penamaan mengikuti panduan gaya John Papa, integrasi berjalan lewat CI, dan API-nya disusun mengikuti REST secara konsisten.

      • Calc the Game — analisis dan penyelesai

        Permainan angka yang dianalisis untuk memahami aturan internalnya, lalu dibuatkan penyelesai. Mencari urutan operasi yang mencapai angka sasaran diselesaikan sebagai persoalan permutasi.

      • Memimpin sisi front end

        Memimpin pengerjaan front end pada paruh akhir: pembagian kerja, konsistensi konvensi kode antar anggota tim, dan penyelesaian fitur dalam tenggat proyek.

      otodidak, belum ada konvensi bersama

    7. Menjajaki bidang lain

      • Arsitektur, dipilih karena bersinggungan dengan IoT

        Bangunan bisa dipasangi sensor dan dibaca dari jauh, dan itu yang menarik dari jurusannya. Pemrogramannya sendiri tetap dipelajari di luar kelas.

      • Konsultan IT sendiri

        Jasa konsultan IT dengan bekal pengalaman web development, dijalankan sendiri sebelum kembali bekerja kantoran.

      • Otomasi untuk pekerjaan administratif

        Skrip untuk bagian pekerjaan sendiri yang berulang — bentuk paling awal dari perkakas yang belakangan dibangun untuk tim.

      antarmuka = urutan keadaan, bukan tumpukan halaman

    8. Freelance

      • Aplikasi web PHP, otodidak

        Berawal dari satu tugas sekolah yang diteruskan menjadi aplikasi utuh, lalu berkembang jadi pekerjaan lepas. PHP dipelajari sendiri sampai ke Laravel.

      • Situs klien berbasis Flash

        Situs resmi seorang klien selama empat tahun: blog, halaman pencapaian, galeri, dan profil — seluruhnya dibangun di dalam satu movie Flash, sehingga navigasi, transisi, dan tiap halaman ditulis sebagai ActionScript. Dokumen HTML-nya sendiri hanya pembungkus.

      yang dilihat web yang sebenarnya ada <title> <object> .swf (tidak ada teks lain) blogmedali & pencapaiangaleri, profil, kontaksemua ditulis ActionScript di dalamnya
      Mesin pencari melihat kotak kiri; pengunjung melihat kotak kanan. Itulah sebabnya seluruh generasi situs seperti ini hilang tanpa jejak dari web.
    antarmuka ActionScript · AngularJS · ReasonML · React · Flutter 2012 layanan Protocol Buffers · gRPC · Go · Temporal · NATS 2021 platform Docker · Caddy · worktree · reverse proxy 2025 mesinnya sendiri ZMK firmware · Arduino · k3d · ArgoCD · Vault di rumah turun
    Tiap kali sebuah lapis selesai dikuasai, yang dikerjakan berikutnya ada di bawahnya. Lapis terakhir tidak dibayar siapa pun.

    04 — Sisanya

    Selebihnya kuliah, dan perkakas yang saya pakai sehari-hari — papan ketik, terminal, editor, server — semuanya tertulis di Gear. Setiap proyek di atas punya tulisannya sendiri, kalau Anda ingin bagian yang di halaman ini saya tinggalkan.

    id en
    rss gh in