05Uses
Yang dipakai harian
Perangkat yang ada di meja, lingkungan tempat kodenya ditulis, dan layanan yang menjalankan situs ini. Kelompok terakhir bisa Anda periksa sendiri lewat header situs ini dan catatan DNS domainnya.
Meja
Satu tempat kerja tetap, dipilih supaya tidak ada yang perlu dipikirkan lagi setelah dibeli.
- Mesin
- PC rakitan · AMD Ryzen 9 9950X (16 inti / 32 utas) · 64 GB DDR5-6000
Enam belas inti dipilih bukan untuk satu build yang cepat, melainkan supaya type-check, dev server, container basis data, dan browser yang sedang di-profil bisa hidup bersamaan tanpa satu pun menunggu yang lain. 64 GB membuat saya berhenti menutup jendela demi mengosongkan memori.
- Grafis
- NVIDIA GeForce RTX 4070 Ti Super
Mendorong dua panel 4K sekaligus dan mengambil alih encoding saat merekam demo, jadi perekaman tidak memakan inti yang sedang dipakai build.
- Penyimpanan
- NVMe Gen4 2 TB · NVMe 4 TB
Yang cepat untuk sistem dan repositori aktif, yang besar untuk arsip proyek dan image container. Dipisah supaya “disknya penuh” tidak pernah jadi alasan menunda sesuatu.
- Layar
- 2× 27" 4K, satu dipasang vertikal
Yang mendatar memuat editor dan browser berdampingan pada ukuran huruf yang tidak memaksa mata; yang vertikal memegang log, diff, dan dokumen panjang — tiga hal yang bentuk aslinya memang tinggi, bukan lebar.
- Keyboard
- Keychron Q1 Pro · Gateron Jupiter Brown, keycap PBT
Rangka aluminium dan gasket mount, jadi bunyinya rendah dan tidak mengganggu di panggilan video. Tata letaknya bisa diprogram di papan itu sendiri, bukan lewat aplikasi yang harus jalan di latar.
- Tetikus
- Logitech MX Master 3S
Roda gulir horizontalnya dipakai tiap hari untuk menyusuri tabel lebar, lini masa, dan diff yang melebar keluar layar.
- Audio
- Sony WH-1000XM5
Peredam bisingnya yang membuat kerja di ruang ramai tetap mungkin. Dipakai tanpa musik lebih sering daripada dengan.
- Mikrofon
- Shure MV7
Panggilan klien adalah bagian pekerjaan yang paling sering rusak oleh hal sepele. Mikrofon yang jelas menghilangkan satu kalimat yang paling membuang waktu di rapat mana pun: “maaf, tadi terputus, bisa diulang?”
- Kursi
- Herman Miller Aeron
Pengeluaran terbesar di meja ini dan satu-satunya yang tidak pernah saya sesali. Ia dipakai lebih lama daripada mesinnya, dan akan bertahan lebih lama juga.
- Meja
- Meja berdiri, tinggi bermotor
Bukan demi berdiri seharian — melainkan supaya berganti posisi tidak menuntut keputusan. Tombol yang butuh dua detik akan ditekan; penyetelan yang butuh dua menit tidak akan pernah.
Perangkat kedua
Yang dipakai ketika pekerjaannya tidak bisa menunggu sampai saya kembali ke meja — dan ketika mesin utama justru bukan tempat yang tepat untuk memeriksanya.
- Laptop
- MacBook Pro 14" · M4 Pro · 24 GB
Bukan sekadar mesin cadangan. Safari dan macOS tidak bisa diuji dari Windows, dan keduanya sumber paling sering dari bug yang tidak pernah muncul di mesin utama. Mesin ini yang menangkapnya sebelum klien yang menangkapnya.
- Uji perangkat
- iPhone · satu Android kelas menengah
Android-nya sengaja bukan kelas atas. Perangkat kencang menyembunyikan halaman yang berat sampai ia sampai ke tangan orang yang perangkatnya tidak kencang — dan itu mayoritas pengunjung di Indonesia. Setiap halaman yang saya serahkan sudah dibuka di kedua perangkat ini lebih dulu, lewat jaringan seluler, bukan Wi-Fi rumah.
- Tablet
- iPad Air · Apple Pencil
Dipakai untuk membaca ulang rancangan dan menandai revisi jauh dari editor. Menilai tata letak di perangkat yang tidak bisa saya sunting membuat saya membacanya seperti pengguna, bukan seperti penulisnya.
Lingkungan
- Sistem
- Windows 11 Pro
- Shell
- PowerShell untuk harian, WSL2 kalau butuh POSIX
Dua shell, dan batasnya jelas: PowerShell memegang apa pun yang menyentuh Windows sendiri, WSL2 memegang skrip yang nanti akan jalan di server Linux. Menjalankan skrip deploy di lingkungan yang berbeda dari tujuannya adalah cara paling mudah menemukan bug di tempat yang paling mahal.
- Runtime
- Node.js · npm · fnm untuk mengunci versi per proyek
Versinya dicantumkan di dalam proyek dan berpindah sendiri begitu saya masuk foldernya. Menjalankan kode klien di runtime yang berbeda dari servernya menghasilkan bug yang cuma muncul setelah rilis — tempat paling mahal untuk menemukannya.
- Editor
- Cursor
Turunan VS Code, jadi ekstensi dan pintasannya sama persis — pindah ke sini tidak menuntut belajar ulang apa pun.
- Terminal
- Windows Terminal · WSL2 (Ubuntu)
Satu jendela memegang tab PowerShell dan tab Ubuntu berdampingan, jadi berpindah antara keduanya tidak memutus alur kerja. Berkas proyeknya tetap di sisi Linux — menaruhnya di seberang batas sistem berkas adalah penyebab paling umum WSL terasa lambat, dan orang biasanya menyalahkan WSL-nya.
- Huruf
- JetBrains Mono
Dipilih karena nol dan huruf O, serta angka satu dan huruf l kecil, tidak pernah tertukar. Membaca ulang kunci API yang salah satu karakternya keliru adalah cara membuang setengah jam untuk kesalahan yang tidak pernah perlu terjadi.
Alur kerja
Bagian yang tidak kelihatan di tangkapan layar, dan justru bagian ini yang menentukan sebuah proyek masih bisa dilanjutkan setahun kemudian — oleh saya atau oleh orang lain.
- Kontrol versi
- Git · riwayat linear, pesan commit yang menjelaskan sebab
Rebase alih-alih merge, supaya riwayatnya terbaca sebagai catatan perubahan dan bukan sebagai log penyimpanan. Pesan commit menjawab kenapa, bukan apa — apa-nya sudah ada di diff, dan kenapa-nya cuma ada di kepala penulisnya sampai ia menuliskannya.
- Mutu kode
- TypeScript strict · ESLint · Prettier, dijalankan sebelum commit
Bukan disiplin pribadi, melainkan hook yang menolak commit-nya. Aturan yang bergantung pada ingatan akan dilanggar tepat pada hari yang paling sibuk — hari yang sama ketika kesalahan paling mahal dibuat.
- Pengujian
- Playwright untuk alur kritis, Vitest untuk logika
Tidak mengejar persentase cakupan. Yang diuji adalah jalur yang kalau rusak berarti uang atau data hilang — pendaftaran, pembayaran, dan ekspor. Sisanya diuji dengan membacanya.
- Layanan pendukung
- Docker · versi basis data disamakan dengan produksi
Basis data dan antrean tiap proyek berjalan di container pada versi yang sama persis dengan servernya. Setelah itu “di mesin saya jalan kok” berhenti jadi kalimat yang bisa dipakai siapa pun.
- Klien API
- Bruno
Koleksi permintaannya berupa berkas biasa di dalam repositori, bukan isi akun di layanan awan. Artinya ia ikut ditinjau, ikut berversi, dan tetap ada setelah siapa pun berhenti berlangganan.
- Klien basis data
- TablePlus
Menelusuri bug dengan melihat barisnya langsung hampir selalu lebih cepat daripada menebaknya dari log. Sambungan ke basis data produksi disimpan hanya-baca.
- Rahasia & kredensial
- 1Password
Kredensial klien tidak pernah berada di berkas teks biasa, riwayat percakapan, atau berkas .env yang ikut terkirim. Saat serah terima kepemilikannya dipindahkan, bukan disalin — supaya akses saya benar-benar berakhir, bukan sekadar tidak dipakai lagi.
- Catatan
- Obsidian · berkas Markdown biasa
Catatan tiap proyek berupa berkas di disk, bukan baris di layanan yang suatu hari bisa tutup. Keputusan yang dicatat saat dibuat adalah satu-satunya cara menjawab “kenapa dulu dibikin begini” dua tahun kemudian.
Server rumah
Berjalan 24 jam di rumah, dan tidak ada satu pun port yang diteruskan ke internet.
- Mesin
- Rakitan · Ryzen 7 5700X · 64 GB ECC · UPS line-interactive
ECC dipilih karena mesin ini memegang satu-satunya salinan beberapa hal, dan memori yang diam-diam salah adalah kerusakan yang tidak muncul di log mana pun. UPS-nya bukan supaya tetap bekerja saat listrik mati, melainkan supaya ia sempat mati dengan rapi — pemadaman singkat adalah cara paling umum sebuah pool ZFS rusak.
- Hypervisor
- Proxmox VE
Tiap layanan duduk di container atau VM sendiri, dengan snapshot diambil sebelum tiap perubahan. Membatalkan pembaruan yang gagal jadi urusan satu menit, bukan satu malam.
- Penyimpanan
- ZFS · 4× 8 TB RAIDZ1 · NVMe untuk cache
RAIDZ1 menahan satu disk mati tanpa kehilangan apa pun. Yang lebih penting, checksum ZFS menangkap bit yang berubah diam-diam — jenis kerusakan yang RAID biasa justru rajin menyalin ke cerminnya.
- Cadangan
- Restic ke object storage · aturan 3-2-1
RAID bukan cadangan. Yang benar-benar menyelamatkan bukan disk kedua di kotak yang sama, melainkan salinan di luar rumah yang tidak ikut terhapus ketika saya salah mengetik satu perintah.
- Jaringan
- 2,5GbE · VLAN terpisah untuk perangkat IoT
Perangkat pintar murah adalah bagian paling lemah dari jaringan rumah mana pun, dan yang paling jarang diperbarui. Mereka duduk di VLAN sendiri dan tidak bisa melihat satu pun mesin yang penting.
- Akses jarak jauh
- Tailscale (WireGuard)
Tidak ada port yang diteruskan dari router, dan server ini tidak punya alamat publik — jadi tidak ada yang bisa memindainya. Menerbitkan panel admin ke internet demi kenyamanan adalah kesalahan yang cuma perlu terjadi sekali.
- Yang berjalan
- Cermin repositori, runner CI, lingkungan staging, arsip foto, dan catatan internal
Staging yang berjalan di sini berarti klien bisa melihat dan menyetujui perubahan sebelum satu baris pun menyentuh produksi. Cermin repositorinya ada supaya pekerjaan tidak berhenti kalau layanan pihak ketiga sedang mati.
Menjalankan situs ini
Semuanya bisa diperiksa dari luar — lewat header situs ini atau catatan DNS domainnya.
- Hosting
- Vercel
Deploy dari push ke main, dan halaman statis dengan revalidasi tiap jam — tidak ada server yang perlu dijaga.
- Domain
- Jagoan Hosting, nameserver di Vercel
Registrar dan DNS sengaja dipisah: sertifikat serta catatan situs ikut deploy, sementara kepemilikan domainnya tidak menempel pada penyedia hosting.
- Surel masuk
- ImprovMX
Penerusan, bukan kotak surat. Alamat di domain sendiri tanpa satu pun kotak masuk baru untuk dijaga.
- Surel keluar
- Resend
Dipakai formulir kontak. SPF dan DMARC-nya sudah dipasang, jadi kirimannya tidak mendarat di folder spam.
- Data
- Upstash Redis
Penghitung baca dan pembatas laju formulir. Satu-satunya keadaan yang disimpan situs ini.
- Kode
- GitHub
Sekaligus sumber angka aktivitas di beranda dan /now — ditarik lewat API, bukan diketik ulang.