Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
500 artikel
- 19.22backend
Ketika Guard Status Dilepas: Satu Aturan Keras Pengganti Larangan
Pengalaman melepas guard forward-only pada state machine booking, dan mengapa satu aturan keras lebih efektif daripada larangan total.
TL;DR: Gara-gara guard status cuma boleh maju, admin kesulitan mundurin tiket yang salah input, malah bikin tiket sampah buat akal-akalan. Solusinya simpel: guard dibuang, admin bebas ubah status ke mana aja lewat API yang sama. Tapi satu aturan keras tetap: kalau jadi ditolak, wajib isi catatan keputusan dan pemohon otomatis dikirim surel, jadi semua kegiatan tetap ke-audit.
#workflow#backend#state-machine - 18.36tooling
Status Dokumen Diturunkan, Bukan Dicatat
Status dokumen yang dicatat manual pasti basi. Jadikan folder sebagai mesin keadaan: status diturunkan dari lokasi berkas, bukan diisi manual.
TL;DR: Dokumentasi yang jarang diupdate tuh suka bohong, statusnya bilang aktif padahal isinya udah basi. Nyuruh manusia update metadata cuma bikin orang edit spasi doang buat reset timer. Solusinya: status ngikutin lokasi folder, ADR lama gak dihapus tapi ditandai superseded.
#documentation#adr#workflow - 18.07ai
Prompt Bukan Permintaan, Melainkan Spesifikasi Kerja
Tugas agen yang sama memberi hasil berbeda setiap eksekusi. Penyebabnya prompt yang menyisakan keputusan pada model; solusinya spesifikasi kerja eksplisit.
TL;DR: Prompt sama tapi hasilnya beda-beda tiap dijalankan? Bukan modelnya yang error, tapi promptnya kekurangan detail, jadi model nebak sendiri bagian yang gak disebut. Anggap prompt itu spesifikasi kerja: sebutin tujuan, batasan, bentuk output, sama cara verifikasi, hasilnya konsisten dan hemat iterasi.
#prompt-engineering#ai-agents#workflow - 18.05frontend
Mockup Next.js Tanpa Login untuk Review Klien
Ganti gambar mockup statis dengan rute Next.js sungguhan yang bisa dibuka klien tanpa sesi, lewat daftar rute publik eksplisit di proxy.
TL;DR: Halaman mockup awalnya keblokir login, dan solusinya bukan lepasin semua autentikasi. Triknya pisahin konsep auth: mockup cuma dikecualikan dari otorisasi lewat file proxy Next.js dengan daftar rute publik eksplisit, sisanya tetap diarahkan ke login. Datanya wajib fixture, jangan sampe nyentuh DB produksi.
#nextjs#middleware#prototyping - 18.02ai
Superpowers untuk Coding Agent: Branching Masuk Akal
Adopsi kerangka superpowers mengubah aturan branching dari ritual penamaan jadi kebutuhan isolasi worktree. Pengalaman menerapkannya pada coding agent.
TL;DR: Superpowers itu framework berbasis skills yang memaksa coding agent jalan terdisiplin: brainstorming, worktree, TDD, sampai code review. Git worktree bikin tiap tugas punya branch dan direktori sendiri, jadi dua sesi bisa paralel tanpa tabrakan. Buat proyek kecil sih lebay, tapi pas agen jalan ratusan langkah sendirian, disiplin ini penyelamat.
#claude-code#superpowers#git-worktree - 01.36devops
Playbook Upgrade Hybrid: npm In-Container Plus Fallback Image
Playbook upgrade dua fase: npm di dalam kontainer plus fallback image custom, diverifikasi lewat versi yang benar-benar dilayani endpoint.
TL;DR: Gara-gara paket npm naik tapi versi yang dilayani tetap kuno, penulis sadar versi paket cuma klaim. Playbook upgradenya dirombak jadi dua fase: install npm dulu, terus cek /api/version, kalau gagal baru build image dari source. Ada health gate plus rollback otomatis, dan serial: 1 bikin blast radius cuma satu host.
#ansible#docker#npm - 00.52backend
Handler Menerima %2C: chi Tidak Mendekode Path Param
Slug dengan koma pulang 404 padahal datanya ada: chi menyimpan path param terenkode dan dekoding jadi kontrak pemilik API.
TL;DR: Slug yang ada koma atau apostrof miring ternyata gagal 404 karena chi nyimpen path param masih terenkode, jadi lookup ke database nyari %2C padahal datanya ada. Solusinya simpel: bikin middleware DecodePathParams buat unescape semua path param sekali jalan. Dipasangnya lewat r.With biar jalan setelah routing tapi sebelum handler.
#go#chi#routing - 00.06devops
Dump Users Tetap Hidup Saat db-push Mengganti Database
db-push mengganti seluruh database staging dari dump dev, akun ikut lenyap. Dua dump kecil dan guard jujur menahaninya.
TL;DR: db-push ternyata nge-replace seluruh database staging pakai dump dev, dan tabel users nggak ikut, jadi akun admin hilang terus. Solusinya: dump data users dari staging dulu sebelum DROP, terus di-restore lagi abis import. Ditambah guard kayak --complete-insert, sanity check sebelum DROP, dan chmod 600 biar aman.
#mysql#mysqldump#ssh - 00.05frontend
Tanggal di Form Mundur Satu Hari: Payload Ikut Jenis Datanya
Input date mengirim string, payload lama membawa instan UTC. Begini satu hari hilang begitu saja dan kontrak yang menahannya.
TL;DR: Tanggal input mundur satu hari gara-gara toISOString ngubah midnight WIB jadi UTC, jadi 20 Desember nyasar jadi 19 di payload. Salahnya bukan backend, tapi cara lama yang bungkus string input jadi objek Date lokal dulu. Fixnya simpel: tempel T00:00:00Z eksplisit ke string input biar tanggalnya utuh pas round-trip.
#javascript#golang#api